[llvm] [DeadStoreElimination] Optimize tautological assignments (PR #75744)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 13 01:06:24 PST 2024


================
@@ -795,3 +795,84 @@ join:
   store i8 %v, ptr %q, align 1
   ret void
 }
+
+; Dominating condition implies value already exists, optimize store
+define void @remove_tautological_store(ptr %x, ptr %y, ptr %z) {
+; CHECK-LABEL: @remove_tautological_store(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[VALX:%.*]] = load i32, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[CMPX:%.*]] = icmp eq i32 [[VALX]], 4
+; CHECK-NEXT:    br i1 [[CMPX]], label [[IF_X:%.*]], label [[END:%.*]]
+; CHECK:       if.x:
+; CHECK-NEXT:    br label [[END]]
+; CHECK:       end:
+; CHECK-NEXT:    ret void
+;
+entry:
+  %valx = load i32, ptr %x, align 4
+  %cmpx = icmp eq i32 %valx, 4
+  br i1 %cmpx, label %if.x, label %end
+
+if.x:
+  store i32 4, ptr %x, align 4
+  br label %end
+
+end:
+  ret void
+}
----------------
nikic wrote:

Add a test variant with a variable instead of a constant?

Also add a test variant that uses `icmp ne`?

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


More information about the llvm-commits mailing list