Home | History | Annotate | Download | only in llvm2ice_tests
      1 ; This is a smoke test of randomized register allocation.  The output
      2 ; of this test will change with changes to the random number generator
      3 ; implementation.
      4 
      5 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 -sz-seed=1 \
      6 ; RUN:   -randomize-regalloc -split-local-vars=0 \
      7 ; RUN:   | FileCheck %s --check-prefix=CHECK_1
      8 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 -sz-seed=1 \
      9 ; RUN:   -randomize-regalloc \
     10 ; RUN:   | FileCheck %s --check-prefix=OPTM1_1
     11 
     12 ; Same tests but with a different seed, just to verify randomness.
     13 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 -sz-seed=123 \
     14 ; RUN:   -randomize-regalloc -split-local-vars=0 \
     15 ; RUN:   | FileCheck %s --check-prefix=CHECK_123
     16 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 -sz-seed=123 \
     17 ; RUN:   -randomize-regalloc \
     18 ; RUN:   | FileCheck %s --check-prefix=OPTM1_123
     19 
     20 define internal <4 x i32> @mul_v4i32(<4 x i32> %a, <4 x i32> %b) {
     21 entry:
     22   %res = mul <4 x i32> %a, %b
     23   ret <4 x i32> %res
     24 ; OPTM1_1-LABEL: mul_v4i32
     25 ; OPTM1_1: sub     esp,0x3c
     26 ; OPTM1_1-NEXT: movups  XMMWORD PTR [esp+0x20],xmm0
     27 ; OPTM1_1-NEXT: movups  XMMWORD PTR [esp+0x10],xmm1
     28 ; OPTM1_1-NEXT: movups  xmm0,XMMWORD PTR [esp+0x20]
     29 ; OPTM1_1-NEXT: pshufd  xmm6,XMMWORD PTR [esp+0x20],0x31
     30 ; OPTM1_1-NEXT: pshufd  xmm2,XMMWORD PTR [esp+0x10],0x31
     31 ; OPTM1_1-NEXT: pmuludq xmm0,XMMWORD PTR [esp+0x10]
     32 ; OPTM1_1-NEXT: pmuludq xmm6,xmm2
     33 ; OPTM1_1-NEXT: shufps  xmm0,xmm6,0x88
     34 ; OPTM1_1-NEXT: pshufd  xmm0,xmm0,0xd8
     35 ; OPTM1_1-NEXT: movups  XMMWORD PTR [esp],xmm0
     36 ; OPTM1_1-NEXT: movups  xmm0,XMMWORD PTR [esp]
     37 ; OPTM1_1-NEXT: add     esp,0x3c
     38 ; OPTM1_1-NEXT: ret
     39 
     40 ; CHECK_1-LABEL: mul_v4i32
     41 ; CHECK_1: movups  xmm7,xmm0
     42 ; CHECK_1-NEXT: pshufd  xmm0,xmm0,0x31
     43 ; CHECK_1-NEXT: pshufd  xmm5,xmm1,0x31
     44 ; CHECK_1-NEXT: pmuludq xmm7,xmm1
     45 ; CHECK_1-NEXT: pmuludq xmm0,xmm5
     46 ; CHECK_1-NEXT: shufps  xmm7,xmm0,0x88
     47 ; CHECK_1-NEXT: pshufd  xmm7,xmm7,0xd8
     48 ; CHECK_1-NEXT: movups  xmm0,xmm7
     49 ; CHECK_1-NEXT: ret
     50 
     51 ; OPTM1_123-LABEL: mul_v4i32
     52 ; OPTM1_123: sub     esp,0x3c
     53 ; OPTM1_123-NEXT: movups  XMMWORD PTR [esp+0x20],xmm0
     54 ; OPTM1_123-NEXT: movups  XMMWORD PTR [esp+0x10],xmm1
     55 ; OPTM1_123-NEXT: movups  xmm0,XMMWORD PTR [esp+0x20]
     56 ; OPTM1_123-NEXT: pshufd  xmm6,XMMWORD PTR [esp+0x20],0x31
     57 ; OPTM1_123-NEXT: pshufd  xmm2,XMMWORD PTR [esp+0x10],0x31
     58 ; OPTM1_123-NEXT: pmuludq xmm0,XMMWORD PTR [esp+0x10]
     59 ; OPTM1_123-NEXT: pmuludq xmm6,xmm2
     60 ; OPTM1_123-NEXT: shufps  xmm0,xmm6,0x88
     61 ; OPTM1_123-NEXT: pshufd  xmm0,xmm0,0xd8
     62 ; OPTM1_123-NEXT: movups  XMMWORD PTR [esp],xmm0
     63 ; OPTM1_123-NEXT: movups  xmm0,XMMWORD PTR [esp]
     64 ; OPTM1_123-NEXT: add     esp,0x3c
     65 ; OPTM1_123-NEXT: ret
     66 
     67 ; CHECK_123-LABEL: mul_v4i32
     68 ; CHECK_123: movups  xmm5,xmm0
     69 ; CHECK_123-NEXT: pshufd  xmm0,xmm0,0x31
     70 ; CHECK_123-NEXT: pshufd  xmm7,xmm1,0x31
     71 ; CHECK_123-NEXT: pmuludq xmm5,xmm1
     72 ; CHECK_123-NEXT: pmuludq xmm0,xmm7
     73 ; CHECK_123-NEXT: shufps  xmm5,xmm0,0x88
     74 ; CHECK_123-NEXT: pshufd  xmm5,xmm5,0xd8
     75 ; CHECK_123-NEXT: movups  xmm0,xmm5
     76 ; CHECK_123-NEXT: ret
     77 }
     78 
     79 ; ERRORS-NOT: ICE translation error
     80 ; DUMP-NOT: SZ
     81