mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
Regression test for live range bug for call arguments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3962 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
94c408104a
commit
0188ce4543
30
test/CodeGen/Generic/badCallArgLRLLVM.ll
Normal file
30
test/CodeGen/Generic/badCallArgLRLLVM.ll
Normal file
@ -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
|
||||
}
|
||||
|
30
test/LLC/badCallArgLR.llvm.ll
Normal file
30
test/LLC/badCallArgLR.llvm.ll
Normal file
@ -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
|
||||
}
|
||||
|
30
test/LLC/badCallArgLRLLVM.ll
Normal file
30
test/LLC/badCallArgLRLLVM.ll
Normal file
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user