[PATCH] D15093: Fix the assert in Annotate the loop in SIAnnotateControlFlow pass when the loop terminator condition is a constant.
Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 12 09:15:34 PST 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL260692: AMDGPU/SI: Annotate Loops with Constant Condition in SIAnnotateControlFlow pass. (authored by chfang).
Changed prior to commit:
http://reviews.llvm.org/D15093?vs=41528&id=47812#toc
Repository:
rL LLVM
http://reviews.llvm.org/D15093
Files:
llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp
llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cfg-loop-assert.ll
Index: llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cfg-loop-assert.ll
===================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cfg-loop-assert.ll
+++ llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cfg-loop-assert.ll
@@ -0,0 +1,24 @@
+; RUN: llc -march=amdgcn -mcpu=kaveri < %s | FileCheck %s
+
+; CHECK-LABEL: {{^}}test:
+; CHECK s_and_saveexec_b64
+; CHECK s_xor_b64
+; CHECK s_or_b64 exec, exec
+; CHECK s_andn2_b64 exec, exec
+; CHECK s_cbranch_execnz
+define spir_kernel void @test(i32 %arg, i32 %arg1, i32 addrspace(1)* nocapture %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6) {
+bb:
+ %tmp = icmp ne i32 %arg, 0
+ %tmp7 = icmp ne i32 %arg1, 0
+ %tmp8 = and i1 %tmp, %tmp7
+ br i1 %tmp8, label %bb9, label %bb11
+
+bb9: ; preds = %bb
+ br label %bb10
+
+bb10: ; preds = %bb10, %bb9
+ br label %bb10
+
+bb11: ; preds = %bb
+ ret void
+}
Index: llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp
===================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp
+++ llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp
@@ -81,7 +81,8 @@
void insertElse(BranchInst *Term);
- Value *handleLoopCondition(Value *Cond, PHINode *Broken, llvm::Loop *L);
+ Value *handleLoopCondition(Value *Cond, PHINode *Broken,
+ llvm::Loop *L, BranchInst *Term);
void handleLoop(BranchInst *Term);
@@ -213,7 +214,7 @@
/// \brief Recursively handle the condition leading to a loop
Value *SIAnnotateControlFlow::handleLoopCondition(Value *Cond, PHINode *Broken,
- llvm::Loop *L) {
+ llvm::Loop *L, BranchInst *Term) {
// Only search through PHI nodes which are inside the loop. If we try this
// with PHI nodes that are outside of the loop, we end up inserting new PHI
@@ -237,7 +238,7 @@
}
Phi->setIncomingValue(i, BoolFalse);
- Value *PhiArg = handleLoopCondition(Incoming, Broken, L);
+ Value *PhiArg = handleLoopCondition(Incoming, Broken, L, Term);
NewPhi->addIncoming(PhiArg, From);
}
@@ -276,6 +277,11 @@
Value *Args[] = { Cond, Broken };
return CallInst::Create(IfBreak, Args, "", Insert);
+ // Insert IfBreak before TERM for constant COND.
+ } else if (isa<ConstantInt>(Cond)) {
+ Value *Args[] = { Cond, Broken };
+ return CallInst::Create(IfBreak, Args, "", Term);
+
} else {
llvm_unreachable("Unhandled loop condition!");
}
@@ -291,7 +297,7 @@
Value *Cond = Term->getCondition();
Term->setCondition(BoolTrue);
- Value *Arg = handleLoopCondition(Cond, Broken, L);
+ Value *Arg = handleLoopCondition(Cond, Broken, L, Term);
for (pred_iterator PI = pred_begin(Target), PE = pred_end(Target);
PI != PE; ++PI) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15093.47812.patch
Type: text/x-patch
Size: 3008 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160212/819a1914/attachment.bin>
More information about the llvm-commits
mailing list