1f9f4aba5SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2f9f4aba5SNoah Goldstein; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3f9f4aba5SNoah Goldstein 4f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umax_non_zero(<4 x i8> %xx) { 5f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_non_zero( 6f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 1, i8 0, i8 0> 7f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]]) 8f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 9f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 10f9f4aba5SNoah Goldstein; 11f9f4aba5SNoah Goldstein %x = add nuw <4 x i8> %xx, <i8 0, i8 1, i8 0, i8 0> 12f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x) 13f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 14f9f4aba5SNoah Goldstein ret i1 %r 15f9f4aba5SNoah Goldstein} 16f9f4aba5SNoah Goldstein 17f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umax_non_zero_fail(<4 x i8> %xx) { 18f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_non_zero_fail( 19*38fffa63SPaul Walker; CHECK-NEXT: [[X:%.*]] = add nsw <4 x i8> [[XX:%.*]], splat (i8 1) 20f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]]) 21f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 22f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 23f9f4aba5SNoah Goldstein; 24f9f4aba5SNoah Goldstein %x = add nsw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1> 25f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x) 26f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 27f9f4aba5SNoah Goldstein ret i1 %r 28f9f4aba5SNoah Goldstein} 29f9f4aba5SNoah Goldstein 30f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umin_non_zero(<4 x i8> %xx) { 31f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_non_zero( 3277d66845SNoah Goldstein; CHECK-NEXT: ret i1 false 33f9f4aba5SNoah Goldstein; 34f9f4aba5SNoah Goldstein %x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1> 35f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x) 36f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 37f9f4aba5SNoah Goldstein ret i1 %r 38f9f4aba5SNoah Goldstein} 39f9f4aba5SNoah Goldstein 40f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umin_non_zero_fail(<4 x i8> %xx) { 41f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_non_zero_fail( 42f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 1, i8 1, i8 1> 43f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]]) 44f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 45f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 46f9f4aba5SNoah Goldstein; 47f9f4aba5SNoah Goldstein %x = add nuw <4 x i8> %xx, <i8 0, i8 1, i8 1, i8 1> 48f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x) 49f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 50f9f4aba5SNoah Goldstein ret i1 %r 51f9f4aba5SNoah Goldstein} 52f9f4aba5SNoah Goldstein 53f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smax_non_zero0(<4 x i8> %xx) { 54f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_non_zero0( 5577d66845SNoah Goldstein; CHECK-NEXT: ret i1 false 56f9f4aba5SNoah Goldstein; 57f9f4aba5SNoah Goldstein %x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1> 58f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x) 59f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 60f9f4aba5SNoah Goldstein ret i1 %r 61f9f4aba5SNoah Goldstein} 62f9f4aba5SNoah Goldstein 63f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smax_non_zero1(<4 x i8> %xx) { 64f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_non_zero1( 65f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X0:%.*]] = and <4 x i8> [[XX:%.*]], <i8 127, i8 -1, i8 -1, i8 -1> 66f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[X0]], <i8 1, i8 0, i8 0, i8 0> 67f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> [[X]]) 68f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 69f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 70f9f4aba5SNoah Goldstein; 71f9f4aba5SNoah Goldstein %x0 = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255> 72f9f4aba5SNoah Goldstein %x = or <4 x i8> %x0, <i8 1, i8 0, i8 0, i8 0> 73f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x) 74f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 75f9f4aba5SNoah Goldstein ret i1 %r 76f9f4aba5SNoah Goldstein} 77f9f4aba5SNoah Goldstein 78f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smax_non_zero_fail(<4 x i8> %xx) { 79f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_non_zero_fail( 80f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X0:%.*]] = and <4 x i8> [[XX:%.*]], <i8 127, i8 -1, i8 -1, i8 -1> 81f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[X0]], <i8 1, i8 0, i8 0, i8 0> 82f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> [[X]]) 83f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 84f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 85f9f4aba5SNoah Goldstein; 86f9f4aba5SNoah Goldstein %x0 = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255> 87f9f4aba5SNoah Goldstein %x = add nuw <4 x i8> %x0, <i8 1, i8 0, i8 0, i8 0> 88f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x) 89f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 90f9f4aba5SNoah Goldstein ret i1 %r 91f9f4aba5SNoah Goldstein} 92f9f4aba5SNoah Goldstein 93f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smin_non_zero0(<4 x i8> %xx) { 94f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_non_zero0( 9577d66845SNoah Goldstein; CHECK-NEXT: ret i1 false 96f9f4aba5SNoah Goldstein; 97f9f4aba5SNoah Goldstein %x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1> 98f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x) 99f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 100f9f4aba5SNoah Goldstein ret i1 %r 101f9f4aba5SNoah Goldstein} 102f9f4aba5SNoah Goldstein 103f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smin_non_zero1(<4 x i8> %xx) { 104f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_non_zero1( 105f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 0, i8 -128> 106f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> [[X]]) 107f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 108f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 109f9f4aba5SNoah Goldstein; 110f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 0, i8 0, i8 0, i8 128> 111f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x) 112f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 113f9f4aba5SNoah Goldstein ret i1 %r 114f9f4aba5SNoah Goldstein} 115f9f4aba5SNoah Goldstein 116f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smin_non_zero_fail(<4 x i8> %xx) { 117f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_non_zero_fail( 118f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X0:%.*]] = or <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 0, i8 -128> 119f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = add <4 x i8> [[X0]], <i8 0, i8 0, i8 0, i8 1> 120f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> [[X]]) 121f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0 122f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 123f9f4aba5SNoah Goldstein; 124f9f4aba5SNoah Goldstein %x0 = or <4 x i8> %xx, <i8 0, i8 0, i8 0, i8 128> 125f9f4aba5SNoah Goldstein %x = add <4 x i8> %x0, <i8 0, i8 0, i8 0, i8 1> 126f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x) 127f9f4aba5SNoah Goldstein %r = icmp eq i8 %v, 0 128f9f4aba5SNoah Goldstein ret i1 %r 129f9f4aba5SNoah Goldstein} 130f9f4aba5SNoah Goldstein 131f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known0(<4 x i8> %xx) { 132f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known0( 13341c52217SNoah Goldstein; CHECK-NEXT: ret i8 1 134f9f4aba5SNoah Goldstein; 135f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1> 136f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x) 137f9f4aba5SNoah Goldstein %r = and i8 %v, 1 138f9f4aba5SNoah Goldstein ret i8 %r 139f9f4aba5SNoah Goldstein} 140f9f4aba5SNoah Goldstein 141f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known1(<4 x i8> %xx) { 142f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known1( 143f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 -128> 144f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]]) 145f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], -128 146f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 147f9f4aba5SNoah Goldstein; 148f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 128> 149f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x) 150f9f4aba5SNoah Goldstein %r = and i8 %v, 128 151f9f4aba5SNoah Goldstein ret i8 %r 152f9f4aba5SNoah Goldstein} 153f9f4aba5SNoah Goldstein 154f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known_fail0(<4 x i8> %xx) { 155f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known_fail0( 156f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 -128> 157f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]]) 158f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], 1 159f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 160f9f4aba5SNoah Goldstein; 161f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 128> 162f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x) 163f9f4aba5SNoah Goldstein %r = and i8 %v, 1 164f9f4aba5SNoah Goldstein ret i8 %r 165f9f4aba5SNoah Goldstein} 166f9f4aba5SNoah Goldstein 167f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known_fail1(<4 x i8> %xx) { 168f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known_fail1( 169f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 2, i8 4, i8 8> 170f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]]) 171f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], 1 172f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 173f9f4aba5SNoah Goldstein; 174f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 1, i8 2, i8 4, i8 8> 175f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x) 176f9f4aba5SNoah Goldstein %r = and i8 %v, 1 177f9f4aba5SNoah Goldstein ret i8 %r 178f9f4aba5SNoah Goldstein} 179f9f4aba5SNoah Goldstein 180f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known0(<4 x i8> %xx) { 181f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known0( 18241c52217SNoah Goldstein; CHECK-NEXT: ret i8 1 183f9f4aba5SNoah Goldstein; 184f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1> 185f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x) 186f9f4aba5SNoah Goldstein %r = and i8 %v, 1 187f9f4aba5SNoah Goldstein ret i8 %r 188f9f4aba5SNoah Goldstein} 189f9f4aba5SNoah Goldstein 190f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known1(<4 x i8> %xx) { 191f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known1( 192f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = and <4 x i8> [[XX:%.*]], <i8 127, i8 -1, i8 -1, i8 -1> 193f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]]) 194f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], -128 195f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 196f9f4aba5SNoah Goldstein; 197f9f4aba5SNoah Goldstein %x = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255> 198f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x) 199f9f4aba5SNoah Goldstein %r = and i8 %v, 128 200f9f4aba5SNoah Goldstein ret i8 %r 201f9f4aba5SNoah Goldstein} 202f9f4aba5SNoah Goldstein 203f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known_fail0(<4 x i8> %xx) { 204f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known_fail0( 205f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 0, i8 0, i8 0> 206f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]]) 207f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], 1 208f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 209f9f4aba5SNoah Goldstein; 210f9f4aba5SNoah Goldstein %x0 = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255> 211f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 1, i8 0, i8 0, i8 0> 212f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x) 213f9f4aba5SNoah Goldstein %r = and i8 %v, 1 214f9f4aba5SNoah Goldstein ret i8 %r 215f9f4aba5SNoah Goldstein} 216f9f4aba5SNoah Goldstein 217f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known_fail1(<4 x i8> %xx) { 218f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known_fail1( 219f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 2, i8 4, i8 8> 220f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]]) 221f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], 1 222f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 223f9f4aba5SNoah Goldstein; 224f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 1, i8 2, i8 4, i8 8> 225f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x) 226f9f4aba5SNoah Goldstein %r = and i8 %v, 1 227f9f4aba5SNoah Goldstein ret i8 %r 228f9f4aba5SNoah Goldstein} 229f9f4aba5SNoah Goldstein 230f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smax_known(<4 x i8> %xx) { 231f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_known( 23241c52217SNoah Goldstein; CHECK-NEXT: ret i8 4 233f9f4aba5SNoah Goldstein; 234f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 4, i8 4, i8 4, i8 5> 235f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x) 236f9f4aba5SNoah Goldstein %r = and i8 %v, 4 237f9f4aba5SNoah Goldstein ret i8 %r 238f9f4aba5SNoah Goldstein} 239f9f4aba5SNoah Goldstein 240f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smax_known_fail(<4 x i8> %xx) { 241f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_known_fail( 242f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 4, i8 4, i8 8, i8 5> 243f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]]) 244f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], 4 245f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 246f9f4aba5SNoah Goldstein; 247f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 4, i8 4, i8 8, i8 5> 248f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x) 249f9f4aba5SNoah Goldstein %r = and i8 %v, 4 250f9f4aba5SNoah Goldstein ret i8 %r 251f9f4aba5SNoah Goldstein} 252f9f4aba5SNoah Goldstein 253f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smin_known(<4 x i8> %xx) { 254f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_known( 25541c52217SNoah Goldstein; CHECK-NEXT: ret i8 8 256f9f4aba5SNoah Goldstein; 257f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 8, i8 24, i8 56, i8 9> 258f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x) 259f9f4aba5SNoah Goldstein %r = and i8 %v, 8 260f9f4aba5SNoah Goldstein ret i8 %r 261f9f4aba5SNoah Goldstein} 262f9f4aba5SNoah Goldstein 263f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smin_known_fail(<4 x i8> %xx) { 264f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_known_fail( 265f9f4aba5SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 8, i8 23, i8 56, i8 9> 266f9f4aba5SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> [[X]]) 267f9f4aba5SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = and i8 [[V]], 8 268f9f4aba5SNoah Goldstein; CHECK-NEXT: ret i8 [[R]] 269f9f4aba5SNoah Goldstein; 270f9f4aba5SNoah Goldstein %x = or <4 x i8> %xx, <i8 8, i8 23, i8 56, i8 9> 271f9f4aba5SNoah Goldstein %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x) 272f9f4aba5SNoah Goldstein %r = and i8 %v, 8 273f9f4aba5SNoah Goldstein ret i8 %r 274f9f4aba5SNoah Goldstein} 275