[llvm] 2904a33 - [InstCombine] Add additional known bits folding tests; NFC
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Sat Mar 7 08:59:33 PST 2020
Author: Nikita Popov
Date: 2020-03-07T17:17:03+01:00
New Revision: 2904a332fe30615255796825dd5bc5ae5ce3b16c
URL: https://github.com/llvm/llvm-project/commit/2904a332fe30615255796825dd5bc5ae5ce3b16c
DIFF: https://github.com/llvm/llvm-project/commit/2904a332fe30615255796825dd5bc5ae5ce3b16c.diff
LOG: [InstCombine] Add additional known bits folding tests; NFC
Added:
llvm/test/Transforms/InstCombine/known-bits.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/known-bits.ll b/llvm/test/Transforms/InstCombine/known-bits.ll
new file mode 100644
index 000000000000..7ee01fe68d42
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/known-bits.ll
@@ -0,0 +1,79 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -instcombine -expensive-combines=0 < %s | FileCheck %s --check-prefixes=CHECK,EXPENSIVE-OFF
+; RUN: opt -S -instcombine -expensive-combines=1 < %s | FileCheck %s --check-prefixes=CHECK,EXPENSIVE-ON
+
+define void @test_shl(i1 %x) {
+; EXPENSIVE-OFF-LABEL: @test_shl(
+; EXPENSIVE-OFF-NEXT: [[Y:%.*]] = zext i1 [[X:%.*]] to i8
+; EXPENSIVE-OFF-NEXT: [[Z:%.*]] = shl i8 64, [[Y]]
+; EXPENSIVE-OFF-NEXT: [[A:%.*]] = and i8 [[Z]], 1
+; EXPENSIVE-OFF-NEXT: call void @sink(i8 [[A]])
+; EXPENSIVE-OFF-NEXT: ret void
+;
+; EXPENSIVE-ON-LABEL: @test_shl(
+; EXPENSIVE-ON-NEXT: call void @sink(i8 0)
+; EXPENSIVE-ON-NEXT: ret void
+;
+ %y = zext i1 %x to i8
+ %z = shl i8 64, %y
+ %a = and i8 %z, 1
+ call void @sink(i8 %a)
+ ret void
+}
+
+define void @test_lshr(i1 %x) {
+; EXPENSIVE-OFF-LABEL: @test_lshr(
+; EXPENSIVE-OFF-NEXT: [[Y:%.*]] = zext i1 [[X:%.*]] to i8
+; EXPENSIVE-OFF-NEXT: [[Z:%.*]] = lshr i8 64, [[Y]]
+; EXPENSIVE-OFF-NEXT: [[A:%.*]] = and i8 [[Z]], 1
+; EXPENSIVE-OFF-NEXT: call void @sink(i8 [[A]])
+; EXPENSIVE-OFF-NEXT: ret void
+;
+; EXPENSIVE-ON-LABEL: @test_lshr(
+; EXPENSIVE-ON-NEXT: call void @sink(i8 0)
+; EXPENSIVE-ON-NEXT: ret void
+;
+ %y = zext i1 %x to i8
+ %z = lshr i8 64, %y
+ %a = and i8 %z, 1
+ call void @sink(i8 %a)
+ ret void
+}
+
+define void @test_ashr(i1 %x) {
+; EXPENSIVE-OFF-LABEL: @test_ashr(
+; EXPENSIVE-OFF-NEXT: [[Y:%.*]] = zext i1 [[X:%.*]] to i8
+; EXPENSIVE-OFF-NEXT: [[Z:%.*]] = ashr i8 -16, [[Y]]
+; EXPENSIVE-OFF-NEXT: [[A:%.*]] = and i8 [[Z]], 3
+; EXPENSIVE-OFF-NEXT: call void @sink(i8 [[A]])
+; EXPENSIVE-OFF-NEXT: ret void
+;
+; EXPENSIVE-ON-LABEL: @test_ashr(
+; EXPENSIVE-ON-NEXT: call void @sink(i8 0)
+; EXPENSIVE-ON-NEXT: ret void
+;
+ %y = zext i1 %x to i8
+ %z = ashr i8 -16, %y
+ %a = and i8 %z, 3
+ call void @sink(i8 %a)
+ ret void
+}
+
+define void @test_udiv(i8 %x) {
+; EXPENSIVE-OFF-LABEL: @test_udiv(
+; EXPENSIVE-OFF-NEXT: [[Y:%.*]] = udiv i8 10, [[X:%.*]]
+; EXPENSIVE-OFF-NEXT: [[Z:%.*]] = and i8 [[Y]], 64
+; EXPENSIVE-OFF-NEXT: call void @sink(i8 [[Z]])
+; EXPENSIVE-OFF-NEXT: ret void
+;
+; EXPENSIVE-ON-LABEL: @test_udiv(
+; EXPENSIVE-ON-NEXT: call void @sink(i8 0)
+; EXPENSIVE-ON-NEXT: ret void
+;
+ %y = udiv i8 10, %x
+ %z = and i8 %y, 64
+ call void @sink(i8 %z)
+ ret void
+}
+
+declare void @sink(i8)
More information about the llvm-commits
mailing list