| ; This is a smoke test of randomized register allocation. The output | |
| ; of this test will change with changes to the random number generator | |
| ; implementation. | |
| ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 -sz-seed=1 \ | |
| ; RUN: -randomize-regalloc -split-local-vars=0 \ | |
| ; RUN: | FileCheck %s --check-prefix=CHECK_1 | |
| ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 -sz-seed=1 \ | |
| ; RUN: -randomize-regalloc \ | |
| ; RUN: | FileCheck %s --check-prefix=OPTM1_1 | |
| ; Same tests but with a different seed, just to verify randomness. | |
| ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 -sz-seed=123 \ | |
| ; RUN: -randomize-regalloc -split-local-vars=0 \ | |
| ; RUN: | FileCheck %s --check-prefix=CHECK_123 | |
| ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 -sz-seed=123 \ | |
| ; RUN: -randomize-regalloc \ | |
| ; RUN: | FileCheck %s --check-prefix=OPTM1_123 | |
| define internal <4 x i32> @mul_v4i32(<4 x i32> %a, <4 x i32> %b) { | |
| entry: | |
| %res = mul <4 x i32> %a, %b | |
| ret <4 x i32> %res | |
| ; OPTM1_1-LABEL: mul_v4i32 | |
| ; OPTM1_1: sub esp,0x3c | |
| ; OPTM1_1-NEXT: movups XMMWORD PTR [esp+0x20],xmm0 | |
| ; OPTM1_1-NEXT: movups XMMWORD PTR [esp+0x10],xmm1 | |
| ; OPTM1_1-NEXT: movups xmm0,XMMWORD PTR [esp+0x20] | |
| ; OPTM1_1-NEXT: pshufd xmm6,XMMWORD PTR [esp+0x20],0x31 | |
| ; OPTM1_1-NEXT: pshufd xmm2,XMMWORD PTR [esp+0x10],0x31 | |
| ; OPTM1_1-NEXT: pmuludq xmm0,XMMWORD PTR [esp+0x10] | |
| ; OPTM1_1-NEXT: pmuludq xmm6,xmm2 | |
| ; OPTM1_1-NEXT: shufps xmm0,xmm6,0x88 | |
| ; OPTM1_1-NEXT: pshufd xmm0,xmm0,0xd8 | |
| ; OPTM1_1-NEXT: movups XMMWORD PTR [esp],xmm0 | |
| ; OPTM1_1-NEXT: movups xmm0,XMMWORD PTR [esp] | |
| ; OPTM1_1-NEXT: add esp,0x3c | |
| ; OPTM1_1-NEXT: ret | |
| ; CHECK_1-LABEL: mul_v4i32 | |
| ; CHECK_1: movups xmm7,xmm0 | |
| ; CHECK_1-NEXT: pshufd xmm0,xmm0,0x31 | |
| ; CHECK_1-NEXT: pshufd xmm5,xmm1,0x31 | |
| ; CHECK_1-NEXT: pmuludq xmm7,xmm1 | |
| ; CHECK_1-NEXT: pmuludq xmm0,xmm5 | |
| ; CHECK_1-NEXT: shufps xmm7,xmm0,0x88 | |
| ; CHECK_1-NEXT: pshufd xmm7,xmm7,0xd8 | |
| ; CHECK_1-NEXT: movups xmm0,xmm7 | |
| ; CHECK_1-NEXT: ret | |
| ; OPTM1_123-LABEL: mul_v4i32 | |
| ; OPTM1_123: sub esp,0x3c | |
| ; OPTM1_123-NEXT: movups XMMWORD PTR [esp+0x20],xmm0 | |
| ; OPTM1_123-NEXT: movups XMMWORD PTR [esp+0x10],xmm1 | |
| ; OPTM1_123-NEXT: movups xmm0,XMMWORD PTR [esp+0x20] | |
| ; OPTM1_123-NEXT: pshufd xmm6,XMMWORD PTR [esp+0x20],0x31 | |
| ; OPTM1_123-NEXT: pshufd xmm2,XMMWORD PTR [esp+0x10],0x31 | |
| ; OPTM1_123-NEXT: pmuludq xmm0,XMMWORD PTR [esp+0x10] | |
| ; OPTM1_123-NEXT: pmuludq xmm6,xmm2 | |
| ; OPTM1_123-NEXT: shufps xmm0,xmm6,0x88 | |
| ; OPTM1_123-NEXT: pshufd xmm0,xmm0,0xd8 | |
| ; OPTM1_123-NEXT: movups XMMWORD PTR [esp],xmm0 | |
| ; OPTM1_123-NEXT: movups xmm0,XMMWORD PTR [esp] | |
| ; OPTM1_123-NEXT: add esp,0x3c | |
| ; OPTM1_123-NEXT: ret | |
| ; CHECK_123-LABEL: mul_v4i32 | |
| ; CHECK_123: movups xmm5,xmm0 | |
| ; CHECK_123-NEXT: pshufd xmm0,xmm0,0x31 | |
| ; CHECK_123-NEXT: pshufd xmm7,xmm1,0x31 | |
| ; CHECK_123-NEXT: pmuludq xmm5,xmm1 | |
| ; CHECK_123-NEXT: pmuludq xmm0,xmm7 | |
| ; CHECK_123-NEXT: shufps xmm5,xmm0,0x88 | |
| ; CHECK_123-NEXT: pshufd xmm5,xmm5,0xd8 | |
| ; CHECK_123-NEXT: movups xmm0,xmm5 | |
| ; CHECK_123-NEXT: ret | |
| } | |
| ; ERRORS-NOT: ICE translation error | |
| ; DUMP-NOT: SZ |