1214 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-simplifylib,instcombine -amdgpu-prelink %s | FileCheck %s3 4declare float @_Z4powrff(float, float)5declare <2 x float> @_Z4powrDv2_fS_(<2 x float>, <2 x float>)6declare <3 x float> @_Z4powrDv3_fS_(<3 x float>, <3 x float>)7declare <4 x float> @_Z4powrDv4_fS_(<4 x float>, <4 x float>)8declare <8 x float> @_Z4powrDv8_fS_(<8 x float>, <8 x float>)9declare <16 x float> @_Z4powrDv16_fS_(<16 x float>, <16 x float>)10declare double @_Z4powrdd(double, double)11declare <2 x double> @_Z4powrDv2_dS_(<2 x double>, <2 x double>)12declare <3 x double> @_Z4powrDv3_dS_(<3 x double>, <3 x double>)13declare <4 x double> @_Z4powrDv4_dS_(<4 x double>, <4 x double>)14declare <8 x double> @_Z4powrDv8_dS_(<8 x double>, <8 x double>)15declare <16 x double> @_Z4powrDv16_dS_(<16 x double>, <16 x double>)16declare half @_Z4powrDhDh(half, half)17declare <2 x half> @_Z4powrDv2_DhS_(<2 x half>, <2 x half>)18declare <3 x half> @_Z4powrDv3_DhS_(<3 x half>, <3 x half>)19declare <4 x half> @_Z4powrDv4_DhS_(<4 x half>, <4 x half>)20declare <8 x half> @_Z4powrDv8_DhS_(<8 x half>, <8 x half>)21declare <16 x half> @_Z4powrDv16_DhS_(<16 x half>, <16 x half>)22 23define float @test_powr_fast_f32(float %x, float %y) {24; CHECK-LABEL: define float @test_powr_fast_f3225; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {26; CHECK-NEXT: [[__LOG2:%.*]] = call fast float @llvm.log2.f32(float [[X]])27; CHECK-NEXT: [[__YLOGX:%.*]] = fmul fast float [[Y]], [[__LOG2]]28; CHECK-NEXT: [[__EXP2:%.*]] = call fast float @llvm.exp2.f32(float [[__YLOGX]])29; CHECK-NEXT: ret float [[__EXP2]]30;31 %powr = tail call fast float @_Z4powrff(float %x, float %y)32 ret float %powr33}34 35define <2 x float> @test_powr_fast_v2f32(<2 x float> %x, <2 x float> %y) {36; CHECK-LABEL: define <2 x float> @test_powr_fast_v2f3237; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x float> [[Y:%.*]]) {38; CHECK-NEXT: [[__LOG2:%.*]] = call fast <2 x float> @llvm.log2.v2f32(<2 x float> [[X]])39; CHECK-NEXT: [[__YLOGX:%.*]] = fmul fast <2 x float> [[Y]], [[__LOG2]]40; CHECK-NEXT: [[__EXP2:%.*]] = call fast <2 x float> @llvm.exp2.v2f32(<2 x float> [[__YLOGX]])41; CHECK-NEXT: ret <2 x float> [[__EXP2]]42;43 %powr = tail call fast <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y)44 ret <2 x float> %powr45}46 47define float @test_powr_afn_f32(float %x, float %y) {48; CHECK-LABEL: define float @test_powr_afn_f3249; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {50; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float [[Y]])51; CHECK-NEXT: ret float [[POWR]]52;53 %powr = tail call afn float @_Z4powrff(float %x, float %y)54 ret float %powr55}56 57define float @test_powr_afn_f32_nnan(float %x, float %y) {58; CHECK-LABEL: define float @test_powr_afn_f32_nnan59; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {60; CHECK-NEXT: [[POWR:%.*]] = tail call nnan afn float @_Z4powrff(float [[X]], float [[Y]])61; CHECK-NEXT: ret float [[POWR]]62;63 %powr = tail call afn nnan float @_Z4powrff(float %x, float %y)64 ret float %powr65}66 67define <2 x float> @test_powr_afn_v2f32(<2 x float> %x, <2 x float> %y) {68; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f3269; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x float> [[Y:%.*]]) {70; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> [[Y]])71; CHECK-NEXT: ret <2 x float> [[POWR]]72;73 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y)74 ret <2 x float> %powr75}76 77define <3 x float> @test_powr_afn_v3f32(<3 x float> %x, <3 x float> %y) {78; CHECK-LABEL: define <3 x float> @test_powr_afn_v3f3279; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {80; CHECK-NEXT: [[POWR:%.*]] = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> [[X]], <3 x float> [[Y]])81; CHECK-NEXT: ret <3 x float> [[POWR]]82;83 %powr = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> %y)84 ret <3 x float> %powr85}86 87define <4 x float> @test_powr_afn_v4f32(<4 x float> %x, <4 x float> %y) {88; CHECK-LABEL: define <4 x float> @test_powr_afn_v4f3289; CHECK-SAME: (<4 x float> [[X:%.*]], <4 x float> [[Y:%.*]]) {90; CHECK-NEXT: [[POWR:%.*]] = tail call afn <4 x float> @_Z4powrDv4_fS_(<4 x float> [[X]], <4 x float> [[Y]])91; CHECK-NEXT: ret <4 x float> [[POWR]]92;93 %powr = tail call afn <4 x float> @_Z4powrDv4_fS_(<4 x float> %x, <4 x float> %y)94 ret <4 x float> %powr95}96 97define <8 x float> @test_powr_afn_v8f32(<8 x float> %x, <8 x float> %y) {98; CHECK-LABEL: define <8 x float> @test_powr_afn_v8f3299; CHECK-SAME: (<8 x float> [[X:%.*]], <8 x float> [[Y:%.*]]) {100; CHECK-NEXT: [[POWR:%.*]] = tail call afn <8 x float> @_Z4powrDv8_fS_(<8 x float> [[X]], <8 x float> [[Y]])101; CHECK-NEXT: ret <8 x float> [[POWR]]102;103 %powr = tail call afn <8 x float> @_Z4powrDv8_fS_(<8 x float> %x, <8 x float> %y)104 ret <8 x float> %powr105}106 107define <16 x float> @test_powr_afn_v16f32(<16 x float> %x, <16 x float> %y) {108; CHECK-LABEL: define <16 x float> @test_powr_afn_v16f32109; CHECK-SAME: (<16 x float> [[X:%.*]], <16 x float> [[Y:%.*]]) {110; CHECK-NEXT: [[POWR:%.*]] = tail call afn <16 x float> @_Z4powrDv16_fS_(<16 x float> [[X]], <16 x float> [[Y]])111; CHECK-NEXT: ret <16 x float> [[POWR]]112;113 %powr = tail call afn <16 x float> @_Z4powrDv16_fS_(<16 x float> %x, <16 x float> %y)114 ret <16 x float> %powr115}116 117define double @test_powr_afn_f64(double %x, double %y) {118; CHECK-LABEL: define double @test_powr_afn_f64119; CHECK-SAME: (double [[X:%.*]], double [[Y:%.*]]) {120; CHECK-NEXT: [[POWR:%.*]] = tail call afn double @_Z4powrdd(double [[X]], double [[Y]])121; CHECK-NEXT: ret double [[POWR]]122;123 %powr = tail call afn double @_Z4powrdd(double %x, double %y)124 ret double %powr125}126 127define <2 x double> @test_powr_afn_v2f64(<2 x double> %x, <2 x double> %y) {128; CHECK-LABEL: define <2 x double> @test_powr_afn_v2f64129; CHECK-SAME: (<2 x double> [[X:%.*]], <2 x double> [[Y:%.*]]) {130; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x double> @_Z4powrDv2_dS_(<2 x double> [[X]], <2 x double> [[Y]])131; CHECK-NEXT: ret <2 x double> [[POWR]]132;133 %powr = tail call afn <2 x double> @_Z4powrDv2_dS_(<2 x double> %x, <2 x double> %y)134 ret <2 x double> %powr135}136 137define <3 x double> @test_powr_afn_v3f64(<3 x double> %x, <3 x double> %y) {138; CHECK-LABEL: define <3 x double> @test_powr_afn_v3f64139; CHECK-SAME: (<3 x double> [[X:%.*]], <3 x double> [[Y:%.*]]) {140; CHECK-NEXT: [[POWR:%.*]] = tail call afn <3 x double> @_Z4powrDv3_dS_(<3 x double> [[X]], <3 x double> [[Y]])141; CHECK-NEXT: ret <3 x double> [[POWR]]142;143 %powr = tail call afn <3 x double> @_Z4powrDv3_dS_(<3 x double> %x, <3 x double> %y)144 ret <3 x double> %powr145}146 147define <4 x double> @test_powr_afn_v4f64(<4 x double> %x, <4 x double> %y) {148; CHECK-LABEL: define <4 x double> @test_powr_afn_v4f64149; CHECK-SAME: (<4 x double> [[X:%.*]], <4 x double> [[Y:%.*]]) {150; CHECK-NEXT: [[POWR:%.*]] = tail call afn <4 x double> @_Z4powrDv4_dS_(<4 x double> [[X]], <4 x double> [[Y]])151; CHECK-NEXT: ret <4 x double> [[POWR]]152;153 %powr = tail call afn <4 x double> @_Z4powrDv4_dS_(<4 x double> %x, <4 x double> %y)154 ret <4 x double> %powr155}156 157define <8 x double> @test_powr_afn_v8f64(<8 x double> %x, <8 x double> %y) {158; CHECK-LABEL: define <8 x double> @test_powr_afn_v8f64159; CHECK-SAME: (<8 x double> [[X:%.*]], <8 x double> [[Y:%.*]]) {160; CHECK-NEXT: [[POWR:%.*]] = tail call afn <8 x double> @_Z4powrDv8_dS_(<8 x double> [[X]], <8 x double> [[Y]])161; CHECK-NEXT: ret <8 x double> [[POWR]]162;163 %powr = tail call afn <8 x double> @_Z4powrDv8_dS_(<8 x double> %x, <8 x double> %y)164 ret <8 x double> %powr165}166 167define <16 x double> @test_powr_afn_v16f64(<16 x double> %x, <16 x double> %y) {168; CHECK-LABEL: define <16 x double> @test_powr_afn_v16f64169; CHECK-SAME: (<16 x double> [[X:%.*]], <16 x double> [[Y:%.*]]) {170; CHECK-NEXT: [[POWR:%.*]] = tail call afn <16 x double> @_Z4powrDv16_dS_(<16 x double> [[X]], <16 x double> [[Y]])171; CHECK-NEXT: ret <16 x double> [[POWR]]172;173 %powr = tail call afn <16 x double> @_Z4powrDv16_dS_(<16 x double> %x, <16 x double> %y)174 ret <16 x double> %powr175}176 177define half @test_powr_afn_f16(half %x, half %y) {178; CHECK-LABEL: define half @test_powr_afn_f16179; CHECK-SAME: (half [[X:%.*]], half [[Y:%.*]]) {180; CHECK-NEXT: [[POWR:%.*]] = tail call afn half @_Z4powrDhDh(half [[X]], half [[Y]])181; CHECK-NEXT: ret half [[POWR]]182;183 %powr = tail call afn half @_Z4powrDhDh(half %x, half %y)184 ret half %powr185}186 187define <2 x half> @test_powr_afn_v2f16(<2 x half> %x, <2 x half> %y) {188; CHECK-LABEL: define <2 x half> @test_powr_afn_v2f16189; CHECK-SAME: (<2 x half> [[X:%.*]], <2 x half> [[Y:%.*]]) {190; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x half> @_Z4powrDv2_DhS_(<2 x half> [[X]], <2 x half> [[Y]])191; CHECK-NEXT: ret <2 x half> [[POWR]]192;193 %powr = tail call afn <2 x half> @_Z4powrDv2_DhS_(<2 x half> %x, <2 x half> %y)194 ret <2 x half> %powr195}196 197define <3 x half> @test_powr_afn_v3f16(<3 x half> %x, <3 x half> %y) {198; CHECK-LABEL: define <3 x half> @test_powr_afn_v3f16199; CHECK-SAME: (<3 x half> [[X:%.*]], <3 x half> [[Y:%.*]]) {200; CHECK-NEXT: [[POWR:%.*]] = tail call afn <3 x half> @_Z4powrDv3_DhS_(<3 x half> [[X]], <3 x half> [[Y]])201; CHECK-NEXT: ret <3 x half> [[POWR]]202;203 %powr = tail call afn <3 x half> @_Z4powrDv3_DhS_(<3 x half> %x, <3 x half> %y)204 ret <3 x half> %powr205}206 207define <4 x half> @test_powr_afn_v4f16(<4 x half> %x, <4 x half> %y) {208; CHECK-LABEL: define <4 x half> @test_powr_afn_v4f16209; CHECK-SAME: (<4 x half> [[X:%.*]], <4 x half> [[Y:%.*]]) {210; CHECK-NEXT: [[POWR:%.*]] = tail call afn <4 x half> @_Z4powrDv4_DhS_(<4 x half> [[X]], <4 x half> [[Y]])211; CHECK-NEXT: ret <4 x half> [[POWR]]212;213 %powr = tail call afn <4 x half> @_Z4powrDv4_DhS_(<4 x half> %x, <4 x half> %y)214 ret <4 x half> %powr215}216 217define <8 x half> @test_powr_afn_v8f16(<8 x half> %x, <8 x half> %y) {218; CHECK-LABEL: define <8 x half> @test_powr_afn_v8f16219; CHECK-SAME: (<8 x half> [[X:%.*]], <8 x half> [[Y:%.*]]) {220; CHECK-NEXT: [[POWR:%.*]] = tail call afn <8 x half> @_Z4powrDv8_DhS_(<8 x half> [[X]], <8 x half> [[Y]])221; CHECK-NEXT: ret <8 x half> [[POWR]]222;223 %powr = tail call afn <8 x half> @_Z4powrDv8_DhS_(<8 x half> %x, <8 x half> %y)224 ret <8 x half> %powr225}226 227define <16 x half> @test_powr_afn_v16f16(<16 x half> %x, <16 x half> %y) {228; CHECK-LABEL: define <16 x half> @test_powr_afn_v16f16229; CHECK-SAME: (<16 x half> [[X:%.*]], <16 x half> [[Y:%.*]]) {230; CHECK-NEXT: [[POWR:%.*]] = tail call afn <16 x half> @_Z4powrDv16_DhS_(<16 x half> [[X]], <16 x half> [[Y]])231; CHECK-NEXT: ret <16 x half> [[POWR]]232;233 %powr = tail call afn <16 x half> @_Z4powrDv16_DhS_(<16 x half> %x, <16 x half> %y)234 ret <16 x half> %powr235}236 237define float @test_powr_f32(float %x, float %y) {238; CHECK-LABEL: define float @test_powr_f32239; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {240; CHECK-NEXT: [[POWR:%.*]] = tail call float @_Z4powrff(float [[X]], float [[Y]])241; CHECK-NEXT: ret float [[POWR]]242;243 %powr = tail call float @_Z4powrff(float %x, float %y)244 ret float %powr245}246 247define float @test_powr_f32_nnan(float %x, float %y) {248; CHECK-LABEL: define float @test_powr_f32_nnan249; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {250; CHECK-NEXT: [[POWR:%.*]] = tail call nnan float @_Z4powrff(float [[X]], float [[Y]])251; CHECK-NEXT: ret float [[POWR]]252;253 %powr = tail call nnan float @_Z4powrff(float %x, float %y)254 ret float %powr255}256 257define <2 x float> @test_powr_v2f32(<2 x float> %x, <2 x float> %y) {258; CHECK-LABEL: define <2 x float> @test_powr_v2f32259; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x float> [[Y:%.*]]) {260; CHECK-NEXT: [[POWR:%.*]] = tail call <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> [[Y]])261; CHECK-NEXT: ret <2 x float> [[POWR]]262;263 %powr = tail call <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y)264 ret <2 x float> %powr265}266 267define <3 x float> @test_powr_v3f32(<3 x float> %x, <3 x float> %y) {268; CHECK-LABEL: define <3 x float> @test_powr_v3f32269; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {270; CHECK-NEXT: [[POWR:%.*]] = tail call <3 x float> @_Z4powrDv3_fS_(<3 x float> [[X]], <3 x float> [[Y]])271; CHECK-NEXT: ret <3 x float> [[POWR]]272;273 %powr = tail call <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> %y)274 ret <3 x float> %powr275}276 277define <4 x float> @test_powr_v4f32(<4 x float> %x, <4 x float> %y) {278; CHECK-LABEL: define <4 x float> @test_powr_v4f32279; CHECK-SAME: (<4 x float> [[X:%.*]], <4 x float> [[Y:%.*]]) {280; CHECK-NEXT: [[POWR:%.*]] = tail call <4 x float> @_Z4powrDv4_fS_(<4 x float> [[X]], <4 x float> [[Y]])281; CHECK-NEXT: ret <4 x float> [[POWR]]282;283 %powr = tail call <4 x float> @_Z4powrDv4_fS_(<4 x float> %x, <4 x float> %y)284 ret <4 x float> %powr285}286 287define <8 x float> @test_powr_v8f32(<8 x float> %x, <8 x float> %y) {288; CHECK-LABEL: define <8 x float> @test_powr_v8f32289; CHECK-SAME: (<8 x float> [[X:%.*]], <8 x float> [[Y:%.*]]) {290; CHECK-NEXT: [[POWR:%.*]] = tail call <8 x float> @_Z4powrDv8_fS_(<8 x float> [[X]], <8 x float> [[Y]])291; CHECK-NEXT: ret <8 x float> [[POWR]]292;293 %powr = tail call <8 x float> @_Z4powrDv8_fS_(<8 x float> %x, <8 x float> %y)294 ret <8 x float> %powr295}296 297define <16 x float> @test_powr_v16f32(<16 x float> %x, <16 x float> %y) {298; CHECK-LABEL: define <16 x float> @test_powr_v16f32299; CHECK-SAME: (<16 x float> [[X:%.*]], <16 x float> [[Y:%.*]]) {300; CHECK-NEXT: [[POWR:%.*]] = tail call <16 x float> @_Z4powrDv16_fS_(<16 x float> [[X]], <16 x float> [[Y]])301; CHECK-NEXT: ret <16 x float> [[POWR]]302;303 %powr = tail call <16 x float> @_Z4powrDv16_fS_(<16 x float> %x, <16 x float> %y)304 ret <16 x float> %powr305}306 307define double @test_powr_f64(double %x, double %y) {308; CHECK-LABEL: define double @test_powr_f64309; CHECK-SAME: (double [[X:%.*]], double [[Y:%.*]]) {310; CHECK-NEXT: [[POWR:%.*]] = tail call double @_Z4powrdd(double [[X]], double [[Y]])311; CHECK-NEXT: ret double [[POWR]]312;313 %powr = tail call double @_Z4powrdd(double %x, double %y)314 ret double %powr315}316 317define <2 x double> @test_powr_v2f64(<2 x double> %x, <2 x double> %y) {318; CHECK-LABEL: define <2 x double> @test_powr_v2f64319; CHECK-SAME: (<2 x double> [[X:%.*]], <2 x double> [[Y:%.*]]) {320; CHECK-NEXT: [[POWR:%.*]] = tail call <2 x double> @_Z4powrDv2_dS_(<2 x double> [[X]], <2 x double> [[Y]])321; CHECK-NEXT: ret <2 x double> [[POWR]]322;323 %powr = tail call <2 x double> @_Z4powrDv2_dS_(<2 x double> %x, <2 x double> %y)324 ret <2 x double> %powr325}326 327define <3 x double> @test_powr_v3f64(<3 x double> %x, <3 x double> %y) {328; CHECK-LABEL: define <3 x double> @test_powr_v3f64329; CHECK-SAME: (<3 x double> [[X:%.*]], <3 x double> [[Y:%.*]]) {330; CHECK-NEXT: [[POWR:%.*]] = tail call <3 x double> @_Z4powrDv3_dS_(<3 x double> [[X]], <3 x double> [[Y]])331; CHECK-NEXT: ret <3 x double> [[POWR]]332;333 %powr = tail call <3 x double> @_Z4powrDv3_dS_(<3 x double> %x, <3 x double> %y)334 ret <3 x double> %powr335}336 337define <4 x double> @test_powr_v4f64(<4 x double> %x, <4 x double> %y) {338; CHECK-LABEL: define <4 x double> @test_powr_v4f64339; CHECK-SAME: (<4 x double> [[X:%.*]], <4 x double> [[Y:%.*]]) {340; CHECK-NEXT: [[POWR:%.*]] = tail call <4 x double> @_Z4powrDv4_dS_(<4 x double> [[X]], <4 x double> [[Y]])341; CHECK-NEXT: ret <4 x double> [[POWR]]342;343 %powr = tail call <4 x double> @_Z4powrDv4_dS_(<4 x double> %x, <4 x double> %y)344 ret <4 x double> %powr345}346 347define <8 x double> @test_powr_v8f64(<8 x double> %x, <8 x double> %y) {348; CHECK-LABEL: define <8 x double> @test_powr_v8f64349; CHECK-SAME: (<8 x double> [[X:%.*]], <8 x double> [[Y:%.*]]) {350; CHECK-NEXT: [[POWR:%.*]] = tail call <8 x double> @_Z4powrDv8_dS_(<8 x double> [[X]], <8 x double> [[Y]])351; CHECK-NEXT: ret <8 x double> [[POWR]]352;353 %powr = tail call <8 x double> @_Z4powrDv8_dS_(<8 x double> %x, <8 x double> %y)354 ret <8 x double> %powr355}356 357define <16 x double> @test_powr_v16f64(<16 x double> %x, <16 x double> %y) {358; CHECK-LABEL: define <16 x double> @test_powr_v16f64359; CHECK-SAME: (<16 x double> [[X:%.*]], <16 x double> [[Y:%.*]]) {360; CHECK-NEXT: [[POWR:%.*]] = tail call <16 x double> @_Z4powrDv16_dS_(<16 x double> [[X]], <16 x double> [[Y]])361; CHECK-NEXT: ret <16 x double> [[POWR]]362;363 %powr = tail call <16 x double> @_Z4powrDv16_dS_(<16 x double> %x, <16 x double> %y)364 ret <16 x double> %powr365}366 367define half @test_powr_f16(half %x, half %y) {368; CHECK-LABEL: define half @test_powr_f16369; CHECK-SAME: (half [[X:%.*]], half [[Y:%.*]]) {370; CHECK-NEXT: [[POWR:%.*]] = tail call half @_Z4powrDhDh(half [[X]], half [[Y]])371; CHECK-NEXT: ret half [[POWR]]372;373 %powr = tail call half @_Z4powrDhDh(half %x, half %y)374 ret half %powr375}376 377define <2 x half> @test_powr_v2f16(<2 x half> %x, <2 x half> %y) {378; CHECK-LABEL: define <2 x half> @test_powr_v2f16379; CHECK-SAME: (<2 x half> [[X:%.*]], <2 x half> [[Y:%.*]]) {380; CHECK-NEXT: [[POWR:%.*]] = tail call <2 x half> @_Z4powrDv2_DhS_(<2 x half> [[X]], <2 x half> [[Y]])381; CHECK-NEXT: ret <2 x half> [[POWR]]382;383 %powr = tail call <2 x half> @_Z4powrDv2_DhS_(<2 x half> %x, <2 x half> %y)384 ret <2 x half> %powr385}386 387define <3 x half> @test_powr_v3f16(<3 x half> %x, <3 x half> %y) {388; CHECK-LABEL: define <3 x half> @test_powr_v3f16389; CHECK-SAME: (<3 x half> [[X:%.*]], <3 x half> [[Y:%.*]]) {390; CHECK-NEXT: [[POWR:%.*]] = tail call <3 x half> @_Z4powrDv3_DhS_(<3 x half> [[X]], <3 x half> [[Y]])391; CHECK-NEXT: ret <3 x half> [[POWR]]392;393 %powr = tail call <3 x half> @_Z4powrDv3_DhS_(<3 x half> %x, <3 x half> %y)394 ret <3 x half> %powr395}396 397define <4 x half> @test_powr_v4f16(<4 x half> %x, <4 x half> %y) {398; CHECK-LABEL: define <4 x half> @test_powr_v4f16399; CHECK-SAME: (<4 x half> [[X:%.*]], <4 x half> [[Y:%.*]]) {400; CHECK-NEXT: [[POWR:%.*]] = tail call <4 x half> @_Z4powrDv4_DhS_(<4 x half> [[X]], <4 x half> [[Y]])401; CHECK-NEXT: ret <4 x half> [[POWR]]402;403 %powr = tail call <4 x half> @_Z4powrDv4_DhS_(<4 x half> %x, <4 x half> %y)404 ret <4 x half> %powr405}406 407define <8 x half> @test_powr_v8f16(<8 x half> %x, <8 x half> %y) {408; CHECK-LABEL: define <8 x half> @test_powr_v8f16409; CHECK-SAME: (<8 x half> [[X:%.*]], <8 x half> [[Y:%.*]]) {410; CHECK-NEXT: [[POWR:%.*]] = tail call <8 x half> @_Z4powrDv8_DhS_(<8 x half> [[X]], <8 x half> [[Y]])411; CHECK-NEXT: ret <8 x half> [[POWR]]412;413 %powr = tail call <8 x half> @_Z4powrDv8_DhS_(<8 x half> %x, <8 x half> %y)414 ret <8 x half> %powr415}416 417define <16 x half> @test_powr_v16f16(<16 x half> %x, <16 x half> %y) {418; CHECK-LABEL: define <16 x half> @test_powr_v16f16419; CHECK-SAME: (<16 x half> [[X:%.*]], <16 x half> [[Y:%.*]]) {420; CHECK-NEXT: [[POWR:%.*]] = tail call <16 x half> @_Z4powrDv16_DhS_(<16 x half> [[X]], <16 x half> [[Y]])421; CHECK-NEXT: ret <16 x half> [[POWR]]422;423 %powr = tail call <16 x half> @_Z4powrDv16_DhS_(<16 x half> %x, <16 x half> %y)424 ret <16 x half> %powr425}426 427define float @test_powr_afn_f32_minsize(float %x, float %y) #0 {428; CHECK-LABEL: define float @test_powr_afn_f32_minsize429; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) #[[ATTR0:[0-9]+]] {430; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float [[Y]])431; CHECK-NEXT: ret float [[POWR]]432;433 %powr = tail call afn float @_Z4powrff(float %x, float %y)434 ret float %powr435}436 437define float @test_powr_afn_f32_nnan_minsize(float %x, float %y) #0 {438; CHECK-LABEL: define float @test_powr_afn_f32_nnan_minsize439; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) #[[ATTR0]] {440; CHECK-NEXT: [[POWR:%.*]] = tail call nnan afn float @_Z4powrff(float [[X]], float [[Y]])441; CHECK-NEXT: ret float [[POWR]]442;443 %powr = tail call afn nnan float @_Z4powrff(float %x, float %y)444 ret float %powr445}446 447define float @test_powr_afn_f32_noinline(float %x, float %y) {448; CHECK-LABEL: define float @test_powr_afn_f32_noinline449; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {450; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float [[Y]]) #[[ATTR4:[0-9]+]]451; CHECK-NEXT: ret float [[POWR]]452;453 %powr = tail call afn float @_Z4powrff(float %x, float %y) #1454 ret float %powr455}456 457define float @test_powr_afn_f32_nnan_noinline(float %x, float %y) {458; CHECK-LABEL: define float @test_powr_afn_f32_nnan_noinline459; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {460; CHECK-NEXT: [[POWR:%.*]] = tail call nnan afn float @_Z4powrff(float [[X]], float [[Y]]) #[[ATTR4]]461; CHECK-NEXT: ret float [[POWR]]462;463 %powr = tail call afn nnan float @_Z4powrff(float %x, float %y) #1464 ret float %powr465}466 467define float @test_powr_afn_f32_strictfp(float %x, float %y) #2 {468; CHECK-LABEL: define float @test_powr_afn_f32_strictfp469; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1:[0-9]+]] {470; CHECK-NEXT: [[POWR:%.*]] = tail call nnan nsz afn float @_Z4powrff(float [[X]], float [[Y]]) #[[ATTR1]]471; CHECK-NEXT: ret float [[POWR]]472;473 %powr = tail call afn nsz nnan float @_Z4powrff(float %x, float %y) #2474 ret float %powr475}476 477define float @test_powr_fast_f32_nobuiltin(float %x, float %y) {478; CHECK-LABEL: define float @test_powr_fast_f32_nobuiltin479; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) {480; CHECK-NEXT: [[POWR:%.*]] = tail call fast float @_Z4powrff(float [[X]], float [[Y]]) #[[ATTR5:[0-9]+]]481; CHECK-NEXT: ret float [[POWR]]482;483 %powr = tail call fast float @_Z4powrff(float %x, float %y) #3484 ret float %powr485}486 487define float @test_powr_afn_f32_poison(float %x) {488; CHECK-LABEL: define float @test_powr_afn_f32_poison489; CHECK-SAME: (float [[X:%.*]]) {490; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float poison)491; CHECK-NEXT: ret float [[POWR]]492;493 %powr = tail call afn float @_Z4powrff(float %x, float poison)494 ret float %powr495}496 497define float @test_powr_afn_f32_0.0(float %x) {498; CHECK-LABEL: define float @test_powr_afn_f32_0.0499; CHECK-SAME: (float [[X:%.*]]) {500; CHECK-NEXT: ret float 1.000000e+00501;502 %powr = tail call afn float @_Z4powrff(float %x, float 0.0)503 ret float %powr504}505 506define float @test_powr_afn_f32_neg0.0(float %x) {507; CHECK-LABEL: define float @test_powr_afn_f32_neg0.0508; CHECK-SAME: (float [[X:%.*]]) {509; CHECK-NEXT: ret float 1.000000e+00510;511 %powr = tail call afn float @_Z4powrff(float %x, float -0.0)512 ret float %powr513}514 515define <2 x float> @test_powr_afn_v2f32_0.0(<2 x float> %x) {516; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_0.0517; CHECK-SAME: (<2 x float> [[X:%.*]]) {518; CHECK-NEXT: ret <2 x float> splat (float 1.000000e+00)519;520 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 0.0, float 0.0>)521 ret <2 x float> %powr522}523 524define <2 x float> @test_powr_afn_v2f32_neg0.0(<2 x float> %x) {525; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg0.0526; CHECK-SAME: (<2 x float> [[X:%.*]]) {527; CHECK-NEXT: ret <2 x float> splat (float 1.000000e+00)528;529 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -0.0, float -0.0>)530 ret <2 x float> %powr531}532 533define <2 x float> @test_powr_afn_v2f32_plus_minus_0.0(<2 x float> %x) {534; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_0.0535; CHECK-SAME: (<2 x float> [[X:%.*]]) {536; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 0.000000e+00, float -0.000000e+00>)537; CHECK-NEXT: ret <2 x float> [[POWR]]538;539 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 0.0, float -0.0>)540 ret <2 x float> %powr541}542 543define <3 x float> @test_powr_afn_v3f32_0.0_splat_undef(<3 x float> %x, <3 x float> %y) {544; CHECK-LABEL: define <3 x float> @test_powr_afn_v3f32_0.0_splat_undef545; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {546; CHECK-NEXT: ret <3 x float> splat (float 1.000000e+00)547;548 %powr = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> <float 0.0, float poison, float 0.0>)549 ret <3 x float> %powr550}551 552define <3 x float> @test_powr_afn_v3f32_neg0.0_splat_undef(<3 x float> %x, <3 x float> %y) {553; CHECK-LABEL: define <3 x float> @test_powr_afn_v3f32_neg0.0_splat_undef554; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {555; CHECK-NEXT: ret <3 x float> splat (float 1.000000e+00)556;557 %powr = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> <float -0.0, float poison, float -0.0>)558 ret <3 x float> %powr559}560 561define float @test_powr_afn_f32_0.5(float %x) {562; CHECK-LABEL: define float @test_powr_afn_f32_0.5563; CHECK-SAME: (float [[X:%.*]]) {564; CHECK-NEXT: [[__POW2SQRT:%.*]] = call afn float @_Z4sqrtf(float [[X]])565; CHECK-NEXT: ret float [[__POW2SQRT]]566;567 %powr = tail call afn float @_Z4powrff(float %x, float 0.5)568 ret float %powr569}570 571define float @test_powr_afn_f32_neg0.5(float %x) {572; CHECK-LABEL: define float @test_powr_afn_f32_neg0.5573; CHECK-SAME: (float [[X:%.*]]) {574; CHECK-NEXT: [[__POW2RSQRT:%.*]] = call afn float @_Z5rsqrtf(float [[X]])575; CHECK-NEXT: ret float [[__POW2RSQRT]]576;577 %powr = tail call afn float @_Z4powrff(float %x, float -0.5)578 ret float %powr579}580 581define <2 x float> @test_powr_afn_v2f32_0.5(<2 x float> %x) {582; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_0.5583; CHECK-SAME: (<2 x float> [[X:%.*]]) {584; CHECK-NEXT: [[__POW2SQRT:%.*]] = call afn <2 x float> @_Z4sqrtDv2_f(<2 x float> [[X]])585; CHECK-NEXT: ret <2 x float> [[__POW2SQRT]]586;587 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 0.5, float 0.5>)588 ret <2 x float> %powr589}590 591define <2 x float> @test_powr_afn_v2f32_neg0.5(<2 x float> %x) {592; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg0.5593; CHECK-SAME: (<2 x float> [[X:%.*]]) {594; CHECK-NEXT: [[__POW2RSQRT:%.*]] = call afn <2 x float> @_Z5rsqrtDv2_f(<2 x float> [[X]])595; CHECK-NEXT: ret <2 x float> [[__POW2RSQRT]]596;597 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -0.5, float -0.5>)598 ret <2 x float> %powr599}600 601define <2 x float> @test_powr_afn_v2f32_plus_minus_0.5(<2 x float> %x) {602; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_0.5603; CHECK-SAME: (<2 x float> [[X:%.*]]) {604; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 5.000000e-01, float -5.000000e-01>)605; CHECK-NEXT: ret <2 x float> [[POWR]]606;607 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 0.5, float -0.5>)608 ret <2 x float> %powr609}610 611define <3 x float> @test_powr_afn_v3f32_0.5_splat_undef(<3 x float> %x, <3 x float> %y) {612; CHECK-LABEL: define <3 x float> @test_powr_afn_v3f32_0.5_splat_undef613; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {614; CHECK-NEXT: [[__POW2SQRT:%.*]] = call afn <3 x float> @_Z4sqrtDv3_f(<3 x float> [[X]])615; CHECK-NEXT: ret <3 x float> [[__POW2SQRT]]616;617 %powr = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> <float 0.5, float poison, float 0.5>)618 ret <3 x float> %powr619}620 621define <3 x float> @test_powr_afn_v3f32_neg0.5_splat_undef(<3 x float> %x, <3 x float> %y) {622; CHECK-LABEL: define <3 x float> @test_powr_afn_v3f32_neg0.5_splat_undef623; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {624; CHECK-NEXT: [[__POW2RSQRT:%.*]] = call afn <3 x float> @_Z5rsqrtDv3_f(<3 x float> [[X]])625; CHECK-NEXT: ret <3 x float> [[__POW2RSQRT]]626;627 %powr = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> <float -0.5, float poison, float -0.5>)628 ret <3 x float> %powr629}630 631define float @test_powr_afn_f32_1.0(float %x) {632; CHECK-LABEL: define float @test_powr_afn_f32_1.0633; CHECK-SAME: (float [[X:%.*]]) {634; CHECK-NEXT: ret float [[X]]635;636 %powr = tail call afn float @_Z4powrff(float %x, float 1.0)637 ret float %powr638}639 640define float @test_powr_afn_f32_neg1.0(float %x) {641; CHECK-LABEL: define float @test_powr_afn_f32_neg1.0642; CHECK-SAME: (float [[X:%.*]]) {643; CHECK-NEXT: [[__POWRECIP:%.*]] = fdiv afn float 1.000000e+00, [[X]]644; CHECK-NEXT: ret float [[__POWRECIP]]645;646 %powr = tail call afn float @_Z4powrff(float %x, float -1.0)647 ret float %powr648}649 650define <2 x float> @test_powr_afn_v2f32_1.0(<2 x float> %x) {651; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_1.0652; CHECK-SAME: (<2 x float> [[X:%.*]]) {653; CHECK-NEXT: ret <2 x float> [[X]]654;655 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 1.0, float 1.0>)656 ret <2 x float> %powr657}658 659define <2 x float> @test_powr_afn_v2f32_neg1.0(<2 x float> %x) {660; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg1.0661; CHECK-SAME: (<2 x float> [[X:%.*]]) {662; CHECK-NEXT: [[__POWRECIP:%.*]] = fdiv afn <2 x float> splat (float 1.000000e+00), [[X]]663; CHECK-NEXT: ret <2 x float> [[__POWRECIP]]664;665 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -1.0, float -1.0>)666 ret <2 x float> %powr667}668 669define <2 x float> @test_powr_afn_v2f32_plus_minus_1.0(<2 x float> %x) {670; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_1.0671; CHECK-SAME: (<2 x float> [[X:%.*]]) {672; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 1.000000e+00, float -1.000000e+00>)673; CHECK-NEXT: ret <2 x float> [[POWR]]674;675 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 1.0, float -1.0>)676 ret <2 x float> %powr677}678 679define <3 x float> @test_powr_afn_v3f32_1.0_splat_undef(<3 x float> %x, <3 x float> %y) {680; CHECK-LABEL: define <3 x float> @test_powr_afn_v3f32_1.0_splat_undef681; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {682; CHECK-NEXT: ret <3 x float> [[X]]683;684 %powr = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> <float 1.0, float poison, float 1.0>)685 ret <3 x float> %powr686}687 688define <3 x float> @test_powr_afn_v3f32_neg1.0_splat_undef(<3 x float> %x, <3 x float> %y) {689; CHECK-LABEL: define <3 x float> @test_powr_afn_v3f32_neg1.0_splat_undef690; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) {691; CHECK-NEXT: [[__POWRECIP:%.*]] = fdiv afn <3 x float> splat (float 1.000000e+00), [[X]]692; CHECK-NEXT: ret <3 x float> [[__POWRECIP]]693;694 %powr = tail call afn <3 x float> @_Z4powrDv3_fS_(<3 x float> %x, <3 x float> <float -1.0, float poison, float -1.0>)695 ret <3 x float> %powr696}697 698define float @test_powr_afn_f32_2.0(float %x) {699; CHECK-LABEL: define float @test_powr_afn_f32_2.0700; CHECK-SAME: (float [[X:%.*]]) {701; CHECK-NEXT: [[__POW2:%.*]] = fmul afn float [[X]], [[X]]702; CHECK-NEXT: ret float [[__POW2]]703;704 %powr = tail call afn float @_Z4powrff(float %x, float 2.0)705 ret float %powr706}707 708define float @test_powr_afn_f32_neg2.0(float %x) {709; CHECK-LABEL: define float @test_powr_afn_f32_neg2.0710; CHECK-SAME: (float [[X:%.*]]) {711; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float -2.000000e+00)712; CHECK-NEXT: ret float [[POWR]]713;714 %powr = tail call afn float @_Z4powrff(float %x, float -2.0)715 ret float %powr716}717 718define <2 x float> @test_powr_afn_v2f32_2.0(<2 x float> %x) {719; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_2.0720; CHECK-SAME: (<2 x float> [[X:%.*]]) {721; CHECK-NEXT: [[__POW2:%.*]] = fmul afn <2 x float> [[X]], [[X]]722; CHECK-NEXT: ret <2 x float> [[__POW2]]723;724 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 2.0, float 2.0>)725 ret <2 x float> %powr726}727 728define <2 x float> @test_powr_afn_v2f32_neg2.0(<2 x float> %x) {729; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg2.0730; CHECK-SAME: (<2 x float> [[X:%.*]]) {731; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float -2.000000e+00))732; CHECK-NEXT: ret <2 x float> [[POWR]]733;734 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -2.0, float -2.0>)735 ret <2 x float> %powr736}737 738define <2 x float> @test_powr_afn_v2f32_plus_minus_2.0(<2 x float> %x) {739; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_2.0740; CHECK-SAME: (<2 x float> [[X:%.*]]) {741; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 2.000000e+00, float -2.000000e+00>)742; CHECK-NEXT: ret <2 x float> [[POWR]]743;744 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 2.0, float -2.0>)745 ret <2 x float> %powr746}747 748define float @test_powr_afn_f32_3.0(float %x) {749; CHECK-LABEL: define float @test_powr_afn_f32_3.0750; CHECK-SAME: (float [[X:%.*]]) {751; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float 3.000000e+00)752; CHECK-NEXT: ret float [[POWR]]753;754 %powr = tail call afn float @_Z4powrff(float %x, float 3.0)755 ret float %powr756}757 758define float @test_powr_afn_f32_neg3.0(float %x) {759; CHECK-LABEL: define float @test_powr_afn_f32_neg3.0760; CHECK-SAME: (float [[X:%.*]]) {761; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float -3.000000e+00)762; CHECK-NEXT: ret float [[POWR]]763;764 %powr = tail call afn float @_Z4powrff(float %x, float -3.0)765 ret float %powr766}767 768define <2 x float> @test_powr_afn_v2f32_3.0(<2 x float> %x) {769; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_3.0770; CHECK-SAME: (<2 x float> [[X:%.*]]) {771; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float 3.000000e+00))772; CHECK-NEXT: ret <2 x float> [[POWR]]773;774 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 3.0, float 3.0>)775 ret <2 x float> %powr776}777 778define <2 x float> @test_powr_afn_v2f32_neg3.0(<2 x float> %x) {779; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg3.0780; CHECK-SAME: (<2 x float> [[X:%.*]]) {781; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float -3.000000e+00))782; CHECK-NEXT: ret <2 x float> [[POWR]]783;784 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -3.0, float -3.0>)785 ret <2 x float> %powr786}787 788define <2 x float> @test_powr_afn_v2f32_plus_minus_3.0(<2 x float> %x) {789; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_3.0790; CHECK-SAME: (<2 x float> [[X:%.*]]) {791; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 3.000000e+00, float -3.000000e+00>)792; CHECK-NEXT: ret <2 x float> [[POWR]]793;794 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 3.0, float -3.0>)795 ret <2 x float> %powr796}797 798define float @test_powr_afn_f32_3.99(float %x) {799; CHECK-LABEL: define float @test_powr_afn_f32_3.99800; CHECK-SAME: (float [[X:%.*]]) {801; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float 0x400FEB8520000000)802; CHECK-NEXT: ret float [[POWR]]803;804 %powr = tail call afn float @_Z4powrff(float %x, float 0x400FEB8520000000)805 ret float %powr806}807 808define float @test_powr_afn_f32_neg3.99(float %x) {809; CHECK-LABEL: define float @test_powr_afn_f32_neg3.99810; CHECK-SAME: (float [[X:%.*]]) {811; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float 0xC00FEB8520000000)812; CHECK-NEXT: ret float [[POWR]]813;814 %powr = tail call afn float @_Z4powrff(float %x, float 0xC00FEB8520000000)815 ret float %powr816}817 818define <2 x float> @test_powr_afn_v2f32_3.99(<2 x float> %x) {819; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_3.99820; CHECK-SAME: (<2 x float> [[X:%.*]]) {821; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float 0x400FEB8520000000))822; CHECK-NEXT: ret <2 x float> [[POWR]]823;824 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 0x400FEB8520000000, float 0x400FEB8520000000>)825 ret <2 x float> %powr826}827 828define <2 x float> @test_powr_afn_v2f32_neg3.99(<2 x float> %x) {829; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg3.99830; CHECK-SAME: (<2 x float> [[X:%.*]]) {831; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float 0xC00FEB8520000000))832; CHECK-NEXT: ret <2 x float> [[POWR]]833;834 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 0xC00FEB8520000000, float 0xC00FEB8520000000>)835 ret <2 x float> %powr836}837 838define <2 x float> @test_powr_afn_v2f32_plus_minus_3.99(<2 x float> %x) {839; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_3.99840; CHECK-SAME: (<2 x float> [[X:%.*]]) {841; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 0x400FEB8520000000, float 0xC00FEB8520000000>)842; CHECK-NEXT: ret <2 x float> [[POWR]]843;844 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 0x400FEB8520000000, float 0xC00FEB8520000000>)845 ret <2 x float> %powr846}847 848define float @test_powr_afn_f32_8.0(float %x) {849; CHECK-LABEL: define float @test_powr_afn_f32_8.0850; CHECK-SAME: (float [[X:%.*]]) {851; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float 8.000000e+00)852; CHECK-NEXT: ret float [[POWR]]853;854 %powr = tail call afn float @_Z4powrff(float %x, float 8.0)855 ret float %powr856}857 858define float @test_powr_afn_f32_neg8.0(float %x) {859; CHECK-LABEL: define float @test_powr_afn_f32_neg8.0860; CHECK-SAME: (float [[X:%.*]]) {861; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float -8.000000e+00)862; CHECK-NEXT: ret float [[POWR]]863;864 %powr = tail call afn float @_Z4powrff(float %x, float -8.0)865 ret float %powr866}867 868define <2 x float> @test_powr_afn_v2f32_8.0(<2 x float> %x) {869; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_8.0870; CHECK-SAME: (<2 x float> [[X:%.*]]) {871; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float 8.000000e+00))872; CHECK-NEXT: ret <2 x float> [[POWR]]873;874 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 8.0, float 8.0>)875 ret <2 x float> %powr876}877 878define <2 x float> @test_powr_afn_v2f32_neg8.0(<2 x float> %x) {879; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg8.0880; CHECK-SAME: (<2 x float> [[X:%.*]]) {881; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float -8.000000e+00))882; CHECK-NEXT: ret <2 x float> [[POWR]]883;884 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -8.0, float -8.0>)885 ret <2 x float> %powr886}887 888define <2 x float> @test_powr_afn_v2f32_plus_minus_8.0(<2 x float> %x) {889; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_8.0890; CHECK-SAME: (<2 x float> [[X:%.*]]) {891; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 8.000000e+00, float -8.000000e+00>)892; CHECK-NEXT: ret <2 x float> [[POWR]]893;894 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 8.0, float -8.0>)895 ret <2 x float> %powr896}897 898define float @test_powr_afn_f32_12.0(float %x) {899; CHECK-LABEL: define float @test_powr_afn_f32_12.0900; CHECK-SAME: (float [[X:%.*]]) {901; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float 1.200000e+01)902; CHECK-NEXT: ret float [[POWR]]903;904 %powr = tail call afn float @_Z4powrff(float %x, float 12.0)905 ret float %powr906}907 908define float @test_powr_afn_f32_neg12.0(float %x) {909; CHECK-LABEL: define float @test_powr_afn_f32_neg12.0910; CHECK-SAME: (float [[X:%.*]]) {911; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float -1.200000e+01)912; CHECK-NEXT: ret float [[POWR]]913;914 %powr = tail call afn float @_Z4powrff(float %x, float -12.0)915 ret float %powr916}917 918define <2 x float> @test_powr_afn_v2f32_12.0(<2 x float> %x) {919; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_12.0920; CHECK-SAME: (<2 x float> [[X:%.*]]) {921; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float 1.200000e+01))922; CHECK-NEXT: ret <2 x float> [[POWR]]923;924 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 12.0, float 12.0>)925 ret <2 x float> %powr926}927 928define <2 x float> @test_powr_afn_v2f32_neg12.0(<2 x float> %x) {929; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg12.0930; CHECK-SAME: (<2 x float> [[X:%.*]]) {931; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float -1.200000e+01))932; CHECK-NEXT: ret <2 x float> [[POWR]]933;934 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -12.0, float -12.0>)935 ret <2 x float> %powr936}937 938define <2 x float> @test_powr_afn_v2f32_plus_minus_12.0(<2 x float> %x) {939; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_12.0940; CHECK-SAME: (<2 x float> [[X:%.*]]) {941; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 1.200000e+01, float -1.200000e+01>)942; CHECK-NEXT: ret <2 x float> [[POWR]]943;944 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 12.0, float -12.0>)945 ret <2 x float> %powr946}947 948define float @test_powr_afn_f32_13.0(float %x) {949; CHECK-LABEL: define float @test_powr_afn_f32_13.0950; CHECK-SAME: (float [[X:%.*]]) {951; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float 1.300000e+01)952; CHECK-NEXT: ret float [[POWR]]953;954 %powr = tail call afn float @_Z4powrff(float %x, float 13.0)955 ret float %powr956}957 958define float @test_powr_afn_f32_neg13.0(float %x) {959; CHECK-LABEL: define float @test_powr_afn_f32_neg13.0960; CHECK-SAME: (float [[X:%.*]]) {961; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float -1.300000e+01)962; CHECK-NEXT: ret float [[POWR]]963;964 %powr = tail call afn float @_Z4powrff(float %x, float -13.0)965 ret float %powr966}967 968define <2 x float> @test_powr_afn_v2f32_13.0(<2 x float> %x) {969; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_13.0970; CHECK-SAME: (<2 x float> [[X:%.*]]) {971; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float 1.300000e+01))972; CHECK-NEXT: ret <2 x float> [[POWR]]973;974 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 13.0, float 13.0>)975 ret <2 x float> %powr976}977 978define <2 x float> @test_powr_afn_v2f32_neg13.0(<2 x float> %x) {979; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_neg13.0980; CHECK-SAME: (<2 x float> [[X:%.*]]) {981; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> splat (float -1.300000e+01))982; CHECK-NEXT: ret <2 x float> [[POWR]]983;984 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float -13.0, float -13.0>)985 ret <2 x float> %powr986}987 988define <2 x float> @test_powr_afn_v2f32_plus_minus_13.0(<2 x float> %x) {989; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_plus_minus_13.0990; CHECK-SAME: (<2 x float> [[X:%.*]]) {991; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> <float 1.300000e+01, float -1.300000e+01>)992; CHECK-NEXT: ret <2 x float> [[POWR]]993;994 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> <float 13.0, float -13.0>)995 ret <2 x float> %powr996}997 998define float @test_powr_afn_f32_nnan_x_known_positive(float nofpclass(ninf nnorm nsub) %x, float %y) {999; CHECK-LABEL: define float @test_powr_afn_f32_nnan_x_known_positive1000; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[X:%.*]], float [[Y:%.*]]) {1001; CHECK-NEXT: [[POWR:%.*]] = tail call nnan afn float @_Z4powrff(float [[X]], float [[Y]])1002; CHECK-NEXT: ret float [[POWR]]1003;1004 %powr = tail call afn nnan float @_Z4powrff(float %x, float %y)1005 ret float %powr1006}1007 1008define float @test_powr_afn_f32_nnan_ninf_x_known_positive(float nofpclass(ninf nnorm nsub) %x, float %y) {1009; CHECK-LABEL: define float @test_powr_afn_f32_nnan_ninf_x_known_positive1010; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[X:%.*]], float [[Y:%.*]]) {1011; CHECK-NEXT: [[__LOG2:%.*]] = call nnan ninf afn float @llvm.log2.f32(float [[X]])1012; CHECK-NEXT: [[__YLOGX:%.*]] = fmul nnan ninf afn float [[Y]], [[__LOG2]]1013; CHECK-NEXT: [[__EXP2:%.*]] = call nnan ninf afn float @llvm.exp2.f32(float [[__YLOGX]])1014; CHECK-NEXT: ret float [[__EXP2]]1015;1016 %powr = tail call afn nnan ninf float @_Z4powrff(float %x, float %y)1017 ret float %powr1018}1019 1020define <2 x float> @test_powr_afn_v2f32_nnan_x_known_positive(<2 x float> nofpclass(ninf nnorm nsub) %x, <2 x float> %y) {1021; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_nnan_x_known_positive1022; CHECK-SAME: (<2 x float> nofpclass(ninf nsub nnorm) [[X:%.*]], <2 x float> [[Y:%.*]]) {1023; CHECK-NEXT: [[POWR:%.*]] = tail call nnan afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> [[Y]])1024; CHECK-NEXT: ret <2 x float> [[POWR]]1025;1026 %powr = tail call afn nnan <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y)1027 ret <2 x float> %powr1028}1029 1030define <2 x float> @test_powr_afn_v2f32_nnan_ninf_x_known_positive(<2 x float> nofpclass(ninf nnorm nsub) %x, <2 x float> %y) {1031; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_nnan_ninf_x_known_positive1032; CHECK-SAME: (<2 x float> nofpclass(ninf nsub nnorm) [[X:%.*]], <2 x float> [[Y:%.*]]) {1033; CHECK-NEXT: [[__LOG2:%.*]] = call nnan ninf afn <2 x float> @llvm.log2.v2f32(<2 x float> [[X]])1034; CHECK-NEXT: [[__YLOGX:%.*]] = fmul nnan ninf afn <2 x float> [[Y]], [[__LOG2]]1035; CHECK-NEXT: [[__EXP2:%.*]] = call nnan ninf afn <2 x float> @llvm.exp2.v2f32(<2 x float> [[__YLOGX]])1036; CHECK-NEXT: ret <2 x float> [[__EXP2]]1037;1038 %powr = tail call afn nnan ninf <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y)1039 ret <2 x float> %powr1040}1041 1042define float @test_powr_f32_x_known_positive(float nofpclass(ninf nnorm nsub) %x, float %y) {1043; CHECK-LABEL: define float @test_powr_f32_x_known_positive1044; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[X:%.*]], float [[Y:%.*]]) {1045; CHECK-NEXT: [[POWR:%.*]] = tail call float @_Z4powrff(float [[X]], float [[Y]])1046; CHECK-NEXT: ret float [[POWR]]1047;1048 %powr = tail call float @_Z4powrff(float %x, float %y)1049 ret float %powr1050}1051 1052define float @test_powr_afn_f32_x_known_positive(float nofpclass(ninf nnorm nsub) %x, float %y) {1053; CHECK-LABEL: define float @test_powr_afn_f32_x_known_positive1054; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[X:%.*]], float [[Y:%.*]]) {1055; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float [[Y]])1056; CHECK-NEXT: ret float [[POWR]]1057;1058 %powr = tail call afn float @_Z4powrff(float %x, float %y)1059 ret float %powr1060}1061 1062define <2 x float> @test_powr_v2f32_x_known_positive(<2 x float> nofpclass(ninf nnorm nsub) %x, <2 x float> %y) {1063; CHECK-LABEL: define <2 x float> @test_powr_v2f32_x_known_positive1064; CHECK-SAME: (<2 x float> nofpclass(ninf nsub nnorm) [[X:%.*]], <2 x float> [[Y:%.*]]) {1065; CHECK-NEXT: [[POWR:%.*]] = tail call <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> [[Y]])1066; CHECK-NEXT: ret <2 x float> [[POWR]]1067;1068 %powr = tail call <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y)1069 ret <2 x float> %powr1070}1071 1072define <2 x float> @test_powr_afn_v2f32_x_known_positive(<2 x float> nofpclass(ninf nnorm nsub) %x, <2 x float> %y) {1073; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_x_known_positive1074; CHECK-SAME: (<2 x float> nofpclass(ninf nsub nnorm) [[X:%.*]], <2 x float> [[Y:%.*]]) {1075; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> [[Y]])1076; CHECK-NEXT: ret <2 x float> [[POWR]]1077;1078 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y)1079 ret <2 x float> %powr1080}1081 1082define float @test_powr_f32_known_integral_sitofp(float %x, i32 %y) {1083; CHECK-LABEL: define float @test_powr_f32_known_integral_sitofp1084; CHECK-SAME: (float [[X:%.*]], i32 [[Y:%.*]]) {1085; CHECK-NEXT: [[Y_CAST:%.*]] = sitofp i32 [[Y]] to float1086; CHECK-NEXT: [[POWR:%.*]] = tail call float @_Z4powrff(float [[X]], float [[Y_CAST]])1087; CHECK-NEXT: ret float [[POWR]]1088;1089 %y.cast = sitofp i32 %y to float1090 %powr = tail call float @_Z4powrff(float %x, float %y.cast)1091 ret float %powr1092}1093 1094define float @test_powr_afn_f32_known_integral_sitofp(float %x, i32 %y) {1095; CHECK-LABEL: define float @test_powr_afn_f32_known_integral_sitofp1096; CHECK-SAME: (float [[X:%.*]], i32 [[Y:%.*]]) {1097; CHECK-NEXT: [[Y_CAST:%.*]] = sitofp i32 [[Y]] to float1098; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float [[Y_CAST]])1099; CHECK-NEXT: ret float [[POWR]]1100;1101 %y.cast = sitofp i32 %y to float1102 %powr = tail call afn float @_Z4powrff(float %x, float %y.cast)1103 ret float %powr1104}1105 1106define float @test_powr_afn_nnan_ninf_f32_known_integral_sitofp(float %x, i32 %y) {1107; CHECK-LABEL: define float @test_powr_afn_nnan_ninf_f32_known_integral_sitofp1108; CHECK-SAME: (float [[X:%.*]], i32 [[Y:%.*]]) {1109; CHECK-NEXT: [[Y_CAST:%.*]] = sitofp i32 [[Y]] to float1110; CHECK-NEXT: [[__LOG2:%.*]] = call nnan ninf afn float @llvm.log2.f32(float [[X]])1111; CHECK-NEXT: [[__YLOGX:%.*]] = fmul nnan ninf afn float [[__LOG2]], [[Y_CAST]]1112; CHECK-NEXT: [[__EXP2:%.*]] = call nnan ninf afn float @llvm.exp2.f32(float [[__YLOGX]])1113; CHECK-NEXT: ret float [[__EXP2]]1114;1115 %y.cast = sitofp i32 %y to float1116 %powr = tail call afn nnan ninf float @_Z4powrff(float %x, float %y.cast)1117 ret float %powr1118}1119 1120define float @test_powr_f32_known_integral_uitofp(float %x, i32 %y) {1121; CHECK-LABEL: define float @test_powr_f32_known_integral_uitofp1122; CHECK-SAME: (float [[X:%.*]], i32 [[Y:%.*]]) {1123; CHECK-NEXT: [[Y_CAST:%.*]] = uitofp i32 [[Y]] to float1124; CHECK-NEXT: [[POWR:%.*]] = tail call float @_Z4powrff(float [[X]], float [[Y_CAST]])1125; CHECK-NEXT: ret float [[POWR]]1126;1127 %y.cast = uitofp i32 %y to float1128 %powr = tail call float @_Z4powrff(float %x, float %y.cast)1129 ret float %powr1130}1131 1132define float @test_powr_afn_f32_known_integral_uitofp(float %x, i32 %y) {1133; CHECK-LABEL: define float @test_powr_afn_f32_known_integral_uitofp1134; CHECK-SAME: (float [[X:%.*]], i32 [[Y:%.*]]) {1135; CHECK-NEXT: [[Y_CAST:%.*]] = uitofp i32 [[Y]] to float1136; CHECK-NEXT: [[POWR:%.*]] = tail call afn float @_Z4powrff(float [[X]], float [[Y_CAST]])1137; CHECK-NEXT: ret float [[POWR]]1138;1139 %y.cast = uitofp i32 %y to float1140 %powr = tail call afn float @_Z4powrff(float %x, float %y.cast)1141 ret float %powr1142}1143 1144define float @test_powr_afn_nnan_ninf_f32_known_integral_uitofp(float %x, i32 %y) {1145; CHECK-LABEL: define float @test_powr_afn_nnan_ninf_f32_known_integral_uitofp1146; CHECK-SAME: (float [[X:%.*]], i32 [[Y:%.*]]) {1147; CHECK-NEXT: [[Y_CAST:%.*]] = uitofp i32 [[Y]] to float1148; CHECK-NEXT: [[__LOG2:%.*]] = call nnan ninf afn float @llvm.log2.f32(float [[X]])1149; CHECK-NEXT: [[__YLOGX:%.*]] = fmul nnan ninf afn float [[__LOG2]], [[Y_CAST]]1150; CHECK-NEXT: [[__EXP2:%.*]] = call nnan ninf afn float @llvm.exp2.f32(float [[__YLOGX]])1151; CHECK-NEXT: ret float [[__EXP2]]1152;1153 %y.cast = uitofp i32 %y to float1154 %powr = tail call afn nnan ninf float @_Z4powrff(float %x, float %y.cast)1155 ret float %powr1156}1157 1158define <2 x float> @test_powr_afn_nnan_ninf_v2f32_known_integral_sitofp(<2 x float> %x, <2 x i32> %y) {1159; CHECK-LABEL: define <2 x float> @test_powr_afn_nnan_ninf_v2f32_known_integral_sitofp1160; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x i32> [[Y:%.*]]) {1161; CHECK-NEXT: [[Y_CAST:%.*]] = sitofp <2 x i32> [[Y]] to <2 x float>1162; CHECK-NEXT: [[__LOG2:%.*]] = call nnan ninf afn <2 x float> @llvm.log2.v2f32(<2 x float> [[X]])1163; CHECK-NEXT: [[__YLOGX:%.*]] = fmul nnan ninf afn <2 x float> [[__LOG2]], [[Y_CAST]]1164; CHECK-NEXT: [[__EXP2:%.*]] = call nnan ninf afn <2 x float> @llvm.exp2.v2f32(<2 x float> [[__YLOGX]])1165; CHECK-NEXT: ret <2 x float> [[__EXP2]]1166;1167 %y.cast = sitofp <2 x i32> %y to <2 x float>1168 %powr = tail call afn nnan ninf <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y.cast)1169 ret <2 x float> %powr1170}1171 1172define <2 x float> @test_powr_v2f32_known_integral_uitofp(<2 x float> %x, <2 x i32> %y) {1173; CHECK-LABEL: define <2 x float> @test_powr_v2f32_known_integral_uitofp1174; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x i32> [[Y:%.*]]) {1175; CHECK-NEXT: [[Y_CAST:%.*]] = uitofp <2 x i32> [[Y]] to <2 x float>1176; CHECK-NEXT: [[POWR:%.*]] = tail call <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> [[Y_CAST]])1177; CHECK-NEXT: ret <2 x float> [[POWR]]1178;1179 %y.cast = uitofp <2 x i32> %y to <2 x float>1180 %powr = tail call <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y.cast)1181 ret <2 x float> %powr1182}1183 1184define <2 x float> @test_powr_afn_v2f32_known_integral_uitofp(<2 x float> %x, <2 x i32> %y) {1185; CHECK-LABEL: define <2 x float> @test_powr_afn_v2f32_known_integral_uitofp1186; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x i32> [[Y:%.*]]) {1187; CHECK-NEXT: [[Y_CAST:%.*]] = uitofp <2 x i32> [[Y]] to <2 x float>1188; CHECK-NEXT: [[POWR:%.*]] = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> [[X]], <2 x float> [[Y_CAST]])1189; CHECK-NEXT: ret <2 x float> [[POWR]]1190;1191 %y.cast = uitofp <2 x i32> %y to <2 x float>1192 %powr = tail call afn <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y.cast)1193 ret <2 x float> %powr1194}1195 1196define <2 x float> @test_powr_afn_nnan_ninf_v2f32_known_integral_uitofp(<2 x float> %x, <2 x i32> %y) {1197; CHECK-LABEL: define <2 x float> @test_powr_afn_nnan_ninf_v2f32_known_integral_uitofp1198; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x i32> [[Y:%.*]]) {1199; CHECK-NEXT: [[Y_CAST:%.*]] = uitofp <2 x i32> [[Y]] to <2 x float>1200; CHECK-NEXT: [[__LOG2:%.*]] = call nnan ninf afn <2 x float> @llvm.log2.v2f32(<2 x float> [[X]])1201; CHECK-NEXT: [[__YLOGX:%.*]] = fmul nnan ninf afn <2 x float> [[__LOG2]], [[Y_CAST]]1202; CHECK-NEXT: [[__EXP2:%.*]] = call nnan ninf afn <2 x float> @llvm.exp2.v2f32(<2 x float> [[__YLOGX]])1203; CHECK-NEXT: ret <2 x float> [[__EXP2]]1204;1205 %y.cast = uitofp <2 x i32> %y to <2 x float>1206 %powr = tail call afn nnan ninf <2 x float> @_Z4powrDv2_fS_(<2 x float> %x, <2 x float> %y.cast)1207 ret <2 x float> %powr1208}1209 1210attributes #0 = { minsize }1211attributes #1 = { noinline }1212attributes #2 = { strictfp }1213attributes #3 = { nobuiltin }1214