summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2017-01-19 04:54:45 +0000
committerTobias Grosser <tobias@grosser.es>2017-01-19 04:54:45 +0000
commita989a8b84c40b1fe8ee0ba0f989248d43795cc87 (patch)
tree749f8058abd70fcde62c4896cd6226b90986f223
parentc227529105f5541f46abfcb0d397f0e90f0f14ce (diff)
downloadbcm5719-llvm-a989a8b84c40b1fe8ee0ba0f989248d43795cc87.tar.gz
bcm5719-llvm-a989a8b84c40b1fe8ee0ba0f989248d43795cc87.zip
Improve test coverage in test/Isl/CodeGen/loop_partially_in_scop.ll [NFC]
We rename the test case with -metarenamer to make the variable names easier to read and add additional check lines that verify the code we currently generate for PHI nodes. This code is interesting as it contains a PHI node in a non-affine sub-region, where some incoming blocks are within the non-affine sub-region and others are outside of the non-affine subregion. As can be seen in the check lines we currently load the PHI-node value twice. This commit documents this behavior. In a subsequent patch we will try to improve this. llvm-svn: 292470
-rw-r--r--polly/test/Isl/CodeGen/loop_partially_in_scop.ll57
1 files changed, 37 insertions, 20 deletions
diff --git a/polly/test/Isl/CodeGen/loop_partially_in_scop.ll b/polly/test/Isl/CodeGen/loop_partially_in_scop.ll
index cf670e39926..9875ca33351 100644
--- a/polly/test/Isl/CodeGen/loop_partially_in_scop.ll
+++ b/polly/test/Isl/CodeGen/loop_partially_in_scop.ll
@@ -1,33 +1,50 @@
; RUN: opt %loadPolly -S -polly-codegen < %s | FileCheck %s
;
-; Verify we do not crash for this test case.
+; Verify we do not crash for this test case and additionally check the code
+; that we generate for the %tmp PHI node in the non-affine region. This code
+; is difficult to generate as some incoming edges are from basic blocks
+; from within the region and others from basic blocks from outside of the
+; non-affine region. As visible in the CHECK lines, the code we generate
+; currently loads from the PHI twice in %polly.stmt.bb2.entry, which is
+; something we should avoid.
;
; CHECK: polly.start
-;
+
+; CHECK: polly.stmt.bb2.entry: ; preds = %polly.start
+; CHECK-NEXT: %tmp.phiops.reload = load i32, i32* %tmp.phiops
+; CHECK-NEXT: %tmp.phiops.reload2 = load i32, i32* %tmp.phiops
+; CHECK-NEXT: br label %polly.stmt.bb2
+
+; CHECK: polly.stmt.bb2: ; preds = %polly.stmt.bb2, %polly.stmt.bb2.entry
+; CHECK-NEXT: %polly.tmp = phi i32 [ %tmp.phiops.reload2, %polly.stmt.bb2.entry ], [ %p_tmp4, %polly.stmt.bb2 ]
+; CHECK-NEXT: %p_tmp3 = or i32 undef, undef
+; CHECK-NEXT: %p_tmp4 = udiv i32 %p_tmp3, 10
+; CHECK-NEXT: %p_tmp6 = icmp eq i8 undef, 0
+; CHECK-NEXT: br i1 %p_tmp6, label %polly.stmt.polly.merge_new_and_old.exit, label %polly.stmt.bb2
+
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
-; Function Attrs: nounwind uwtable
-define void @compressStream() #0 {
-entry:
- br label %if.else
+define void @baz(i32 %before) {
+bb:
+ br label %bb1
-if.else: ; preds = %entry
- br label %do.body.i
+bb1: ; preds = %bb
+ br label %bb2
-do.body.i: ; preds = %for.cond.i.i.6, %for.cond.i.i.4, %do.body.i, %if.else
- %0 = phi i32 [ undef, %if.else ], [ 0, %for.cond.i.i.6 ], [ %div.i.i.2, %for.cond.i.i.4 ], [ %div.i.i.2, %do.body.i ]
- %add.i.i.2 = or i32 undef, undef
- %div.i.i.2 = udiv i32 %add.i.i.2, 10
- %1 = trunc i32 undef to i8
- %2 = icmp eq i8 %1, 0
- br i1 %2, label %for.cond.i.i.4, label %do.body.i
+bb2: ; preds = %bb8, %bb7, %bb2, %bb1
+ %tmp = phi i32 [ %before, %bb1 ], [ 0, %bb8 ], [ %tmp4, %bb7 ], [ %tmp4, %bb2 ]
+ %tmp3 = or i32 undef, undef
+ %tmp4 = udiv i32 %tmp3, 10
+ %tmp5 = trunc i32 undef to i8
+ %tmp6 = icmp eq i8 %tmp5, 0
+ br i1 %tmp6, label %bb7, label %bb2
-for.cond.i.i.4: ; preds = %do.body.i
- br i1 undef, label %for.cond.i.i.6, label %do.body.i
+bb7: ; preds = %bb2
+ br i1 undef, label %bb8, label %bb2
-for.cond.i.i.6: ; preds = %for.cond.i.i.4
- br i1 undef, label %for.cond.i.i.7, label %do.body.i
+bb8: ; preds = %bb7
+ br i1 undef, label %bb9, label %bb2
-for.cond.i.i.7: ; preds = %for.cond.i.i.6
+bb9: ; preds = %bb8
unreachable
}
OpenPOWER on IntegriCloud