508 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT3 4declare float @llvm.canonicalize.f32(float)5 6define float @ret_canonicalize(float %arg0) {7; CHECK-LABEL: define nofpclass(snan) float @ret_canonicalize8; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {9; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12:[0-9]+]]10; CHECK-NEXT: ret float [[CALL]]11;12 %call = call float @llvm.canonicalize.f32(float %arg0)13 ret float %call14}15 16define float @ret_canonicalize_noinf(float nofpclass(inf) %arg0) {17; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_noinf18; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {19; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]20; CHECK-NEXT: ret float [[CALL]]21;22 %call = call float @llvm.canonicalize.f32(float %arg0)23 ret float %call24}25 26define float @ret_canonicalize_dynamic_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,dynamic" {27; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_dynamic_denormal28; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR2:[0-9]+]] {29; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]30; CHECK-NEXT: ret float [[CALL]]31;32 %call = call float @llvm.canonicalize.f32(float %arg0)33 ret float %call34}35 36define float @ret_canonicalize_daz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,preserve-sign" {37; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_daz_denormal38; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR3:[0-9]+]] {39; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]40; CHECK-NEXT: ret float [[CALL]]41;42 %call = call float @llvm.canonicalize.f32(float %arg0)43 ret float %call44}45 46define float @ret_canonicalize_dapz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,positive-zero" {47; CHECK-LABEL: define nofpclass(snan inf nzero sub) float @ret_canonicalize_dapz_denormal48; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR4:[0-9]+]] {49; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]50; CHECK-NEXT: ret float [[CALL]]51;52 %call = call float @llvm.canonicalize.f32(float %arg0)53 ret float %call54}55 56define float @ret_canonicalize_ftpz_dapz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,preserve-sign" {57; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftpz_dapz_denormal58; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR5:[0-9]+]] {59; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]60; CHECK-NEXT: ret float [[CALL]]61;62 %call = call float @llvm.canonicalize.f32(float %arg0)63 ret float %call64}65 66define float @ret_canonicalize_ftpz_ieee_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,ieee" {67; CHECK-LABEL: define nofpclass(snan inf nzero sub) float @ret_canonicalize_ftpz_ieee_denormal68; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR6:[0-9]+]] {69; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]70; CHECK-NEXT: ret float [[CALL]]71;72 %call = call float @llvm.canonicalize.f32(float %arg0)73 ret float %call74}75 76define float @ret_canonicalize_ftpz_dynamic_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,dynamic" {77; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftpz_dynamic_denormal78; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR7:[0-9]+]] {79; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]80; CHECK-NEXT: ret float [[CALL]]81;82 %call = call float @llvm.canonicalize.f32(float %arg0)83 ret float %call84}85 86define float @ret_canonicalize_ftz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="preserve-sign,dynamic" {87; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftz_denormal88; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR8:[0-9]+]] {89; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]90; CHECK-NEXT: ret float [[CALL]]91;92 %call = call float @llvm.canonicalize.f32(float %arg0)93 ret float %call94}95 96define float @ret_canonicalize_ieee_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="ieee,ieee" {97; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_ieee_denormal98; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR9:[0-9]+]] {99; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]]100; CHECK-NEXT: ret float [[CALL]]101;102 %call = call float @llvm.canonicalize.f32(float %arg0)103 ret float %call104}105 106define float @ret_canonicalize_ieee_constant_pos_denormal() "denormal-fp-math"="ieee,ieee" {107; CHECK-LABEL: define noundef nofpclass(nan inf zero nsub norm) float @ret_canonicalize_ieee_constant_pos_denormal108; CHECK-SAME: () #[[ATTR9]] {109; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero nsub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]110; CHECK-NEXT: ret float [[CALL]]111;112 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)113 ret float %call114}115 116define float @ret_canonicalize_ieee_constant_neg_denormal() "denormal-fp-math"="ieee,ieee" {117; CHECK-LABEL: define noundef nofpclass(nan inf zero psub norm) float @ret_canonicalize_ieee_constant_neg_denormal118; CHECK-SAME: () #[[ATTR9]] {119; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero psub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]120; CHECK-NEXT: ret float [[CALL]]121;122 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)123 ret float %call124}125 126define float @ret_canonicalize_ieee_constant_pos_zero() "denormal-fp-math"="ieee,ieee" {127; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_ieee_constant_pos_zero128; CHECK-SAME: () #[[ATTR9]] {129; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]130; CHECK-NEXT: ret float [[CALL]]131;132 %call = call float @llvm.canonicalize.f32(float 0.0)133 ret float %call134}135 136define float @ret_canonicalize_ieee_constant_neg_zero() "denormal-fp-math"="ieee,ieee" {137; CHECK-LABEL: define noundef nofpclass(nan inf pzero sub norm) float @ret_canonicalize_ieee_constant_neg_zero138; CHECK-SAME: () #[[ATTR9]] {139; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf pzero sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]140; CHECK-NEXT: ret float [[CALL]]141;142 %call = call float @llvm.canonicalize.f32(float -0.0)143 ret float %call144}145 146define float @ret_canonicalize_ieee_constant_pos_normal() "denormal-fp-math"="ieee,ieee" {147; CHECK-LABEL: define noundef nofpclass(nan inf zero sub nnorm) float @ret_canonicalize_ieee_constant_pos_normal148; CHECK-SAME: () #[[ATTR9]] {149; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]150; CHECK-NEXT: ret float [[CALL]]151;152 %call = call float @llvm.canonicalize.f32(float 8.0)153 ret float %call154}155 156define float @ret_canonicalize_ieee_constant_neg_normal() "denormal-fp-math"="ieee,ieee" {157; CHECK-LABEL: define noundef nofpclass(nan inf zero sub pnorm) float @ret_canonicalize_ieee_constant_neg_normal158; CHECK-SAME: () #[[ATTR9]] {159; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]160; CHECK-NEXT: ret float [[CALL]]161;162 %call = call float @llvm.canonicalize.f32(float -8.0)163 ret float %call164}165 166define float @ret_canonicalize_ieee_constant_pos_inf() "denormal-fp-math"="ieee,ieee" {167; CHECK-LABEL: define noundef nofpclass(nan ninf zero sub norm) float @ret_canonicalize_ieee_constant_pos_inf168; CHECK-SAME: () #[[ATTR9]] {169; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]170; CHECK-NEXT: ret float [[CALL]]171;172 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)173 ret float %call174}175 176define float @ret_canonicalize_ieee_constant_neg_inf() "denormal-fp-math"="ieee,ieee" {177; CHECK-LABEL: define noundef nofpclass(nan pinf zero sub norm) float @ret_canonicalize_ieee_constant_neg_inf178; CHECK-SAME: () #[[ATTR9]] {179; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf zero sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]180; CHECK-NEXT: ret float [[CALL]]181;182 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)183 ret float %call184}185 186define float @ret_canonicalize_ieee_constant_qnan() "denormal-fp-math"="ieee,ieee" {187; CHECK-LABEL: define noundef nofpclass(snan inf zero sub norm) float @ret_canonicalize_ieee_constant_qnan188; CHECK-SAME: () #[[ATTR9]] {189; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]190; CHECK-NEXT: ret float [[CALL]]191;192 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)193 ret float %call194}195 196define float @ret_canonicalize_ieee_constant_snan() "denormal-fp-math"="ieee,ieee" {197; CHECK-LABEL: define noundef nofpclass(snan inf zero sub norm) float @ret_canonicalize_ieee_constant_snan198; CHECK-SAME: () #[[ATTR9]] {199; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]200; CHECK-NEXT: ret float [[CALL]]201;202 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)203 ret float %call204}205 206define float @ret_canonicalize_daz_constant_pos_denormal() "denormal-fp-math"="preserve-sign,preserve-sign" {207; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_pos_denormal208; CHECK-SAME: () #[[ATTR10:[0-9]+]] {209; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]210; CHECK-NEXT: ret float [[CALL]]211;212 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)213 ret float %call214}215 216define float @ret_canonicalize_daz_constant_neg_denormal() "denormal-fp-math"="preserve-sign,preserve-sign" {217; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_neg_denormal218; CHECK-SAME: () #[[ATTR10]] {219; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]220; CHECK-NEXT: ret float [[CALL]]221;222 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)223 ret float %call224}225 226define float @ret_canonicalize_daz_constant_pos_zero() "denormal-fp-math"="preserve-sign,preserve-sign" {227; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_pos_zero228; CHECK-SAME: () #[[ATTR10]] {229; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]230; CHECK-NEXT: ret float [[CALL]]231;232 %call = call float @llvm.canonicalize.f32(float 0.0)233 ret float %call234}235 236define float @ret_canonicalize_daz_constant_neg_zero() "denormal-fp-math"="preserve-sign,preserve-sign" {237; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_neg_zero238; CHECK-SAME: () #[[ATTR10]] {239; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]240; CHECK-NEXT: ret float [[CALL]]241;242 %call = call float @llvm.canonicalize.f32(float -0.0)243 ret float %call244}245 246define float @ret_canonicalize_daz_constant_pos_normal() "denormal-fp-math"="preserve-sign,preserve-sign" {247; CHECK-LABEL: define noundef nofpclass(nan inf sub nnorm) float @ret_canonicalize_daz_constant_pos_normal248; CHECK-SAME: () #[[ATTR10]] {249; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]250; CHECK-NEXT: ret float [[CALL]]251;252 %call = call float @llvm.canonicalize.f32(float 8.0)253 ret float %call254}255 256define float @ret_canonicalize_daz_constant_neg_normal() "denormal-fp-math"="preserve-sign,preserve-sign" {257; CHECK-LABEL: define noundef nofpclass(nan inf sub pnorm) float @ret_canonicalize_daz_constant_neg_normal258; CHECK-SAME: () #[[ATTR10]] {259; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]260; CHECK-NEXT: ret float [[CALL]]261;262 %call = call float @llvm.canonicalize.f32(float -8.0)263 ret float %call264}265 266define float @ret_canonicalize_daz_constant_pos_inf() "denormal-fp-math"="preserve-sign,preserve-sign" {267; CHECK-LABEL: define noundef nofpclass(nan ninf sub norm) float @ret_canonicalize_daz_constant_pos_inf268; CHECK-SAME: () #[[ATTR10]] {269; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]270; CHECK-NEXT: ret float [[CALL]]271;272 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)273 ret float %call274}275 276define float @ret_canonicalize_daz_constant_neg_inf() "denormal-fp-math"="preserve-sign,preserve-sign" {277; CHECK-LABEL: define noundef nofpclass(nan pinf sub norm) float @ret_canonicalize_daz_constant_neg_inf278; CHECK-SAME: () #[[ATTR10]] {279; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]280; CHECK-NEXT: ret float [[CALL]]281;282 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)283 ret float %call284}285 286define float @ret_canonicalize_daz_constant_qnan() "denormal-fp-math"="preserve-sign,preserve-sign" {287; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_daz_constant_qnan288; CHECK-SAME: () #[[ATTR10]] {289; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]290; CHECK-NEXT: ret float [[CALL]]291;292 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)293 ret float %call294}295 296define float @ret_canonicalize_daz_constant_snan() "denormal-fp-math"="preserve-sign,preserve-sign" {297; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_daz_constant_snan298; CHECK-SAME: () #[[ATTR10]] {299; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]300; CHECK-NEXT: ret float [[CALL]]301;302 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)303 ret float %call304}305 306define float @ret_canonicalize_dapz_constant_pos_denormal() "denormal-fp-math"="positive-zero,positive-zero" {307; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_denormal308; CHECK-SAME: () #[[ATTR11:[0-9]+]] {309; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]310; CHECK-NEXT: ret float [[CALL]]311;312 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)313 ret float %call314}315 316define float @ret_canonicalize_dapz_constant_neg_denormal() "denormal-fp-math"="positive-zero,positive-zero" {317; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_denormal318; CHECK-SAME: () #[[ATTR11]] {319; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]320; CHECK-NEXT: ret float [[CALL]]321;322 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)323 ret float %call324}325 326define float @ret_canonicalize_dapz_constant_pos_zero() "denormal-fp-math"="positive-zero,positive-zero" {327; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_zero328; CHECK-SAME: () #[[ATTR11]] {329; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]330; CHECK-NEXT: ret float [[CALL]]331;332 %call = call float @llvm.canonicalize.f32(float 0.0)333 ret float %call334}335 336define float @ret_canonicalize_dapz_constant_neg_zero() "denormal-fp-math"="positive-zero,positive-zero" {337; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_zero338; CHECK-SAME: () #[[ATTR11]] {339; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]340; CHECK-NEXT: ret float [[CALL]]341;342 %call = call float @llvm.canonicalize.f32(float -0.0)343 ret float %call344}345 346define float @ret_canonicalize_dapz_constant_pos_normal() "denormal-fp-math"="positive-zero,positive-zero" {347; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub nnorm) float @ret_canonicalize_dapz_constant_pos_normal348; CHECK-SAME: () #[[ATTR11]] {349; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]350; CHECK-NEXT: ret float [[CALL]]351;352 %call = call float @llvm.canonicalize.f32(float 8.0)353 ret float %call354}355 356define float @ret_canonicalize_dapz_constant_neg_normal() "denormal-fp-math"="positive-zero,positive-zero" {357; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub pnorm) float @ret_canonicalize_dapz_constant_neg_normal358; CHECK-SAME: () #[[ATTR11]] {359; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]360; CHECK-NEXT: ret float [[CALL]]361;362 %call = call float @llvm.canonicalize.f32(float -8.0)363 ret float %call364}365 366define float @ret_canonicalize_dapz_constant_pos_inf() "denormal-fp-math"="positive-zero,positive-zero" {367; CHECK-LABEL: define noundef nofpclass(nan ninf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_inf368; CHECK-SAME: () #[[ATTR11]] {369; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]370; CHECK-NEXT: ret float [[CALL]]371;372 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)373 ret float %call374}375 376define float @ret_canonicalize_dapz_constant_neg_inf() "denormal-fp-math"="positive-zero,positive-zero" {377; CHECK-LABEL: define noundef nofpclass(nan pinf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_inf378; CHECK-SAME: () #[[ATTR11]] {379; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]380; CHECK-NEXT: ret float [[CALL]]381;382 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)383 ret float %call384}385 386define float @ret_canonicalize_dapz_constant_qnan() "denormal-fp-math"="positive-zero,positive-zero" {387; CHECK-LABEL: define noundef nofpclass(snan inf nzero sub norm) float @ret_canonicalize_dapz_constant_qnan388; CHECK-SAME: () #[[ATTR11]] {389; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]390; CHECK-NEXT: ret float [[CALL]]391;392 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)393 ret float %call394}395 396define float @ret_canonicalize_dapz_constant_snan() "denormal-fp-math"="positive-zero,positive-zero" {397; CHECK-LABEL: define noundef nofpclass(snan inf nzero sub norm) float @ret_canonicalize_dapz_constant_snan398; CHECK-SAME: () #[[ATTR11]] {399; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]400; CHECK-NEXT: ret float [[CALL]]401;402 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)403 ret float %call404}405 406define float @ret_canonicalize_dynamic_constant_pos_denormal() "denormal-fp-math"="dynamic,dynamic" {407; CHECK-LABEL: define noundef nofpclass(nan inf nsub norm) float @ret_canonicalize_dynamic_constant_pos_denormal408; CHECK-SAME: () #[[ATTR2]] {409; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nsub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]]410; CHECK-NEXT: ret float [[CALL]]411;412 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000)413 ret float %call414}415 416define float @ret_canonicalize_dynamic_constant_neg_denormal() "denormal-fp-math"="dynamic,dynamic" {417; CHECK-LABEL: define noundef nofpclass(nan inf psub norm) float @ret_canonicalize_dynamic_constant_neg_denormal418; CHECK-SAME: () #[[ATTR2]] {419; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf psub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]]420; CHECK-NEXT: ret float [[CALL]]421;422 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000)423 ret float %call424}425 426define float @ret_canonicalize_dynamic_constant_pos_zero() "denormal-fp-math"="dynamic,dynamic" {427; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_dynamic_constant_pos_zero428; CHECK-SAME: () #[[ATTR2]] {429; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]]430; CHECK-NEXT: ret float [[CALL]]431;432 %call = call float @llvm.canonicalize.f32(float 0.0)433 ret float %call434}435 436define float @ret_canonicalize_dynamic_constant_neg_zero() "denormal-fp-math"="dynamic,dynamic" {437; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_dynamic_constant_neg_zero438; CHECK-SAME: () #[[ATTR2]] {439; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]]440; CHECK-NEXT: ret float [[CALL]]441;442 %call = call float @llvm.canonicalize.f32(float -0.0)443 ret float %call444}445 446define float @ret_canonicalize_dynamic_constant_pos_normal() "denormal-fp-math"="dynamic,dynamic" {447; CHECK-LABEL: define noundef nofpclass(nan inf sub nnorm) float @ret_canonicalize_dynamic_constant_pos_normal448; CHECK-SAME: () #[[ATTR2]] {449; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]]450; CHECK-NEXT: ret float [[CALL]]451;452 %call = call float @llvm.canonicalize.f32(float 8.0)453 ret float %call454}455 456define float @ret_canonicalize_dynamic_constant_neg_normal() "denormal-fp-math"="dynamic,dynamic" {457; CHECK-LABEL: define noundef nofpclass(nan inf sub pnorm) float @ret_canonicalize_dynamic_constant_neg_normal458; CHECK-SAME: () #[[ATTR2]] {459; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]]460; CHECK-NEXT: ret float [[CALL]]461;462 %call = call float @llvm.canonicalize.f32(float -8.0)463 ret float %call464}465 466define float @ret_canonicalize_dynamic_constant_pos_inf() "denormal-fp-math"="dynamic,dynamic" {467; CHECK-LABEL: define noundef nofpclass(nan ninf sub norm) float @ret_canonicalize_dynamic_constant_pos_inf468; CHECK-SAME: () #[[ATTR2]] {469; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]]470; CHECK-NEXT: ret float [[CALL]]471;472 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000)473 ret float %call474}475 476define float @ret_canonicalize_dynamic_constant_neg_inf() "denormal-fp-math"="dynamic,dynamic" {477; CHECK-LABEL: define noundef nofpclass(nan pinf sub norm) float @ret_canonicalize_dynamic_constant_neg_inf478; CHECK-SAME: () #[[ATTR2]] {479; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]]480; CHECK-NEXT: ret float [[CALL]]481;482 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000)483 ret float %call484}485 486define float @ret_canonicalize_dynamic_constant_qnan() "denormal-fp-math"="dynamic,dynamic" {487; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_dynamic_constant_qnan488; CHECK-SAME: () #[[ATTR2]] {489; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]]490; CHECK-NEXT: ret float [[CALL]]491;492 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)493 ret float %call494}495 496define float @ret_canonicalize_dynamic_constant_snan() "denormal-fp-math"="dynamic,dynamic" {497; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_dynamic_constant_snan498; CHECK-SAME: () #[[ATTR2]] {499; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]]500; CHECK-NEXT: ret float [[CALL]]501;502 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000)503 ret float %call504}505 506;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:507; TUNIT: {{.*}}508