[llvm] [GVN] Restrict equality propagation for pointers (PR #82458)

Nuno Lopes via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 26 07:51:30 PST 2024


================
@@ -609,3 +610,199 @@ loop.end:
   %gep3 = getelementptr inbounds i32, ptr %ptr1, i32 1
   br i1 undef, label %loop, label %if1
 }
+
+; Make sure that the call to use_ptr does not have %p1
+define void @single_phi1(ptr %p1) {
+; CHECK-LABEL: @single_phi1(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P2:%.*]] = load ptr, ptr poison, align 8
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq ptr [[P2]], [[P1:%.*]]
+; CHECK-NEXT:    br i1 [[CMP1]], label [[BB4:%.*]], label [[BB1:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    switch i8 poison, label [[BB2:%.*]] [
+; CHECK-NEXT:    i8 0, label [[BB1]]
+; CHECK-NEXT:    i8 1, label [[BB3:%.*]]
+; CHECK-NEXT:    ]
+; CHECK:       bb2:
+; CHECK-NEXT:    unreachable
+; CHECK:       bb3:
+; CHECK-NEXT:    br label [[BB4]]
+; CHECK:       bb4:
+; CHECK-NEXT:    call void @use_bool(i1 [[CMP1]])
+; CHECK-NEXT:    call void @use_ptr(ptr [[P2]])
+; CHECK-NEXT:    ret void
+;
+entry:
+  %p2 = load ptr, ptr poison, align 8
+  %cmp1 = icmp eq ptr %p2, %p1
+  br i1 %cmp1, label %bb4, label %bb1
+
+bb1:
+  switch i8 poison, label %bb2 [
----------------
nunoplopes wrote:

please use a function argument instead of poison, otherwise the whole test is UB.

https://github.com/llvm/llvm-project/pull/82458


More information about the llvm-commits mailing list