summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2002-09-28 16:51:47 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2002-09-28 16:51:47 +0000
commitd92bd6f95161505fc3ca4a9b4ab41a39d4bf86b6 (patch)
tree06252368a5daa0a4697283a147bf4ccad150cc57
parent34d16d64b005b6e1b0f309195b8a01aff95c1271 (diff)
downloadbcm5719-llvm-d92bd6f95161505fc3ca4a9b4ab41a39d4bf86b6.tar.gz
bcm5719-llvm-d92bd6f95161505fc3ca4a9b4ab41a39d4bf86b6.zip
Regression test for live range bug for call arguments.
llvm-svn: 3962
-rw-r--r--llvm/test/Regression/LLC/badCallArgLR.llvm.ll30
-rw-r--r--llvm/test/Regression/LLC/badCallArgLRLLVM.ll30
2 files changed, 60 insertions, 0 deletions
diff --git a/llvm/test/Regression/LLC/badCallArgLR.llvm.ll b/llvm/test/Regression/LLC/badCallArgLR.llvm.ll
new file mode 100644
index 00000000000..0a29e6de18a
--- /dev/null
+++ b/llvm/test/Regression/LLC/badCallArgLR.llvm.ll
@@ -0,0 +1,30 @@
+; This caused a problem because the argument of a call was defined by
+; the return value of another call that appears later in the code.
+; When processing the first call, the second call has not yet been processed
+; so no LiveRange has been created for its return value.
+;
+; llc dies in UltraSparcRegInfo::suggestRegs4CallArgs() with:
+; ERROR: In call instr, no LR for arg: 0x1009e0740
+;
+implementation ; Functions:
+
+declare int %getInt(int);
+
+int %main(int %argc, sbyte** %argv) {
+bb0: ;[#uses=0]
+ br label %bb2
+
+bb1:
+ %reg222 = call int (int)* %getInt(int %reg218) ;; ARG #1 HAS NO LR
+ %reg110 = add int %reg222, 1
+ %b = setle int %reg110, 0
+ br bool %b, label %bb2, label %bb3
+
+bb2:
+ %reg218 = call int (int)* %getInt(int %argc) ;; THIS CALL NOT YET SEEN
+ br label %bb1
+
+bb3:
+ ret int %reg110
+}
+
diff --git a/llvm/test/Regression/LLC/badCallArgLRLLVM.ll b/llvm/test/Regression/LLC/badCallArgLRLLVM.ll
new file mode 100644
index 00000000000..0a29e6de18a
--- /dev/null
+++ b/llvm/test/Regression/LLC/badCallArgLRLLVM.ll
@@ -0,0 +1,30 @@
+; This caused a problem because the argument of a call was defined by
+; the return value of another call that appears later in the code.
+; When processing the first call, the second call has not yet been processed
+; so no LiveRange has been created for its return value.
+;
+; llc dies in UltraSparcRegInfo::suggestRegs4CallArgs() with:
+; ERROR: In call instr, no LR for arg: 0x1009e0740
+;
+implementation ; Functions:
+
+declare int %getInt(int);
+
+int %main(int %argc, sbyte** %argv) {
+bb0: ;[#uses=0]
+ br label %bb2
+
+bb1:
+ %reg222 = call int (int)* %getInt(int %reg218) ;; ARG #1 HAS NO LR
+ %reg110 = add int %reg222, 1
+ %b = setle int %reg110, 0
+ br bool %b, label %bb2, label %bb3
+
+bb2:
+ %reg218 = call int (int)* %getInt(int %argc) ;; THIS CALL NOT YET SEEN
+ br label %bb1
+
+bb3:
+ ret int %reg110
+}
+
OpenPOWER on IntegriCloud