mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
UseListOrder: Handle self-users
Correctly sort self-users (such as PHI nodes). I added a targeted test in `test/Bitcode/use-list-order.ll` and the final missing RUN line to tests in `test/Assembly`. This is part of PR5680. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214417 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5dbbe4adbe
commit
9d65d3717c
@ -166,13 +166,13 @@ static void predictValueUseListOrderImpl(const Value *V, const Function *F,
|
|||||||
|
|
||||||
// If ID is 4, then expect: 7 6 5 1 2 3.
|
// If ID is 4, then expect: 7 6 5 1 2 3.
|
||||||
if (LID < RID) {
|
if (LID < RID) {
|
||||||
if (RID < ID)
|
if (RID <= ID)
|
||||||
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
|
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (RID < LID) {
|
if (RID < LID) {
|
||||||
if (LID < ID)
|
if (LID <= ID)
|
||||||
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
|
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
@ -180,7 +180,7 @@ static void predictValueUseListOrderImpl(const Value *V, const Function *F,
|
|||||||
|
|
||||||
// LID and RID are equal, so we have different operands of the same user.
|
// LID and RID are equal, so we have different operands of the same user.
|
||||||
// Assume operands are added in order for all instructions.
|
// Assume operands are added in order for all instructions.
|
||||||
if (LID < ID)
|
if (LID <= ID)
|
||||||
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
|
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
|
||||||
return LU->getOperandNo() < RU->getOperandNo();
|
return LU->getOperandNo() < RU->getOperandNo();
|
||||||
return LU->getOperandNo() > RU->getOperandNo();
|
return LU->getOperandNo() > RU->getOperandNo();
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
; RUN: llvm-as %s -o /dev/null
|
; RUN: llvm-as %s -o /dev/null
|
||||||
|
; RUN: verify-uselistorder %s -preserve-bc-use-list-order -num-shuffles=5
|
||||||
|
|
||||||
; Dominance relationships is not calculated correctly for unreachable blocks,
|
; Dominance relationships is not calculated correctly for unreachable blocks,
|
||||||
; which causes the verifier to barf on this input.
|
; which causes the verifier to barf on this input.
|
||||||
|
@ -118,3 +118,16 @@ entry:
|
|||||||
%local = load i4* @globalAndFunction
|
%local = load i4* @globalAndFunction
|
||||||
ret i4 %local
|
ret i4 %local
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; Check for when an instruction is its own user.
|
||||||
|
define void @selfUser() {
|
||||||
|
entry:
|
||||||
|
ret void
|
||||||
|
|
||||||
|
loop1:
|
||||||
|
br label %loop2
|
||||||
|
|
||||||
|
loop2:
|
||||||
|
%var = phi i32 [ %var, %loop1 ], [ %var, %loop2 ]
|
||||||
|
br label %loop1
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user