[CVP] Add test for cmp of local phi; NFC
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 3 Jan 2020 17:39:20 +0000 (18:39 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 26 Feb 2020 19:32:59 +0000 (20:32 +0100)
llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll

index 8f783f82847508909a35fbf2def9c909c505b20c..b09d2fd607a3d881748fcebaad22edfeaec27cec 100644 (file)
@@ -619,4 +619,39 @@ exit:
   ret i1 %iv
 }
 
+define void @test_cmp_phi(i8 %a) {
+; CHECK-LABEL: @test_cmp_phi(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[C0:%.*]] = icmp ult i8 [[A:%.*]], 2
+; CHECK-NEXT:    br i1 [[C0]], label [[LOOP:%.*]], label [[EXIT:%.*]]
+; CHECK:       loop:
+; CHECK-NEXT:    [[P:%.*]] = phi i8 [ [[A]], [[ENTRY:%.*]] ], [ [[B:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[C1:%.*]] = icmp ne i8 [[P]], 0
+; CHECK-NEXT:    [[C2:%.*]] = icmp ne i8 [[P]], 2
+; CHECK-NEXT:    [[C3:%.*]] = and i1 [[C1]], [[C2]]
+; CHECK-NEXT:    [[C4:%.*]] = call i1 @get_bool()
+; CHECK-NEXT:    [[B]] = zext i1 [[C4]] to i8
+; CHECK-NEXT:    br i1 [[C3]], label [[LOOP]], label [[EXIT]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret void
+;
+entry:
+  %c0 = icmp ult i8 %a, 2
+  br i1 %c0, label %loop, label %exit
+
+loop:
+  %p = phi i8 [ %a, %entry ], [ %b, %loop ]
+  %c1 = icmp ne i8 %p, 0
+  %c2 = icmp ne i8 %p, 2
+  %c3 = and i1 %c1, %c2
+  %c4 = call i1 @get_bool()
+  %b = zext i1 %c4 to i8
+  br i1 %c3, label %loop, label %exit
+
+exit:
+  ret void
+}
+
+declare i1 @get_bool()
+
 attributes #4 = { noreturn }