127 lines · plain
1 ; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv-unknown-unknown %s -o - | FileCheck %s2 3; CHECK-DAG: %[[#float_64:]] = OpTypeFloat 644; CHECK-DAG: %[[#float_32:]] = OpTypeFloat 325; CHECK-DAG: %[[#float_16:]] = OpTypeFloat 166; CHECK-DAG: %[[#vec2_float_16:]] = OpTypeVector %[[#float_16]] 27; CHECK-DAG: %[[#vec2_float_32:]] = OpTypeVector %[[#float_32]] 28; CHECK-DAG: %[[#vec2_float_64:]] = OpTypeVector %[[#float_64]] 29; CHECK-DAG: %[[#vec3_float_16:]] = OpTypeVector %[[#float_16]] 310; CHECK-DAG: %[[#vec3_float_32:]] = OpTypeVector %[[#float_32]] 311; CHECK-DAG: %[[#vec3_float_64:]] = OpTypeVector %[[#float_64]] 312; CHECK-DAG: %[[#vec4_float_16:]] = OpTypeVector %[[#float_16]] 413; CHECK-DAG: %[[#vec4_float_32:]] = OpTypeVector %[[#float_32]] 414; CHECK-DAG: %[[#vec4_float_64:]] = OpTypeVector %[[#float_64]] 415; CHECK-DAG: %[[#const_f64_1:]] = OpConstant %[[#float_64]] 116; CHECK-DAG: %[[#const_f32_1:]] = OpConstant %[[#float_32]] 117; CHECK-DAG: %[[#const_f16_1:]] = OpConstant %[[#float_16]] 118 19; CHECK-DAG: %[[#vec2_const_ones_f16:]] = OpConstantComposite %[[#vec2_float_16]] %[[#const_f16_1]] %[[#const_f16_1]]20; CHECK-DAG: %[[#vec3_const_ones_f16:]] = OpConstantComposite %[[#vec3_float_16]] %[[#const_f16_1]] %[[#const_f16_1]] %[[#const_f16_1]]21; CHECK-DAG: %[[#vec4_const_ones_f16:]] = OpConstantComposite %[[#vec4_float_16]] %[[#const_f16_1]] %[[#const_f16_1]] %[[#const_f16_1]] %[[#const_f16_1]]22 23; CHECK-DAG: %[[#vec2_const_ones_f32:]] = OpConstantComposite %[[#vec2_float_32]] %[[#const_f32_1]] %[[#const_f32_1]]24; CHECK-DAG: %[[#vec3_const_ones_f32:]] = OpConstantComposite %[[#vec3_float_32]] %[[#const_f32_1]] %[[#const_f32_1]] %[[#const_f32_1]]25; CHECK-DAG: %[[#vec4_const_ones_f32:]] = OpConstantComposite %[[#vec4_float_32]] %[[#const_f32_1]] %[[#const_f32_1]] %[[#const_f32_1]] %[[#const_f32_1]]26 27; CHECK-DAG: %[[#vec2_const_ones_f64:]] = OpConstantComposite %[[#vec2_float_64]] %[[#const_f64_1]] %[[#const_f64_1]]28; CHECK-DAG: %[[#vec3_const_ones_f64:]] = OpConstantComposite %[[#vec3_float_64]] %[[#const_f64_1]] %[[#const_f64_1]] %[[#const_f64_1]]29; CHECK-DAG: %[[#vec4_const_ones_f64:]] = OpConstantComposite %[[#vec4_float_64]] %[[#const_f64_1]] %[[#const_f64_1]] %[[#const_f64_1]] %[[#const_f64_1]]30 31 32define spir_func noundef half @test_rcp_half(half noundef %p0) #0 {33entry:34 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#float_16]]35 ; CHECK: OpFDiv %[[#float_16]] %[[#const_f16_1]] %[[#arg0]]36 %hlsl.rcp = fdiv half 0xH3C00, %p037 ret half %hlsl.rcp38}39 40define spir_func noundef <2 x half> @test_rcp_half2(<2 x half> noundef %p0) #0 {41entry:42 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec2_float_16]]43 ; CHECK: OpFDiv %[[#vec2_float_16]] %[[#vec2_const_ones_f16]] %[[#arg0]]44 %hlsl.rcp = fdiv <2 x half> <half 0xH3C00, half 0xH3C00>, %p045 ret <2 x half> %hlsl.rcp46}47 48define spir_func noundef <3 x half> @test_rcp_half3(<3 x half> noundef %p0) #0 {49entry:50 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec3_float_16]]51 ; CHECK: OpFDiv %[[#vec3_float_16]] %[[#vec3_const_ones_f16]] %[[#arg0]]52 %hlsl.rcp = fdiv <3 x half> <half 0xH3C00, half 0xH3C00, half 0xH3C00>, %p053 ret <3 x half> %hlsl.rcp54}55 56define spir_func noundef <4 x half> @test_rcp_half4(<4 x half> noundef %p0) #0 {57entry:58 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec4_float_16]]59 ; CHECK: OpFDiv %[[#vec4_float_16]] %[[#vec4_const_ones_f16]] %[[#arg0]]60 %hlsl.rcp = fdiv <4 x half> <half 0xH3C00, half 0xH3C00, half 0xH3C00, half 0xH3C00>, %p061 ret <4 x half> %hlsl.rcp62}63 64define spir_func noundef float @test_rcp_float(float noundef %p0) #0 {65entry:66 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#float_32]]67 ; CHECK: OpFDiv %[[#float_32]] %[[#const_f32_1]] %[[#arg0]]68 %hlsl.rcp = fdiv float 1.000000e+00, %p069 ret float %hlsl.rcp70}71 72define spir_func noundef <2 x float> @test_rcp_float2(<2 x float> noundef %p0) #0 {73entry:74 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec2_float_32]]75 ; CHECK: OpFDiv %[[#vec2_float_32]] %[[#vec2_const_ones_f32]] %[[#arg0]]76 %hlsl.rcp = fdiv <2 x float> <float 1.000000e+00, float 1.000000e+00>, %p077 ret <2 x float> %hlsl.rcp78}79 80define spir_func noundef <3 x float> @test_rcp_float3(<3 x float> noundef %p0) #0 {81entry:82 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec3_float_32]]83 ; CHECK: OpFDiv %[[#vec3_float_32]] %[[#vec3_const_ones_f32]] %[[#arg0]]84 %hlsl.rcp = fdiv <3 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %p085 ret <3 x float> %hlsl.rcp86}87 88define spir_func noundef <4 x float> @test_rcp_float4(<4 x float> noundef %p0) #0 {89entry:90 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec4_float_32]]91 ; CHECK: OpFDiv %[[#vec4_float_32]] %[[#vec4_const_ones_f32]] %[[#arg0]]92 %hlsl.rcp = fdiv <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %p093 ret <4 x float> %hlsl.rcp94}95 96define spir_func noundef double @test_rcp_double(double noundef %p0) #0 {97entry:98 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#float_64]]99 ; CHECK: OpFDiv %[[#float_64]] %[[#const_f64_1]] %[[#arg0]]100 %hlsl.rcp = fdiv double 1.000000e+00, %p0101 ret double %hlsl.rcp102}103 104define spir_func noundef <2 x double> @test_rcp_double2(<2 x double> noundef %p0) #0 {105entry:106 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec2_float_64:]]107 ; CHECK: OpFDiv %[[#vec2_float_64]] %[[#vec2_const_ones_f64]] %[[#arg0]]108 %hlsl.rcp = fdiv <2 x double> <double 1.000000e+00, double 1.000000e+00>, %p0109 ret <2 x double> %hlsl.rcp110}111 112define spir_func noundef <3 x double> @test_rcp_double3(<3 x double> noundef %p0) #0 {113entry:114 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec3_float_64:]]115 ; CHECK: OpFDiv %[[#vec3_float_64]] %[[#vec3_const_ones_f64]] %[[#arg0]]116 %hlsl.rcp = fdiv <3 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %p0117 ret <3 x double> %hlsl.rcp118}119 120define spir_func noundef <4 x double> @test_rcp_double4(<4 x double> noundef %p0) #0 {121entry:122 ; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec4_float_64]]123 ; CHECK: OpFDiv %[[#vec4_float_64]] %[[#vec4_const_ones_f64]] %[[#arg0]]124 %hlsl.rcp = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %p0125 ret <4 x double> %hlsl.rcp126}127