| Index: tests_lit/assembler/x86/immediate_encodings.ll
|
| diff --git a/tests_lit/assembler/x86/immediate_encodings.ll b/tests_lit/assembler/x86/immediate_encodings.ll
|
| index d3c1ac26b0792980ffe074f0009820d42e8e4cfb..5590f4e6c1624e408681bc050abc8d0b2e23a4b1 100644
|
| --- a/tests_lit/assembler/x86/immediate_encodings.ll
|
| +++ b/tests_lit/assembler/x86/immediate_encodings.ll
|
| @@ -276,5 +276,40 @@ entry:
|
| ; CHECK-LABEL: testShl16Imm1
|
| ; CHECK: 66 d1 e0 shl ax
|
|
|
| +; Currently the "test" instruction is used for 64-bit shifts, and
|
| +; for ctlz 64-bit, so we use those to test the "test" instruction.
|
| +; One optimization for "test": the "test" instruction is essentially a
|
| +; bitwise AND that doesn't modify the two source operands, so for immediates
|
| +; under 8-bits and registers with 8-bit variants we can use the shorter form.
|
| +
|
| +define internal i64 @test_via_shl64Bit(i64 %a, i64 %b) {
|
| +entry:
|
| + %shl = shl i64 %a, %b
|
| + ret i64 %shl
|
| +}
|
| +; CHECK-LABEL: test_via_shl64Bit
|
| +; CHECK: 0f a5 c2 shld edx, eax, cl
|
| +; CHECK: d3 e0 shl eax, cl
|
| +; CHECK: f6 c1 20 test cl, 32
|
| +
|
| +; Test a few register encodings of "test".
|
| +declare i64 @llvm.ctlz.i64(i64, i1)
|
| +
|
| +define i64 @test_via_ctlz_64(i64 %x, i64 %y, i64 %z, i64 %w) {
|
| +entry:
|
| + %r = call i64 @llvm.ctlz.i64(i64 %x, i1 false)
|
| + %r2 = call i64 @llvm.ctlz.i64(i64 %y, i1 false)
|
| + %r3 = call i64 @llvm.ctlz.i64(i64 %z, i1 false)
|
| + %r4 = call i64 @llvm.ctlz.i64(i64 %w, i1 false)
|
| + %res1 = add i64 %r, %r2
|
| + %res2 = add i64 %r3, %r4
|
| + %res = add i64 %res1, %res2
|
| + ret i64 %res
|
| +}
|
| +; CHECK-LABEL: test_via_ctlz_64
|
| +; CHECK-DAG: 85 c0 test eax, eax
|
| +; CHECK-DAG: 85 db test ebx, ebx
|
| +; CHECK-DAG: 85 f6 test esi, esi
|
| +
|
| ; ERRORS-NOT: ICE translation error
|
| ; DUMP-NOT: SZ
|
|
|