summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorAyal Zaks <ayal.zaks@intel.com>2017-09-13 06:28:37 +0000
committerAyal Zaks <ayal.zaks@intel.com>2017-09-13 06:28:37 +0000
commite2a8c0758fd128306c7ea771280d4e1bf527aad3 (patch)
tree1c8f17b816e0bd82a4861338bb33211394f89f93 /llvm/test/Transforms
parent20562abc1cfb594885e920368d9334b65ebc3cf0 (diff)
downloadbcm5719-llvm-e2a8c0758fd128306c7ea771280d4e1bf527aad3.tar.gz
bcm5719-llvm-e2a8c0758fd128306c7ea771280d4e1bf527aad3.zip
[LV] Fix PR34523 - avoid generating redundant selects
When converting a PHI into a series of 'select' instructions to combine the incoming values together according their edge masks, initialize the first value to the incoming value In0 of the first predecessor, instead of generating a redundant assignment 'select(Cond[0], In0, In0)'. The latter fails when the Cond[0] mask is null, representing a full mask, which can happen only when there's a single incoming value. No functional changes intended nor expected other than surviving null Cond[0]'s. This fix follows D35725, which introduced using null to represent full masks. Differential Revision: https://reviews.llvm.org/D37619 llvm-svn: 313119
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/LoopVectorize/if-conversion.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopVectorize/if-conversion.ll b/llvm/test/Transforms/LoopVectorize/if-conversion.ll
index ad50e0b00fc..dfc062eaada 100644
--- a/llvm/test/Transforms/LoopVectorize/if-conversion.ll
+++ b/llvm/test/Transforms/LoopVectorize/if-conversion.ll
@@ -168,3 +168,30 @@ cond.end:
for.end:
ret i32 %or
}
+
+; Handle PHI with single incoming value having a full mask.
+; PR34523
+
+; CHECK-LABEL: PR34523
+; CHECK: vector.body
+
+define void @PR34523() {
+bb1:
+ br label %bb2
+
+bb2: ; preds = %bb4, %bb1
+ %i = phi i16 [ undef, %bb1 ], [ %_tmp2, %bb4 ]
+ br label %bb3
+
+bb3: ; preds = %bb2
+ %_tmp1 = phi [1 x [1 x i32]]* [ undef, %bb2 ]
+ br label %bb4
+
+bb4: ; preds = %bb3
+ %_tmp2 = add i16 %i, 1
+ %_tmp3 = icmp slt i16 %_tmp2, 2
+ br i1 %_tmp3, label %bb2, label %bb5
+
+bb5: ; preds = %bb4
+ unreachable
+}
OpenPOWER on IntegriCloud