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
// If ID is 4, then expect: 7 6 5 1 2 3.
if (LID < RID) {
- if (RID < ID)
+ if (RID <= ID)
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
return true;
return false;
}
if (RID < LID) {
- if (LID < ID)
+ if (LID <= ID)
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
return false;
return true;
// LID and RID are equal, so we have different operands of the same user.
// Assume operands are added in order for all instructions.
- if (LID < ID)
+ if (LID <= ID)
if (!IsGlobalValue) // GlobalValue uses don't get reversed.
return LU->getOperandNo() < RU->getOperandNo();
return LU->getOperandNo() > RU->getOperandNo();
; 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,
; which causes the verifier to barf on this input.
%local = load i4* @globalAndFunction
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
+}