Regression test for live range bug for call arguments.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Sat, 28 Sep 2002 16:51:47 +0000 (16:51 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Sat, 28 Sep 2002 16:51:47 +0000 (16:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3962 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/Generic/badCallArgLRLLVM.ll [new file with mode: 0644]
test/LLC/badCallArgLR.llvm.ll [new file with mode: 0644]
test/LLC/badCallArgLRLLVM.ll [new file with mode: 0644]

diff --git a/test/CodeGen/Generic/badCallArgLRLLVM.ll b/test/CodeGen/Generic/badCallArgLRLLVM.ll
new file mode 100644 (file)
index 0000000..0a29e6d
--- /dev/null
@@ -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/test/LLC/badCallArgLR.llvm.ll b/test/LLC/badCallArgLR.llvm.ll
new file mode 100644 (file)
index 0000000..0a29e6d
--- /dev/null
@@ -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/test/LLC/badCallArgLRLLVM.ll b/test/LLC/badCallArgLRLLVM.ll
new file mode 100644 (file)
index 0000000..0a29e6d
--- /dev/null
@@ -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
+}
+