diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2018-11-14 22:34:25 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2018-11-14 22:34:25 +0000 |
| commit | 4832ffee3902cde1c66486c1158a2383fc71bd02 (patch) | |
| tree | 647b6557c08d6f408b881418af173a61f06529f8 /llvm/test/Transforms | |
| parent | 27e1754fc9876562aee4df252350a415309fcfb9 (diff) | |
| download | bcm5719-llvm-4832ffee3902cde1c66486c1158a2383fc71bd02.tar.gz bcm5719-llvm-4832ffee3902cde1c66486c1158a2383fc71bd02.zip | |
[InstSimplify] add more tests for funnel shift with select; NFC
The cases are just different enough that we should have
complete tests to avoid bugs from typos in the code.
llvm-svn: 346902
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/InstSimplify/call.ll | 91 |
1 files changed, 78 insertions, 13 deletions
diff --git a/llvm/test/Transforms/InstSimplify/call.ll b/llvm/test/Transforms/InstSimplify/call.ll index 896537a390d..e018473c346 100644 --- a/llvm/test/Transforms/InstSimplify/call.ll +++ b/llvm/test/Transforms/InstSimplify/call.ll @@ -513,6 +513,58 @@ define i8 @fshl_zero_shift_guard(i8 %x, i8 %y, i8 %sh) { ret i8 %s } +define i8 @fshl_zero_shift_guard_swapped(i8 %x, i8 %y, i8 %sh) { +; CHECK-LABEL: @fshl_zero_shift_guard_swapped( +; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[SH:%.*]], 0 +; CHECK-NEXT: [[F:%.*]] = call i8 @llvm.fshl.i8(i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[SH]]) +; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 [[F]], i8 [[X]] +; CHECK-NEXT: ret i8 [[S]] +; + %c = icmp ne i8 %sh, 0 + %f = call i8 @llvm.fshl.i8(i8 %x, i8 %y, i8 %sh) + %s = select i1 %c, i8 %f, i8 %x + ret i8 %s +} + +define i8 @fshl_zero_shift_guard_inverted(i8 %x, i8 %y, i8 %sh) { +; CHECK-LABEL: @fshl_zero_shift_guard_inverted( +; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[SH:%.*]], 0 +; CHECK-NEXT: [[F:%.*]] = call i8 @llvm.fshl.i8(i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[SH]]) +; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 [[F]], i8 [[X]] +; CHECK-NEXT: ret i8 [[S]] +; + %c = icmp eq i8 %sh, 0 + %f = call i8 @llvm.fshl.i8(i8 %x, i8 %y, i8 %sh) + %s = select i1 %c, i8 %f, i8 %x + ret i8 %s +} + +define i8 @fshl_zero_shift_guard_inverted_swapped(i8 %x, i8 %y, i8 %sh) { +; CHECK-LABEL: @fshl_zero_shift_guard_inverted_swapped( +; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[SH:%.*]], 0 +; CHECK-NEXT: [[F:%.*]] = call i8 @llvm.fshl.i8(i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[SH]]) +; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 [[X]], i8 [[F]] +; CHECK-NEXT: ret i8 [[S]] +; + %c = icmp ne i8 %sh, 0 + %f = call i8 @llvm.fshl.i8(i8 %x, i8 %y, i8 %sh) + %s = select i1 %c, i8 %x, i8 %f + ret i8 %s +} + +define i9 @fshr_zero_shift_guard(i9 %x, i9 %y, i9 %sh) { +; CHECK-LABEL: @fshr_zero_shift_guard( +; CHECK-NEXT: [[C:%.*]] = icmp eq i9 [[SH:%.*]], 0 +; CHECK-NEXT: [[F:%.*]] = call i9 @llvm.fshr.i9(i9 [[X:%.*]], i9 [[Y:%.*]], i9 [[SH]]) +; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i9 [[Y]], i9 [[F]] +; CHECK-NEXT: ret i9 [[S]] +; + %c = icmp eq i9 %sh, 0 + %f = call i9 @llvm.fshr.i9(i9 %x, i9 %y, i9 %sh) + %s = select i1 %c, i9 %y, i9 %f + ret i9 %s +} + define i9 @fshr_zero_shift_guard_swapped(i9 %x, i9 %y, i9 %sh) { ; CHECK-LABEL: @fshr_zero_shift_guard_swapped( ; CHECK-NEXT: [[C:%.*]] = icmp ne i9 [[SH:%.*]], 0 @@ -526,6 +578,32 @@ define i9 @fshr_zero_shift_guard_swapped(i9 %x, i9 %y, i9 %sh) { ret i9 %s } +define i9 @fshr_zero_shift_guard_inverted(i9 %x, i9 %y, i9 %sh) { +; CHECK-LABEL: @fshr_zero_shift_guard_inverted( +; CHECK-NEXT: [[C:%.*]] = icmp eq i9 [[SH:%.*]], 0 +; CHECK-NEXT: [[F:%.*]] = call i9 @llvm.fshr.i9(i9 [[X:%.*]], i9 [[Y:%.*]], i9 [[SH]]) +; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i9 [[F]], i9 [[Y]] +; CHECK-NEXT: ret i9 [[S]] +; + %c = icmp eq i9 %sh, 0 + %f = call i9 @llvm.fshr.i9(i9 %x, i9 %y, i9 %sh) + %s = select i1 %c, i9 %f, i9 %y + ret i9 %s +} + +define i9 @fshr_zero_shift_guard_inverted_swapped(i9 %x, i9 %y, i9 %sh) { +; CHECK-LABEL: @fshr_zero_shift_guard_inverted_swapped( +; CHECK-NEXT: [[C:%.*]] = icmp ne i9 [[SH:%.*]], 0 +; CHECK-NEXT: [[F:%.*]] = call i9 @llvm.fshr.i9(i9 [[X:%.*]], i9 [[Y:%.*]], i9 [[SH]]) +; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i9 [[Y]], i9 [[F]] +; CHECK-NEXT: ret i9 [[S]] +; + %c = icmp ne i9 %sh, 0 + %f = call i9 @llvm.fshr.i9(i9 %x, i9 %y, i9 %sh) + %s = select i1 %c, i9 %y, i9 %f + ret i9 %s +} + define i8 @fshl_zero_shift_guard_wrong_select_op(i8 %x, i8 %y, i8 %sh) { ; CHECK-LABEL: @fshl_zero_shift_guard_wrong_select_op( ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[SH:%.*]], 0 @@ -539,19 +617,6 @@ define i8 @fshl_zero_shift_guard_wrong_select_op(i8 %x, i8 %y, i8 %sh) { ret i8 %s } -define i9 @fshr_zero_shift_guard_swapped_select_order(i9 %x, i9 %y, i9 %sh) { -; CHECK-LABEL: @fshr_zero_shift_guard_swapped_select_order( -; CHECK-NEXT: [[C:%.*]] = icmp eq i9 [[SH:%.*]], 0 -; CHECK-NEXT: [[F:%.*]] = call i9 @llvm.fshr.i9(i9 [[X:%.*]], i9 [[Y:%.*]], i9 [[SH]]) -; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i9 [[F]], i9 [[Y]] -; CHECK-NEXT: ret i9 [[S]] -; - %c = icmp eq i9 %sh, 0 - %f = call i9 @llvm.fshr.i9(i9 %x, i9 %y, i9 %sh) - %s = select i1 %c, i9 %f, i9 %y - ret i9 %s -} - define <2 x i8> @fshr_zero_shift_guard_splat(<2 x i8> %x, <2 x i8> %y, <2 x i8> %sh) { ; CHECK-LABEL: @fshr_zero_shift_guard_splat( ; CHECK-NEXT: [[C:%.*]] = icmp eq <2 x i8> [[SH:%.*]], zeroinitializer |

