mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-23 15:29:51 +00:00
80792f3dde
ScheduleDAG; they don't correspond to any actual instructions so they don't need to be scheduled. This fixes a bug where the EntryToken was being scheduled multiple times in some cases, though it ended up not causing any trouble because EntryToken doesn't expand into anything. With this fixed the schedulers reliably schedule the expected number of units, so we can check this with an assertion. This requires a tweak to test/CodeGen/X86/loop-hoist.ll because it ends up getting scheduled differently in a trivial way, though it was enough to fool the prcontext+grep that the test does. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49701 91177308-0d34-0410-b5e6-96231b3b80d8
27 lines
972 B
LLVM
27 lines
972 B
LLVM
; RUN: llvm-as < %s | \
|
|
; RUN: llc -relocation-model=dynamic-no-pic -mtriple=i686-apple-darwin8.7.2 |\
|
|
; RUN: grep L_Arr.non_lazy_ptr
|
|
; RUN: llvm-as < %s | \
|
|
; RUN: llc -relocation-model=dynamic-no-pic -mtriple=i686-apple-darwin8.7.2 |\
|
|
; RUN: %prcontext L_Arr.non_lazy_ptr 1 | grep {4(%esp)}
|
|
|
|
@Arr = external global [0 x i32] ; <[0 x i32]*> [#uses=1]
|
|
|
|
define void @foo(i32 %N.in, i32 %x) {
|
|
entry:
|
|
%N = bitcast i32 %N.in to i32 ; <i32> [#uses=1]
|
|
br label %cond_true
|
|
|
|
cond_true: ; preds = %cond_true, %entry
|
|
%indvar = phi i32 [ %x, %entry ], [ %indvar.next, %cond_true ] ; <i32> [#uses=2]
|
|
%i.0.0 = bitcast i32 %indvar to i32 ; <i32> [#uses=2]
|
|
%tmp = getelementptr [0 x i32]* @Arr, i32 0, i32 %i.0.0 ; <i32*> [#uses=1]
|
|
store i32 %i.0.0, i32* %tmp
|
|
%indvar.next = add i32 %indvar, 1 ; <i32> [#uses=2]
|
|
%exitcond = icmp eq i32 %indvar.next, %N ; <i1> [#uses=1]
|
|
br i1 %exitcond, label %return, label %cond_true
|
|
|
|
return: ; preds = %cond_true
|
|
ret void
|
|
}
|