FileCheck: learning arithmetic Thomas Preud'homme Numeric - - PowerPoint PPT Presentation

filecheck learning arithmetic
SMART_READER_LITE
LIVE PREVIEW

FileCheck: learning arithmetic Thomas Preud'homme Numeric - - PowerPoint PPT Presentation

FileCheck: learning arithmetic Thomas Preud'homme Numeric constraints in toolchains Register constraints Memory layout e.g. consecutive 32-bit registers for i64 e.g. alignment of fields in struct/class v o i d f ( l o n g * p t r


slide-1
SLIDE 1

FileCheck: learning arithmetic

Thomas Preud'homme

slide-2
SLIDE 2

Numeric constraints in toolchains

v

  • i

d f ( l

  • n

g * p t r ) { ( … ) l

  • n

g r e s = p t r [ ] & p t r [ 1 ] ( … ) }

2

Addr X : obj1 Addr X+16: obj2

Register constraints

e.g. consecutive 32-bit registers for i64

and rZ, rX, rY and r(Z+1), r(X+1), r(Y+1)

Memory layout

e.g. alignment of fields in struct/class

s t r u c t f

  • {

i n t a ; l

  • n

g b ; }

  • b

j 1 ,

  • b

j 2 ;

slide-3
SLIDE 3

Numeric constraints in toolchains

3

Register constraints

e.g. consecutive 32-bit registers for i64

Memory layout

e.g. alignment of fields in struct/class

v

  • i

d f ( l

  • n

g a , l

  • n

g b ) { r e t u r n a & b } s t r u c t f

  • {

i n t a ; l

  • n

g b ; }

  • b

j 1 __attribute__ ((aligned (256))),

  • b

j 2 ;

C H E C K : a n d r , r , r 2 C H E C K : a n d r 1 , r 1 , r 3 C H E C K : x [ [ A D D R : [

  • 9

A

  • F

] * ] ] :

  • b

j 1 C H E C K : x [ [ A D D R ] ] 1 :

  • b

j 2 Problem: subset of cases tested

slide-4
SLIDE 4

FileCheck: introducing arithmetic

4

C H E C K : a n d r [ [ # X : ] ] , r [ [ # Y : ] ] , r [ [ # Z : ] ] C H E C K : a n d r [ [ # X + 1 ] ] , r [ [ # Y + 1 ] ] , r [ [ # Z + 1 ] ] Syntax: [ [ # % f m t , V A R : < r e l

  • p

> e x p r ] ] [ [ # % f m t , V A R + /

  • n

u m ] ]

slide-5
SLIDE 5

FileCheck: introducing arithmetic

C H E C K : x [ [ # % X , A D D R : ] ]

  • b

j 1 C H E C K : x [ [ # % X , A D D R + 1 6 ] ]

  • b

j 2

5

C H E C K : a n d r [ [ # X : ] ] , r [ [ # Y : ] ] , r [ [ # Z : ] ] C H E C K : a n d r [ [ # X + 1 ] ] , r [ [ # Y + 1 ] ] , r [ [ # Z + 1 ] ] Syntax: [ [ # % f m t , V A R : < r e l

  • p

> e x p r ] ] [ [ # % f m t , V A R + /

  • n

u m ] ]

slide-6
SLIDE 6

FileCheck: introducing arithmetic

C H E C K : x [ [ # % X , A D D R : ] ]

  • b

j 1 C H E C K : x [ [ # % X , A D D R + 1 6 ] ]

  • b

j 2

6

r e t u r n f

  • b

a ; C H E C K : f i l e . t x t : [ [ # F O O B A _ L I N E : @ L I N E

  • 1

] ] : u n k n

  • w

n v a r i a b l e ‘ f

  • b

a ’ C H E C K : f i l e . t x t : [ [ # F O O B A _ L I N E ] ] : d i d y

  • u

m e a n ‘ f

  • b

a r ’ C H E C K : a n d r [ [ # X : ] ] , r [ [ # Y : ] ] , r [ [ # Z : ] ] C H E C K : a n d r [ [ # X + 1 ] ] , r [ [ # Y + 1 ] ] , r [ [ # Z + 1 ] ] Syntax: [ [ # % f m t , V A R : VAR+/-num] ]

slide-7
SLIDE 7

FileCheck: introducing arithmetic

7

Syntax: [ [ # % f m t , V A R : == e x p r ] ] Expr operands: +

  • r

e t u r n f

  • b

a ; C H E C K : f i l e . t x t : [ [ # F O O B A _ L I N E : @ L I N E

  • 1

] ] : u n k n

  • w

n v a r i a b l e ‘ f

  • b

a ’ C H E C K : f i l e . t x t : [ [ # F O O B A _ L I N E ] ] : d i d y

  • u

m e a n ‘ f

  • b

a r ’ C H E C K : a n d r [ [ # X : ] ] , r [ [ # Y : ] ] , r [ [ # Z : ] ] C H E C K : a n d r [ [ # X + 1 ] ] , r [ [ # Y + 1 ] ] , r [ [ # Z + 1 ] ] C H E C K : x [ [ # % X , A D D R : ] ]

  • b

j 1 C H E C K : x [ [ # % X , A D D R + F O O _ S I Z E ] ]

  • b

j 2

slide-8
SLIDE 8

FileCheck numeric expression: future work

8

Syntax: [ [ # % f m t , V A R : == e x p r ] ] Expr operands: +

slide-9
SLIDE 9

FileCheck numeric expression: future work

  • Richer expressions

C H E C K : a r r a y s i z e = [ [ # S I Z E : 8 * ( E L E M _ B I T S I Z E + G A P ) ] ] b y t e s

9

Syntax: [ [ # % f m t , V A R : == e x p r ] ] Expr operands: +

  • *

/ ( )

slide-10
SLIDE 10

FileCheck numeric expression: future work

  • Richer expressions

C H E C K : a r r a y s i z e = [ [ # S I Z E : 8 * ( E L E M _ B I T S I Z E + G A P ) ] ] b y t e s

  • Inequalities

C H E C K : s i z e = [ [ # S I Z E : < 4 2 ] ] b y t e s

10

Syntax: [ [ # % f m t , V A R : < r e l

  • p

> e x p r ] ] Expr operands: +

  • *

/ ( )

slide-11
SLIDE 11

FileCheck numeric expression: future work

  • Richer expressions

C H E C K : a r r a y s i z e = [ [ # S I Z E : 8 * ( E L E M _ B I T S I Z E + G A P ) ] ] b y t e s

  • Inequalities

C H E C K : s i z e = [ [ # S I Z E : < 4 2 ] ] b y t e s

  • Suggestions? Contribute to llvm-dev ML thread

11

Syntax: [ [ # % f m t , V A R : < r e l

  • p

> e x p r ] ] Expr operands: +

  • *

/ ( )

slide-12
SLIDE 12

THANK YOU

Thomas Preud'homme thomasp@graphcore.ai

12