[llvm] [InstCombine] Propagate exact flags in shift-combine transforms (PR #88340)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 12 18:00:36 PDT 2024
================
@@ -433,6 +433,34 @@ entry:
ret i32 %i10
}
+define i32 @test29_exact(i64 %d18) {
+; CHECK-LABEL: @test29_exact(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[SUM_SHIFT:%.*]] = lshr exact i64 [[D18:%.*]], 63
+; CHECK-NEXT: [[I101:%.*]] = trunc nuw nsw i64 [[SUM_SHIFT]] to i32
+; CHECK-NEXT: ret i32 [[I101]]
+;
+entry:
+ %i916 = lshr exact i64 %d18, 32
+ %i917 = trunc i64 %i916 to i32
+ %i10 = lshr exact i32 %i917, 31
+ ret i32 %i10
+}
+
+define i32 @test29_exact_fail(i64 %d18) {
+; CHECK-LABEL: @test29_exact_fail(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[SUM_SHIFT:%.*]] = lshr i64 [[D18:%.*]], 63
+; CHECK-NEXT: [[I101:%.*]] = trunc nuw nsw i64 [[SUM_SHIFT]] to i32
+; CHECK-NEXT: ret i32 [[I101]]
+;
+entry:
+ %i916 = lshr exact i64 %d18, 32
+ %i917 = trunc i64 %i916 to i32
+ %i10 = lshr i32 %i917, 31
+ ret i32 %i10
+}
----------------
nikic wrote:
Also add a variant where the exact is only on the last shift, rather than only on the first.
https://github.com/llvm/llvm-project/pull/88340
More information about the llvm-commits
mailing list