1; RUN: not opt -S -verify < %s 2>&1 | FileCheck %s 2 3; Reject a vector reduction with a non-vector argument. 4 5define float @reduce_vector_not_vec_arg(float %x) { 6; CHECK: Intrinsic has incorrect argument type! 7 %r0 = call float @llvm.vector.reduce.fmax.f32(float %x) 8 ret float %r0 9} 10 11define i32 @reduce_vector_not_vec_arg2(i32 %x) { 12; CHECK: Intrinsic has incorrect argument type! 13 %r0 = call i32 @llvm.vector.reduce.smax.i32(i32 %x) 14 ret i32 %r0 15} 16 17; Type mismatch for start value. 18 19define float @fadd_match_arg_types(<4 x float> %x) { 20; CHECK: Intrinsic has incorrect argument type! 21 %r = call float @llvm.vector.reduce.fadd.v4f32(double 0.0, <4 x float> %x) 22 ret float %r 23} 24 25; Wrong result type. 26 27define i64 @result_too_wide(<4 x i32> %x) { 28; CHECK: Intrinsic has incorrect return type! 29 %r = call i64 @llvm.vector.reduce.add.v4i32(<4 x i32> %x) 30 ret i64 %r 31} 32 33; We should have the appropriate (either int or FP) type of argument 34; for any vector reduction. 35 36define float @not_float_reduce(<4 x float> %x) { 37; CHECK: Intrinsic has incorrect argument type! 38 %r = call float @llvm.vector.reduce.umin.v4f32(<4 x float> %x) 39 ret float %r 40} 41 42define i32* @not_pointer_reduce(<4 x i32*> %x) { 43; CHECK: Intrinsic has incorrect argument type! 44 %r = call i32* @llvm.vector.reduce.or.v4p0i32(<4 x i32*> %x) 45 ret i32* %r 46} 47 48define i32 @not_integer_reduce(<4 x i32> %x) { 49; CHECK: Intrinsic has incorrect argument type! 50 %r = call i32 @llvm.vector.reduce.fadd.v4i32(i32 0, <4 x i32> %x) 51 ret i32 %r 52} 53 54define i32* @not_pointer_reduce2(<4 x i32*> %x) { 55; CHECK: Intrinsic has incorrect argument type! 56 %r = call i32* @llvm.vector.reduce.fmin.v4p0i32(<4 x i32*> %x) 57 ret i32* %r 58} 59 60declare float @llvm.vector.reduce.umin.v4f32(<4 x float>) 61declare i32* @llvm.vector.reduce.or.v4p0i32(<4 x i32*>) 62declare i32 @llvm.vector.reduce.fadd.v4i32(i32, <4 x i32>) 63declare float @llvm.vector.reduce.fadd.v4f32(double, <4 x float>) 64declare i32* @llvm.vector.reduce.fmin.v4p0i32(<4 x i32*>) 65declare float @llvm.vector.reduce.fmax.f32(float) 66declare i32 @llvm.vector.reduce.smax.i32(i32) 67declare i64 @llvm.vector.reduce.add.v4i32(<4 x i32>) 68