1*36d757f8SAdam Yang; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv-unknown-unknown %s -o - | FileCheck %s 2*36d757f8SAdam Yang; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-unknown %s -o - -filetype=obj | spirv-val %} 3*36d757f8SAdam Yang 4*36d757f8SAdam Yang; CHECK-DAG: %[[#op_ext:]] = OpExtInstImport "GLSL.std.450" 5*36d757f8SAdam Yang 6*36d757f8SAdam Yang; CHECK-DAG: %[[#float_64:]] = OpTypeFloat 64 7*36d757f8SAdam Yang; CHECK-DAG: %[[#float_32:]] = OpTypeFloat 32 8*36d757f8SAdam Yang; CHECK-DAG: %[[#float_16:]] = OpTypeFloat 16 9*36d757f8SAdam Yang 10*36d757f8SAdam Yang; CHECK-DAG: %[[#int_64:]] = OpTypeInt 64 11*36d757f8SAdam Yang; CHECK-DAG: %[[#int_32:]] = OpTypeInt 32 12*36d757f8SAdam Yang; CHECK-DAG: %[[#int_16:]] = OpTypeInt 16 13*36d757f8SAdam Yang 14*36d757f8SAdam Yang; CHECK-DAG: %[[#vec4_float_64:]] = OpTypeVector %[[#float_64]] 4 15*36d757f8SAdam Yang; CHECK-DAG: %[[#vec4_float_32:]] = OpTypeVector %[[#float_32]] 4 16*36d757f8SAdam Yang; CHECK-DAG: %[[#vec4_float_16:]] = OpTypeVector %[[#float_16]] 4 17*36d757f8SAdam Yang 18*36d757f8SAdam Yang; CHECK-DAG: %[[#vec4_int_64:]] = OpTypeVector %[[#int_64]] 4 19*36d757f8SAdam Yang; CHECK-DAG: %[[#vec4_int_32:]] = OpTypeVector %[[#int_32]] 4 20*36d757f8SAdam Yang; CHECK-DAG: %[[#vec4_int_16:]] = OpTypeVector %[[#int_16]] 4 21*36d757f8SAdam Yang 22*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_sclamp_i16 23*36d757f8SAdam Yangdefine noundef i16 @test_sclamp_i16(i16 noundef %a, i16 noundef %b, i16 noundef %c) { 24*36d757f8SAdam Yangentry: 25*36d757f8SAdam Yang ; CHECK: %[[#i16_arg0:]] = OpFunctionParameter %[[#int_16]] 26*36d757f8SAdam Yang ; CHECK: %[[#i16_arg1:]] = OpFunctionParameter %[[#int_16]] 27*36d757f8SAdam Yang ; CHECK: %[[#i16_arg2:]] = OpFunctionParameter %[[#int_16]] 28*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#int_16]] %[[#op_ext]] SClamp %[[#i16_arg0]] %[[#i16_arg1]] %[[#i16_arg2]] 29*36d757f8SAdam Yang %0 = call i16 @llvm.spv.sclamp.i16(i16 %a, i16 %b, i16 %c) 30*36d757f8SAdam Yang ret i16 %0 31*36d757f8SAdam Yang} 32*36d757f8SAdam Yang 33*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_sclamp_i32 34*36d757f8SAdam Yangdefine noundef i32 @test_sclamp_i32(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 35*36d757f8SAdam Yangentry: 36*36d757f8SAdam Yang ; CHECK: %[[#i32_arg0:]] = OpFunctionParameter %[[#int_32]] 37*36d757f8SAdam Yang ; CHECK: %[[#i32_arg1:]] = OpFunctionParameter %[[#int_32]] 38*36d757f8SAdam Yang ; CHECK: %[[#i32_arg2:]] = OpFunctionParameter %[[#int_32]] 39*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#int_32]] %[[#op_ext]] SClamp %[[#i32_arg0]] %[[#i32_arg1]] %[[#i32_arg2]] 40*36d757f8SAdam Yang %0 = call i32 @llvm.spv.sclamp.i32(i32 %a, i32 %b, i32 %c) 41*36d757f8SAdam Yang ret i32 %0 42*36d757f8SAdam Yang} 43*36d757f8SAdam Yang 44*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_sclamp_i64 45*36d757f8SAdam Yangdefine noundef i64 @test_sclamp_i64(i64 noundef %a, i64 noundef %b, i64 noundef %c) { 46*36d757f8SAdam Yangentry: 47*36d757f8SAdam Yang ; CHECK: %[[#i64_arg0:]] = OpFunctionParameter %[[#int_64]] 48*36d757f8SAdam Yang ; CHECK: %[[#i64_arg1:]] = OpFunctionParameter %[[#int_64]] 49*36d757f8SAdam Yang ; CHECK: %[[#i64_arg2:]] = OpFunctionParameter %[[#int_64]] 50*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#int_64]] %[[#op_ext]] SClamp %[[#i64_arg0]] %[[#i64_arg1]] %[[#i64_arg2]] 51*36d757f8SAdam Yang %0 = call i64 @llvm.spv.sclamp.i64(i64 %a, i64 %b, i64 %c) 52*36d757f8SAdam Yang ret i64 %0 53*36d757f8SAdam Yang} 54*36d757f8SAdam Yang 55*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_nclamp_half 56*36d757f8SAdam Yangdefine noundef half @test_nclamp_half(half noundef %a, half noundef %b, half noundef %c) { 57*36d757f8SAdam Yangentry: 58*36d757f8SAdam Yang ; CHECK: %[[#f16_arg0:]] = OpFunctionParameter %[[#float_16]] 59*36d757f8SAdam Yang ; CHECK: %[[#f16_arg1:]] = OpFunctionParameter %[[#float_16]] 60*36d757f8SAdam Yang ; CHECK: %[[#f16_arg2:]] = OpFunctionParameter %[[#float_16]] 61*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#float_16]] %[[#op_ext]] NClamp %[[#f16_arg0]] %[[#f16_arg1]] %[[#f16_arg2]] 62*36d757f8SAdam Yang %0 = call half @llvm.spv.nclamp.f16(half %a, half %b, half %c) 63*36d757f8SAdam Yang ret half %0 64*36d757f8SAdam Yang} 65*36d757f8SAdam Yang 66*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_nclamp_float 67*36d757f8SAdam Yangdefine noundef float @test_nclamp_float(float noundef %a, float noundef %b, float noundef %c) { 68*36d757f8SAdam Yangentry: 69*36d757f8SAdam Yang ; CHECK: %[[#f32_arg0:]] = OpFunctionParameter %[[#float_32]] 70*36d757f8SAdam Yang ; CHECK: %[[#f32_arg1:]] = OpFunctionParameter %[[#float_32]] 71*36d757f8SAdam Yang ; CHECK: %[[#f32_arg2:]] = OpFunctionParameter %[[#float_32]] 72*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#float_32]] %[[#op_ext]] NClamp %[[#f32_arg0]] %[[#f32_arg1]] %[[#f32_arg2]] 73*36d757f8SAdam Yang %0 = call float @llvm.spv.nclamp.f32(float %a, float %b, float %c) 74*36d757f8SAdam Yang ret float %0 75*36d757f8SAdam Yang} 76*36d757f8SAdam Yang 77*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_nclamp_double 78*36d757f8SAdam Yangdefine noundef double @test_nclamp_double(double noundef %a, double noundef %b, double noundef %c) { 79*36d757f8SAdam Yangentry: 80*36d757f8SAdam Yang ; CHECK: %[[#f64_arg0:]] = OpFunctionParameter %[[#float_64]] 81*36d757f8SAdam Yang ; CHECK: %[[#f64_arg1:]] = OpFunctionParameter %[[#float_64]] 82*36d757f8SAdam Yang ; CHECK: %[[#f64_arg2:]] = OpFunctionParameter %[[#float_64]] 83*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#float_64]] %[[#op_ext]] NClamp %[[#f64_arg0]] %[[#f64_arg1]] %[[#f64_arg2]] 84*36d757f8SAdam Yang %0 = call double @llvm.spv.nclamp.f64(double %a, double %b, double %c) 85*36d757f8SAdam Yang ret double %0 86*36d757f8SAdam Yang} 87*36d757f8SAdam Yang 88*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_uclamp_i16 89*36d757f8SAdam Yangdefine noundef i16 @test_uclamp_i16(i16 noundef %a, i16 noundef %b, i16 noundef %c) { 90*36d757f8SAdam Yangentry: 91*36d757f8SAdam Yang ; CHECK: %[[#i16_arg0:]] = OpFunctionParameter %[[#int_16]] 92*36d757f8SAdam Yang ; CHECK: %[[#i16_arg1:]] = OpFunctionParameter %[[#int_16]] 93*36d757f8SAdam Yang ; CHECK: %[[#i16_arg2:]] = OpFunctionParameter %[[#int_16]] 94*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#int_16]] %[[#op_ext]] UClamp %[[#i16_arg0]] %[[#i16_arg1]] %[[#i16_arg2]] 95*36d757f8SAdam Yang %0 = call i16 @llvm.spv.uclamp.i16(i16 %a, i16 %b, i16 %c) 96*36d757f8SAdam Yang ret i16 %0 97*36d757f8SAdam Yang} 98*36d757f8SAdam Yang 99*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_uclamp_i32 100*36d757f8SAdam Yangdefine noundef i32 @test_uclamp_i32(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 101*36d757f8SAdam Yangentry: 102*36d757f8SAdam Yang ; CHECK: %[[#i32_arg0:]] = OpFunctionParameter %[[#int_32]] 103*36d757f8SAdam Yang ; CHECK: %[[#i32_arg1:]] = OpFunctionParameter %[[#int_32]] 104*36d757f8SAdam Yang ; CHECK: %[[#i32_arg2:]] = OpFunctionParameter %[[#int_32]] 105*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#int_32]] %[[#op_ext]] UClamp %[[#i32_arg0]] %[[#i32_arg1]] %[[#i32_arg2]] 106*36d757f8SAdam Yang %0 = call i32 @llvm.spv.uclamp.i32(i32 %a, i32 %b, i32 %c) 107*36d757f8SAdam Yang ret i32 %0 108*36d757f8SAdam Yang} 109*36d757f8SAdam Yang 110*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_uclamp_i64 111*36d757f8SAdam Yangdefine noundef i64 @test_uclamp_i64(i64 noundef %a, i64 noundef %b, i64 noundef %c) { 112*36d757f8SAdam Yangentry: 113*36d757f8SAdam Yang ; CHECK: %[[#i64_arg0:]] = OpFunctionParameter %[[#int_64]] 114*36d757f8SAdam Yang ; CHECK: %[[#i64_arg1:]] = OpFunctionParameter %[[#int_64]] 115*36d757f8SAdam Yang ; CHECK: %[[#i64_arg2:]] = OpFunctionParameter %[[#int_64]] 116*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#int_64]] %[[#op_ext]] UClamp %[[#i64_arg0]] %[[#i64_arg1]] %[[#i64_arg2]] 117*36d757f8SAdam Yang %0 = call i64 @llvm.spv.uclamp.i64(i64 %a, i64 %b, i64 %c) 118*36d757f8SAdam Yang ret i64 %0 119*36d757f8SAdam Yang} 120*36d757f8SAdam Yang 121*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_sclamp_v4i16 122*36d757f8SAdam Yangdefine noundef <4 x i16> @test_sclamp_v4i16(<4 x i16> noundef %a, <4 x i16> noundef %b, <4 x i16> noundef %c) { 123*36d757f8SAdam Yangentry: 124*36d757f8SAdam Yang ; CHECK: %[[#vec4_i16_arg0:]] = OpFunctionParameter %[[#vec4_int_16]] 125*36d757f8SAdam Yang ; CHECK: %[[#vec4_i16_arg1:]] = OpFunctionParameter %[[#vec4_int_16]] 126*36d757f8SAdam Yang ; CHECK: %[[#vec4_i16_arg2:]] = OpFunctionParameter %[[#vec4_int_16]] 127*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_int_16]] %[[#op_ext]] SClamp %[[#vec4_i16_arg0]] %[[#vec4_i16_arg1]] %[[#vec4_i16_arg2]] 128*36d757f8SAdam Yang %0 = call <4 x i16> @llvm.spv.sclamp.v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c) 129*36d757f8SAdam Yang ret <4 x i16> %0 130*36d757f8SAdam Yang} 131*36d757f8SAdam Yang 132*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_sclamp_v4i32 133*36d757f8SAdam Yangdefine noundef <4 x i32> @test_sclamp_v4i32(<4 x i32> noundef %a, <4 x i32> noundef %b, <4 x i32> noundef %c) { 134*36d757f8SAdam Yangentry: 135*36d757f8SAdam Yang ; CHECK: %[[#vec4_i32_arg0:]] = OpFunctionParameter %[[#vec4_int_32]] 136*36d757f8SAdam Yang ; CHECK: %[[#vec4_i32_arg1:]] = OpFunctionParameter %[[#vec4_int_32]] 137*36d757f8SAdam Yang ; CHECK: %[[#vec4_i32_arg2:]] = OpFunctionParameter %[[#vec4_int_32]] 138*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_int_32]] %[[#op_ext]] SClamp %[[#vec4_i32_arg0]] %[[#vec4_i32_arg1]] %[[#vec4_i32_arg2]] 139*36d757f8SAdam Yang %0 = call <4 x i32> @llvm.spv.sclamp.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) 140*36d757f8SAdam Yang ret <4 x i32> %0 141*36d757f8SAdam Yang} 142*36d757f8SAdam Yang 143*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_sclamp_v4i64 144*36d757f8SAdam Yangdefine noundef <4 x i64> @test_sclamp_v4i64(<4 x i64> noundef %a, <4 x i64> noundef %b, <4 x i64> noundef %c) { 145*36d757f8SAdam Yangentry: 146*36d757f8SAdam Yang ; CHECK: %[[#vec4_i64_arg0:]] = OpFunctionParameter %[[#vec4_int_64]] 147*36d757f8SAdam Yang ; CHECK: %[[#vec4_i64_arg1:]] = OpFunctionParameter %[[#vec4_int_64]] 148*36d757f8SAdam Yang ; CHECK: %[[#vec4_i64_arg2:]] = OpFunctionParameter %[[#vec4_int_64]] 149*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_int_64]] %[[#op_ext]] SClamp %[[#vec4_i64_arg0]] %[[#vec4_i64_arg1]] %[[#vec4_i64_arg2]] 150*36d757f8SAdam Yang %0 = call <4 x i64> @llvm.spv.sclamp.v4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c) 151*36d757f8SAdam Yang ret <4 x i64> %0 152*36d757f8SAdam Yang} 153*36d757f8SAdam Yang 154*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_nclamp_v4half 155*36d757f8SAdam Yangdefine noundef <4 x half> @test_nclamp_v4half(<4 x half> noundef %a, <4 x half> noundef %b, <4 x half> noundef %c) { 156*36d757f8SAdam Yangentry: 157*36d757f8SAdam Yang ; CHECK: %[[#vec4_f16_arg0:]] = OpFunctionParameter %[[#vec4_float_16]] 158*36d757f8SAdam Yang ; CHECK: %[[#vec4_f16_arg1:]] = OpFunctionParameter %[[#vec4_float_16]] 159*36d757f8SAdam Yang ; CHECK: %[[#vec4_f16_arg2:]] = OpFunctionParameter %[[#vec4_float_16]] 160*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_float_16]] %[[#op_ext]] NClamp %[[#vec4_f16_arg0]] %[[#vec4_f16_arg1]] %[[#vec4_f16_arg2]] 161*36d757f8SAdam Yang %0 = call <4 x half> @llvm.spv.nclamp.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c) 162*36d757f8SAdam Yang ret <4 x half> %0 163*36d757f8SAdam Yang} 164*36d757f8SAdam Yang 165*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_nclamp_v4float 166*36d757f8SAdam Yangdefine noundef <4 x float> @test_nclamp_v4float(<4 x float> noundef %a, <4 x float> noundef %b, <4 x float> noundef %c) { 167*36d757f8SAdam Yangentry: 168*36d757f8SAdam Yang ; CHECK: %[[#vec4_f32_arg0:]] = OpFunctionParameter %[[#vec4_float_32]] 169*36d757f8SAdam Yang ; CHECK: %[[#vec4_f32_arg1:]] = OpFunctionParameter %[[#vec4_float_32]] 170*36d757f8SAdam Yang ; CHECK: %[[#vec4_f32_arg2:]] = OpFunctionParameter %[[#vec4_float_32]] 171*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_float_32]] %[[#op_ext]] NClamp %[[#vec4_f32_arg0]] %[[#vec4_f32_arg1]] %[[#vec4_f32_arg2]] 172*36d757f8SAdam Yang %0 = call <4 x float> @llvm.spv.nclamp.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) 173*36d757f8SAdam Yang ret <4 x float> %0 174*36d757f8SAdam Yang} 175*36d757f8SAdam Yang 176*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_nclamp_v4double 177*36d757f8SAdam Yangdefine noundef <4 x double> @test_nclamp_v4double(<4 x double> noundef %a, <4 x double> noundef %b, <4 x double> noundef %c) { 178*36d757f8SAdam Yangentry: 179*36d757f8SAdam Yang ; CHECK: %[[#vec4_f64_arg0:]] = OpFunctionParameter %[[#vec4_float_64]] 180*36d757f8SAdam Yang ; CHECK: %[[#vec4_f64_arg1:]] = OpFunctionParameter %[[#vec4_float_64]] 181*36d757f8SAdam Yang ; CHECK: %[[#vec4_f64_arg2:]] = OpFunctionParameter %[[#vec4_float_64]] 182*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_float_64]] %[[#op_ext]] NClamp %[[#vec4_f64_arg0]] %[[#vec4_f64_arg1]] %[[#vec4_f64_arg2]] 183*36d757f8SAdam Yang %0 = call <4 x double> @llvm.spv.nclamp.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) 184*36d757f8SAdam Yang ret <4 x double> %0 185*36d757f8SAdam Yang} 186*36d757f8SAdam Yang 187*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_uclamp_v4i16 188*36d757f8SAdam Yangdefine noundef <4 x i16> @test_uclamp_v4i16(<4 x i16> noundef %a, <4 x i16> noundef %b, <4 x i16> noundef %c) { 189*36d757f8SAdam Yangentry: 190*36d757f8SAdam Yang ; CHECK: %[[#vec4_i16_arg0:]] = OpFunctionParameter %[[#vec4_int_16]] 191*36d757f8SAdam Yang ; CHECK: %[[#vec4_i16_arg1:]] = OpFunctionParameter %[[#vec4_int_16]] 192*36d757f8SAdam Yang ; CHECK: %[[#vec4_i16_arg2:]] = OpFunctionParameter %[[#vec4_int_16]] 193*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_int_16]] %[[#op_ext]] UClamp %[[#vec4_i16_arg0]] %[[#vec4_i16_arg1]] %[[#vec4_i16_arg2]] 194*36d757f8SAdam Yang %0 = call <4 x i16> @llvm.spv.uclamp.v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c) 195*36d757f8SAdam Yang ret <4 x i16> %0 196*36d757f8SAdam Yang} 197*36d757f8SAdam Yang 198*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_uclamp_v4i32 199*36d757f8SAdam Yangdefine noundef <4 x i32> @test_uclamp_v4i32(<4 x i32> noundef %a, <4 x i32> noundef %b, <4 x i32> noundef %c) { 200*36d757f8SAdam Yangentry: 201*36d757f8SAdam Yang ; CHECK: %[[#vec4_i32_arg0:]] = OpFunctionParameter %[[#vec4_int_32]] 202*36d757f8SAdam Yang ; CHECK: %[[#vec4_i32_arg1:]] = OpFunctionParameter %[[#vec4_int_32]] 203*36d757f8SAdam Yang ; CHECK: %[[#vec4_i32_arg2:]] = OpFunctionParameter %[[#vec4_int_32]] 204*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_int_32]] %[[#op_ext]] UClamp %[[#vec4_i32_arg0]] %[[#vec4_i32_arg1]] %[[#vec4_i32_arg2]] 205*36d757f8SAdam Yang %0 = call <4 x i32> @llvm.spv.uclamp.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) 206*36d757f8SAdam Yang ret <4 x i32> %0 207*36d757f8SAdam Yang} 208*36d757f8SAdam Yang 209*36d757f8SAdam Yang; CHECK-LABEL: Begin function test_uclamp_v4i64 210*36d757f8SAdam Yangdefine noundef <4 x i64> @test_uclamp_v4i64(<4 x i64> noundef %a, <4 x i64> noundef %b, <4 x i64> noundef %c) { 211*36d757f8SAdam Yangentry: 212*36d757f8SAdam Yang ; CHECK: %[[#vec4_i64_arg0:]] = OpFunctionParameter %[[#vec4_int_64]] 213*36d757f8SAdam Yang ; CHECK: %[[#vec4_i64_arg1:]] = OpFunctionParameter %[[#vec4_int_64]] 214*36d757f8SAdam Yang ; CHECK: %[[#vec4_i64_arg2:]] = OpFunctionParameter %[[#vec4_int_64]] 215*36d757f8SAdam Yang ; CHECK: %[[#]] = OpExtInst %[[#vec4_int_64]] %[[#op_ext]] UClamp %[[#vec4_i64_arg0]] %[[#vec4_i64_arg1]] %[[#vec4_i64_arg2]] 216*36d757f8SAdam Yang %0 = call <4 x i64> @llvm.spv.uclamp.v4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c) 217*36d757f8SAdam Yang ret <4 x i64> %0 218*36d757f8SAdam Yang} 219*36d757f8SAdam Yang 220*36d757f8SAdam Yangdeclare half @llvm.spv.nclamp.f16(half, half, half) 221*36d757f8SAdam Yangdeclare float @llvm.spv.nclamp.f32(float, float, float) 222*36d757f8SAdam Yangdeclare double @llvm.spv.nclamp.f64(double, double, double) 223*36d757f8SAdam Yangdeclare i16 @llvm.spv.sclamp.i16(i16, i16, i16) 224*36d757f8SAdam Yangdeclare i32 @llvm.spv.sclamp.i32(i32, i32, i32) 225*36d757f8SAdam Yangdeclare i64 @llvm.spv.sclamp.i64(i64, i64, i64) 226*36d757f8SAdam Yangdeclare i16 @llvm.spv.uclamp.i16(i16, i16, i16) 227*36d757f8SAdam Yangdeclare i32 @llvm.spv.uclamp.i32(i32, i32, i32) 228*36d757f8SAdam Yangdeclare i64 @llvm.spv.uclamp.i64(i64, i64, i64) 229*36d757f8SAdam Yangdeclare <4 x half> @llvm.spv.nclamp.v4f16(<4 x half>, <4 x half>, <4 x half>) 230*36d757f8SAdam Yangdeclare <4 x float> @llvm.spv.nclamp.v4f32(<4 x float>, <4 x float>, <4 x float>) 231*36d757f8SAdam Yangdeclare <4 x double> @llvm.spv.nclamp.v4f64(<4 x double>, <4 x double>, <4 x double>) 232*36d757f8SAdam Yangdeclare <4 x i16> @llvm.spv.sclamp.v4i16(<4 x i16>, <4 x i16>, <4 x i16>) 233*36d757f8SAdam Yangdeclare <4 x i32> @llvm.spv.sclamp.v4i32(<4 x i32>, <4 x i32>, <4 x i32>) 234*36d757f8SAdam Yangdeclare <4 x i64> @llvm.spv.sclamp.v4i64(<4 x i64>, <4 x i64>, <4 x i64>) 235*36d757f8SAdam Yangdeclare <4 x i16> @llvm.spv.uclamp.v4i16(<4 x i16>, <4 x i16>, <4 x i16>) 236*36d757f8SAdam Yangdeclare <4 x i32> @llvm.spv.uclamp.v4i32(<4 x i32>, <4 x i32>, <4 x i32>) 237*36d757f8SAdam Yangdeclare <4 x i64> @llvm.spv.uclamp.v4i64(<4 x i64>, <4 x i64>, <4 x i64>) 238*36d757f8SAdam Yang 239*36d757f8SAdam Yang 240