[llvm] r341744 - [X86] Add load folding test cases for the addcarryx intrinsic.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 7 23:31:42 PDT 2018


Author: ctopper
Date: Fri Sep  7 23:31:41 2018
New Revision: 341744

URL: http://llvm.org/viewvc/llvm-project?rev=341744&view=rev
Log:
[X86] Add load folding test cases for the addcarryx intrinsic.

We are currently only able to fold a load in operand 1 to ADCX. A load in operand 0 will use the legacy ADC instruction.

Ultimately I want to remove isel support for ADCX, but first I'm going to fix the shortcomings I know of so I can write proper MIR tests to maintain coverage later.

Modified:
    llvm/trunk/test/CodeGen/X86/adx-intrinsics.ll

Modified: llvm/trunk/test/CodeGen/X86/adx-intrinsics.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/adx-intrinsics.ll?rev=341744&r1=341743&r2=341744&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/adx-intrinsics.ll (original)
+++ llvm/trunk/test/CodeGen/X86/adx-intrinsics.ll Fri Sep  7 23:31:41 2018
@@ -28,6 +28,48 @@ define i8 @test_addcarryx_u32(i8 %c, i32
   ret i8 %3
 }
 
+define i8 @test_addcarryx_u32_load(i8 %c, i32* %aptr, i32 %b, i8* %ptr) {
+; CHECK-LABEL: test_addcarryx_u32_load:
+; CHECK:       ## %bb.0:
+; CHECK-NEXT:    addb $-1, %dil ## encoding: [0x40,0x80,0xc7,0xff]
+; CHECK-NEXT:    adcl (%rsi), %edx ## encoding: [0x13,0x16]
+; CHECK-NEXT:    setb %al ## encoding: [0x0f,0x92,0xc0]
+; CHECK-NEXT:    movl %edx, (%rcx) ## encoding: [0x89,0x11]
+; CHECK-NEXT:    retq ## encoding: [0xc3]
+  %a = load i32, i32* %aptr
+  %ret = call { i8, i32 } @llvm.x86.addcarryx.u32(i8 %c, i32 %a, i32 %b)
+  %1 = extractvalue { i8, i32 } %ret, 1
+  %2 = bitcast i8* %ptr to i32*
+  store i32 %1, i32* %2, align 1
+  %3 = extractvalue { i8, i32 } %ret, 0
+  ret i8 %3
+}
+
+define i8 @test_addcarryx_u32_load2(i8 %c, i32 %a, i32* %bptr, i8* %ptr) {
+; NOADX-LABEL: test_addcarryx_u32_load2:
+; NOADX:       ## %bb.0:
+; NOADX-NEXT:    addb $-1, %dil ## encoding: [0x40,0x80,0xc7,0xff]
+; NOADX-NEXT:    adcl (%rdx), %esi ## encoding: [0x13,0x32]
+; NOADX-NEXT:    setb %al ## encoding: [0x0f,0x92,0xc0]
+; NOADX-NEXT:    movl %esi, (%rcx) ## encoding: [0x89,0x31]
+; NOADX-NEXT:    retq ## encoding: [0xc3]
+;
+; ADX-LABEL: test_addcarryx_u32_load2:
+; ADX:       ## %bb.0:
+; ADX-NEXT:    addb $-1, %dil ## encoding: [0x40,0x80,0xc7,0xff]
+; ADX-NEXT:    adcxl (%rdx), %esi ## encoding: [0x66,0x0f,0x38,0xf6,0x32]
+; ADX-NEXT:    setb %al ## encoding: [0x0f,0x92,0xc0]
+; ADX-NEXT:    movl %esi, (%rcx) ## encoding: [0x89,0x31]
+; ADX-NEXT:    retq ## encoding: [0xc3]
+  %b = load i32, i32* %bptr
+  %ret = call { i8, i32 } @llvm.x86.addcarryx.u32(i8 %c, i32 %a, i32 %b)
+  %1 = extractvalue { i8, i32 } %ret, 1
+  %2 = bitcast i8* %ptr to i32*
+  store i32 %1, i32* %2, align 1
+  %3 = extractvalue { i8, i32 } %ret, 0
+  ret i8 %3
+}
+
 declare { i8, i64 } @llvm.x86.addcarryx.u64(i8, i64, i64)
 
 define i8 @test_addcarryx_u64(i8 %c, i64 %a, i64 %b, i8* %ptr) {




More information about the llvm-commits mailing list