| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -passes=instsimplify < %s -S | FileCheck %s |
| |
| define <4 x i1> @vec_reverse_known_bits(<4 x i8> %xx) { |
| ; CHECK-LABEL: @vec_reverse_known_bits( |
| ; CHECK-NEXT: ret <4 x i1> splat (i1 true) |
| ; |
| %x = or <4 x i8> %xx, <i8 128, i8 128, i8 128, i8 128> |
| %rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x) |
| %r = icmp slt <4 x i8> %rev, zeroinitializer |
| ret <4 x i1> %r |
| } |
| |
| define <4 x i1> @vec_reverse_known_bits_fail(<4 x i8> %xx) { |
| ; CHECK-LABEL: @vec_reverse_known_bits_fail( |
| ; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 -128, i8 -128, i8 -128, i8 127> |
| ; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]]) |
| ; CHECK-NEXT: [[R:%.*]] = icmp slt <4 x i8> [[REV]], zeroinitializer |
| ; CHECK-NEXT: ret <4 x i1> [[R]] |
| ; |
| %x = or <4 x i8> %xx, <i8 128, i8 128, i8 128, i8 127> |
| %rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x) |
| %r = icmp slt <4 x i8> %rev, zeroinitializer |
| ret <4 x i1> %r |
| } |
| |
| define i1 @vec_reverse_known_bits_demanded(<4 x i8> %xx) { |
| ; CHECK-LABEL: @vec_reverse_known_bits_demanded( |
| ; CHECK-NEXT: ret i1 true |
| ; |
| %x = or <4 x i8> %xx, <i8 127, i8 55, i8 128, i8 123> |
| %rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x) |
| %ele = extractelement <4 x i8> %rev, i64 1 |
| %r = icmp slt i8 %ele, 0 |
| ret i1 %r |
| } |
| |
| define i1 @vec_reverse_known_bits_demanded_fail(<4 x i8> %xx) { |
| ; CHECK-LABEL: @vec_reverse_known_bits_demanded_fail( |
| ; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 127, i8 55, i8 -128, i8 123> |
| ; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]]) |
| ; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x i8> [[REV]], i64 2 |
| ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[ELE]], 0 |
| ; CHECK-NEXT: ret i1 [[R]] |
| ; |
| %x = or <4 x i8> %xx, <i8 127, i8 55, i8 128, i8 123> |
| %rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x) |
| %ele = extractelement <4 x i8> %rev, i64 2 |
| %r = icmp slt i8 %ele, 0 |
| ret i1 %r |
| } |