[llvm] r236272 - Don't always apply kill flag in thumb2 ABS pseudo expansion.

Pete Cooper peter_cooper at apple.com
Thu Apr 30 15:16:00 PDT 2015


Author: pete
Date: Thu Apr 30 17:15:59 2015
New Revision: 236272

URL: http://llvm.org/viewvc/llvm-project?rev=236272&view=rev
Log:
Don't always apply kill flag in thumb2 ABS pseudo expansion.

The expansion for t2ABS was always setting the kill flag on the rsb instruction.
It should instead only be set on rsb if it was set on the original ABS instruction.

rdar://problem/20752113

Added:
    llvm/trunk/test/CodeGen/ARM/t2abs-killflags.ll
Modified:
    llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp

Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=236272&r1=236271&r2=236272&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Thu Apr 30 17:15:59 2015
@@ -7501,6 +7501,7 @@ ARMTargetLowering::EmitInstrWithCustomIn
 
     unsigned int ABSSrcReg = MI->getOperand(1).getReg();
     unsigned int ABSDstReg = MI->getOperand(0).getReg();
+    bool ABSSrcKIll = MI->getOperand(1).isKill();
     bool isThumb2 = Subtarget->isThumb2();
     MachineRegisterInfo &MRI = Fn->getRegInfo();
     // In Thumb mode S must not be specified if source register is the SP or
@@ -7534,7 +7535,7 @@ ARMTargetLowering::EmitInstrWithCustomIn
     // by if-conversion pass
     BuildMI(*RSBBB, RSBBB->begin(), dl,
       TII->get(isThumb2 ? ARM::t2RSBri : ARM::RSBri), NewRsbDstReg)
-      .addReg(ABSSrcReg, RegState::Kill)
+      .addReg(ABSSrcReg, ABSSrcKIll ? RegState::Kill : 0)
       .addImm(0).addImm((unsigned)ARMCC::AL).addReg(0).addReg(0);
 
     // insert PHI in SinkBB,

Added: llvm/trunk/test/CodeGen/ARM/t2abs-killflags.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/t2abs-killflags.ll?rev=236272&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/t2abs-killflags.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/t2abs-killflags.ll Thu Apr 30 17:15:59 2015
@@ -0,0 +1,23 @@
+; RUN: llc %s -o - -verify-machineinstrs | FileCheck %s
+
+target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"
+target triple = "thumbv7s-unknown-unknown"
+
+; Test that we don't crash the machine verifier when expanding t2ABS.
+; It was applying the kill flag to its source, even if the original t2ABS didn't
+; kill the operand prior to pseudo expansion.
+
+; Function Attrs: noreturn
+declare void @foo(i32, i32) #0
+
+; CHECK-LABEL: @test
+; CHECK: rsbmi
+define void @test(i32 %arg) {
+  %cmp58 = icmp slt i32 %arg, 0
+  %sub62 = sub nsw i32 0, %arg
+  %l.1 = select i1 %cmp58, i32 %sub62, i32 %arg
+  call void @foo(i32 %l.1, i32 %arg) #0
+  unreachable
+}
+
+attributes #0 = { noreturn }





More information about the llvm-commits mailing list