[llvm] r325761 - [ARM] Fix issue with large xor constants.

David Green via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 22 01:38:57 PST 2018


Author: dmgreen
Date: Thu Feb 22 01:38:57 2018
New Revision: 325761

URL: http://llvm.org/viewvc/llvm-project?rev=325761&view=rev
Log:
[ARM] Fix issue with large xor constants.

Fixup to rL325573 for large xor constants.

Thanks to Eli Friedman for the catch.

Differential revision: https://reviews.llvm.org/D43549


Modified:
    llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.cpp
    llvm/trunk/test/CodeGen/Thumb/mvn.ll

Modified: llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.cpp?rev=325761&r1=325760&r2=325761&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.cpp Thu Feb 22 01:38:57 2018
@@ -127,11 +127,8 @@ int ARMTTIImpl::getIntImmCost(unsigned O
   }
 
   // xor a, -1 can always be folded to MVN
-  if (Opcode == Instruction::Xor) {
-    int64_t NegImm = Imm.getSExtValue();
-    if (NegImm == -1)
-      return 0;
-  }
+  if (Opcode == Instruction::Xor && Imm.isAllOnesValue())
+    return 0;
 
   return getIntImmCost(Imm, Ty);
 }

Modified: llvm/trunk/test/CodeGen/Thumb/mvn.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb/mvn.ll?rev=325761&r1=325760&r2=325761&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Thumb/mvn.ll (original)
+++ llvm/trunk/test/CodeGen/Thumb/mvn.ll Thu Feb 22 01:38:57 2018
@@ -191,3 +191,32 @@ for.cond.cleanup:
   ret void
 }
 
+
+define void @test128(i128* %a) {
+; CHECK-LABEL: test128:
+; CHECK:         ldr r1, [r0, #4]
+; CHECK-NEXT:    ldr r2, .LCPI8_0
+; CHECK-NEXT:    eors r2, r1
+; CHECK-NEXT:    str r2, [r0, #4]
+; CHECK-NEXT:    ldr r1, [r0]
+; CHECK-NEXT:    ldr r2, .LCPI8_1
+; CHECK-NEXT:    eors r2, r1
+; CHECK-NEXT:    str r2, [r0]
+; CHECK-NEXT:    ldr r1, [r0, #8]
+; CHECK-NEXT:    ldr r2, .LCPI8_2
+; CHECK-NEXT:    eors r2, r1
+; CHECK-NEXT:    str r2, [r0, #8]
+; CHECK-NEXT:    bx lr
+; CHECK-NEXT:    .p2align 2
+; CHECK-NEXT:  .LCPI8_0:
+; CHECK-NEXT:    .long 4075008415
+; CHECK-NEXT:  .LCPI8_1:
+; CHECK-NEXT:    .long 2080661269
+; CHECK-NEXT:  .LCPI8_2:
+; CHECK-NEXT:    .long 6692605
+  %x = load i128, i128* %a
+  %xn = xor i128 %x, 123456789123456789123456789
+  store i128 %xn, i128* %a
+  ret void
+}
+




More information about the llvm-commits mailing list