[llvm] r195565 - Fix a funny bug I introduced during conversion of ARM constant islands to Mips.

Reed Kotler rkotler at mips.com
Sat Nov 23 18:53:09 PST 2013


Author: rkotler
Date: Sat Nov 23 20:53:09 2013
New Revision: 195565

URL: http://llvm.org/viewvc/llvm-project?rev=195565&view=rev
Log:
Fix a funny bug I introduced during conversion of ARM constant islands to Mips.
I had to move some code and I moved a declaration forward past it's first use
in the function but by nutty coincidence there was another variable of the same
name and type and  with completely unrelated function that was declared globally
in the class so no compilation error ensued.
It required some unusual conditions for it to even matter. Caused test
case casts.c in test-suite to fail during compilation with a duplicate 
symbol error. I would have noticed it during final code review for this port.


Added:
    llvm/trunk/test/CodeGen/Mips/ci2.ll
Modified:
    llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp

Modified: llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp?rev=195565&r1=195564&r2=195565&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MipsConstantIslandPass.cpp Sat Nov 23 20:53:09 2013
@@ -1275,6 +1275,10 @@ bool MipsConstantIslands::handleConstant
   // Decrement the old entry, and remove it if refcount becomes 0.
   decrementCPEReferenceCount(CPI, CPEMI);
 
+  // No existing clone of this CPE is within range.
+  // We will be generating a new clone.  Get a UID for it.
+  unsigned ID = createPICLabelUId();
+
   // Now that we have an island to add the CPE to, clone the original CPE and
   // add it to the island.
   U.HighWaterMark = NewIsland;
@@ -1290,9 +1294,7 @@ bool MipsConstantIslands::handleConstant
   BBInfo[NewIsland->getNumber()].Size += Size;
   adjustBBOffsetsAfter(llvm::prior(MachineFunction::iterator(NewIsland)));
 
-  // No existing clone of this CPE is within range.
-  // We will be generating a new clone.  Get a UID for it.
-  unsigned ID = createPICLabelUId();
+
 
   // Finally, change the CPI in the instruction operand to be ID.
   for (unsigned i = 0, e = UserMI->getNumOperands(); i != e; ++i)

Added: llvm/trunk/test/CodeGen/Mips/ci2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/ci2.ll?rev=195565&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Mips/ci2.ll (added)
+++ llvm/trunk/test/CodeGen/Mips/ci2.ll Sat Nov 23 20:53:09 2013
@@ -0,0 +1,39 @@
+; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=static -mips16-constant-islands   < %s | FileCheck %s -check-prefix=constisle
+
+ at i = common global i32 0, align 4
+ at b = common global i32 0, align 4
+ at l = common global i32 0, align 4
+
+; Function Attrs: nounwind
+define void @foo() #0 {
+entry:
+  store i32 305419896, i32* @i, align 4
+  %0 = load i32* @b, align 4
+  %tobool = icmp ne i32 %0, 0
+  br i1 %tobool, label %if.then, label %if.else
+
+if.then:                                          ; preds = %entry
+  store i32 10, i32* @b, align 4
+  br label %if.end
+
+if.else:                                          ; preds = %entry
+  store i32 20, i32* @b, align 4
+  br label %if.end
+
+if.end:                                           ; preds = %if.else, %if.then
+  call void asm sideeffect ".space 100000", ""() #1, !srcloc !1
+  store i32 305419896, i32* @l, align 4
+  ret void
+; constisle: $CPI0_1:
+; constisle	.4byte	305419896               # 0x12345678
+; constisle	#APP
+; constisle	.space 100000
+; constisle	#NO_APP
+; constisle $CPI0_0:
+; constisle	.4byte	305419896               # 0x12345678
+}
+
+attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { nounwind }
+
+!1 = metadata !{i32 103}





More information about the llvm-commits mailing list