514 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 4define float @ret_frem_ieee(float %arg0, float %arg1) #0 {5; CHECK-LABEL: define float @ret_frem_ieee6; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]8; CHECK-NEXT: ret float [[FREM]]9;10 %frem = frem float %arg0, %arg111 ret float %frem12}13 14define float @ret_frem_daz(float %arg0, float %arg1) #1 {15; CHECK-LABEL: define float @ret_frem_daz16; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1:[0-9]+]] {17; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]18; CHECK-NEXT: ret float [[FREM]]19;20 %frem = frem float %arg0, %arg121 ret float %frem22}23 24define float @ret_frem_ieee_noinf_nozero__all(float nofpclass(inf zero) %arg0, float %arg1) #0 {25; CHECK-LABEL: define float @ret_frem_ieee_noinf_nozero__all26; CHECK-SAME: (float nofpclass(inf zero) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {27; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]28; CHECK-NEXT: ret float [[FREM]]29;30 %frem = frem float %arg0, %arg131 ret float %frem32}33 34define float @ret_frem_ieee_nonan_noinf_nozero__all(float nofpclass(nan inf zero) %arg0, float %arg1) #0 {35; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_nozero__all36; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {37; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]38; CHECK-NEXT: ret float [[FREM]]39;40 %frem = frem float %arg0, %arg141 ret float %frem42}43 44define float @ret_frem_ieee_all__nonan_noinf_nozero(float %arg0, float nofpclass(nan inf zero) %arg1) #0 {45; CHECK-LABEL: define float @ret_frem_ieee_all__nonan_noinf_nozero46; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {47; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]48; CHECK-NEXT: ret float [[FREM]]49;50 %frem = frem float %arg0, %arg151 ret float %frem52}53 54define float @ret_frem_ieee_nonan_noinf_nozero__nonan(float nofpclass(nan inf zero) %arg0, float nofpclass(nan) %arg1) #0 {55; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_nozero__nonan56; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR0]] {57; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]58; CHECK-NEXT: ret float [[FREM]]59;60 %frem = frem float %arg0, %arg161 ret float %frem62}63 64define float @ret_frem_ieee_nonan__nonan_noinf_nozero(float nofpclass(nan) %arg0, float nofpclass(nan inf zero) %arg1) #0 {65; CHECK-LABEL: define float @ret_frem_ieee_nonan__nonan_noinf_nozero66; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {67; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]68; CHECK-NEXT: ret float [[FREM]]69;70 %frem = frem float %arg0, %arg171 ret float %frem72}73 74define float @ret_frem_ieee_nonan_nozero__nonan_noinf(float nofpclass(nan zero) %arg0, float nofpclass(nan inf) %arg1) #0 {75; CHECK-LABEL: define float @ret_frem_ieee_nonan_nozero__nonan_noinf76; CHECK-SAME: (float nofpclass(nan zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {77; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]78; CHECK-NEXT: ret float [[FREM]]79;80 %frem = frem float %arg0, %arg181 ret float %frem82}83 84define float @ret_frem_ieee_nonan_noinf__nonan_nozero(float nofpclass(nan inf) %arg0, float nofpclass(nan zero) %arg1) #0 {85; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf__nonan_nozero86; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan zero) [[ARG1:%.*]]) #[[ATTR0]] {87; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]88; CHECK-NEXT: ret float [[FREM]]89;90 %frem = frem float %arg0, %arg191 ret float %frem92}93 94define float @ret_frem_daz_nonan_nozero__nonan_noinf(float nofpclass(nan zero) %arg0, float nofpclass(nan inf) %arg1) #1 {95; CHECK-LABEL: define float @ret_frem_daz_nonan_nozero__nonan_noinf96; CHECK-SAME: (float nofpclass(nan zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR1]] {97; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]98; CHECK-NEXT: ret float [[FREM]]99;100 %frem = frem float %arg0, %arg1101 ret float %frem102}103 104define float @ret_frem_daz_nonan_noinf__nonan_nozero(float nofpclass(nan inf) %arg0, float nofpclass(nan zero) %arg1) #1 {105; CHECK-LABEL: define float @ret_frem_daz_nonan_noinf__nonan_nozero106; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan zero) [[ARG1:%.*]]) #[[ATTR1]] {107; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]108; CHECK-NEXT: ret float [[FREM]]109;110 %frem = frem float %arg0, %arg1111 ret float %frem112}113 114define float @ret_frem_daz_nonan_nozero_nosub__nonan_noinf(float nofpclass(nan zero sub) %arg0, float nofpclass(nan inf) %arg1) #1 {115; CHECK-LABEL: define float @ret_frem_daz_nonan_nozero_nosub__nonan_noinf116; CHECK-SAME: (float nofpclass(nan zero sub) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR1]] {117; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]118; CHECK-NEXT: ret float [[FREM]]119;120 %frem = frem float %arg0, %arg1121 ret float %frem122}123 124define float @ret_frem_daz_nonan_noinf__nonan_nozero_nosub(float nofpclass(nan inf) %arg0, float nofpclass(nan zero sub) %arg1) #1 {125; CHECK-LABEL: define nofpclass(nan) float @ret_frem_daz_nonan_noinf__nonan_nozero_nosub126; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan zero sub) [[ARG1:%.*]]) #[[ATTR1]] {127; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]128; CHECK-NEXT: ret float [[FREM]]129;130 %frem = frem float %arg0, %arg1131 ret float %frem132}133 134define float @ret_frem_ieee_nonan_noinf__nonan_noinf(float nofpclass(nan) %arg0, float nofpclass(nan) %arg1) #0 {135; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf__nonan_noinf136; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR0]] {137; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]138; CHECK-NEXT: ret float [[FREM]]139;140 %frem = frem float %arg0, %arg1141 ret float %frem142}143 144define float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #0 {145; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_nozero146; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {147; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]148; CHECK-NEXT: ret float [[FREM]]149;150 %frem = frem float %arg0, %arg1151 ret float %frem152}153 154define float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #1 {155; CHECK-LABEL: define float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero156; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR1]] {157; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]158; CHECK-NEXT: ret float [[FREM]]159;160 %frem = frem float %arg0, %arg1161 ret float %frem162}163 164define float @ret_frem_dapz_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #2 {165; CHECK-LABEL: define float @ret_frem_dapz_nonan_noinf_nozero__nonan_noinf_nozero166; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR2:[0-9]+]] {167; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]168; CHECK-NEXT: ret float [[FREM]]169;170 %frem = frem float %arg0, %arg1171 ret float %frem172}173 174define float @ret_frem_dynamic_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #3 {175; CHECK-LABEL: define float @ret_frem_dynamic_nonan_noinf_nozero__nonan_noinf_nozero176; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR3:[0-9]+]] {177; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]178; CHECK-NEXT: ret float [[FREM]]179;180 %frem = frem float %arg0, %arg1181 ret float %frem182}183 184define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noinf(float nofpclass(nan inf) %arg0, float nofpclass(nan inf) %arg1) #0 {185; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noinf186; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {187; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]188; CHECK-NEXT: ret float [[FREM]]189;190 %frem = frem float %arg0, %arg1191 ret float %frem192}193 194define float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_noinf(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf) %arg1) #0 {195; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_noinf196; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {197; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]198; CHECK-NEXT: ret float [[FREM]]199;200 %frem = frem float %arg0, %arg1201 ret float %frem202}203 204define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_nozero(float nofpclass(nan inf) %arg0, float nofpclass(nan inf zero) %arg1) #0 {205; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_nozero206; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {207; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]208; CHECK-NEXT: ret float [[FREM]]209;210 %frem = frem float %arg0, %arg1211 ret float %frem212}213 214define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noposzero(float nofpclass(nan inf) %arg0, float nofpclass(nan pzero) %arg1) #0 {215; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noposzero216; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan pzero) [[ARG1:%.*]]) #[[ATTR0]] {217; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]218; CHECK-NEXT: ret float [[FREM]]219;220 %frem = frem float %arg0, %arg1221 ret float %frem222}223 224define float @ret_frem_ieee_nonan_noinf_noposzero__nonan_noinf_noinf(float nofpclass(nan pzero) %arg0, float nofpclass(nan inf) %arg1) #0 {225; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_noposzero__nonan_noinf_noinf226; CHECK-SAME: (float nofpclass(nan pzero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {227; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]228; CHECK-NEXT: ret float [[FREM]]229;230 %frem = frem float %arg0, %arg1231 ret float %frem232}233 234define float @ret_frem_ieee_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #0 {235; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub236; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR0]] {237; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]238; CHECK-NEXT: ret float [[FREM]]239;240 %frem = frem float %arg0, %arg1241 ret float %frem242}243 244; Denormal mode doesn't matter because sources are nofpclass(sub)245define float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #1 {246; CHECK-LABEL: define nofpclass(nan) float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub247; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR1]] {248; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]249; CHECK-NEXT: ret float [[FREM]]250;251 %frem = frem float %arg0, %arg1252 ret float %frem253}254 255define float @ret_frem_dapz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #2 {256; CHECK-LABEL: define nofpclass(nan) float @ret_frem_dapz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub257; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR2]] {258; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]259; CHECK-NEXT: ret float [[FREM]]260;261 %frem = frem float %arg0, %arg1262 ret float %frem263}264 265define float @ret_frem_dynamic_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #3 {266; CHECK-LABEL: define nofpclass(nan) float @ret_frem_dynamic_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub267; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR3]] {268; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]269; CHECK-NEXT: ret float [[FREM]]270;271 %frem = frem float %arg0, %arg1272 ret float %frem273}274 275; Missing no-subnormal on lhs276define float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero sub) %arg1) #1 {277; CHECK-LABEL: define nofpclass(nan) float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero_nosub278; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR1]] {279; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]280; CHECK-NEXT: ret float [[FREM]]281;282 %frem = frem float %arg0, %arg1283 ret float %frem284}285 286; Missing no-subnormal on lhs287define float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero) %arg1) #1 {288; CHECK-LABEL: define float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero289; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR1]] {290; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]291; CHECK-NEXT: ret float [[FREM]]292;293 %frem = frem float %arg0, %arg1294 ret float %frem295}296 297; should be able to infer noinf298define float @ret_frem_ieee_noinf__nozero(float nofpclass(inf) %arg0, float nofpclass(zero) %arg1) #0 {299; CHECK-LABEL: define float @ret_frem_ieee_noinf__nozero300; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR0]] {301; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]302; CHECK-NEXT: ret float [[FREM]]303;304 %frem = frem float %arg0, %arg1305 ret float %frem306}307 308define float @ret_frem_ieee_all__nozero(float %arg0, float nofpclass(zero) %arg1) #0 {309; CHECK-LABEL: define float @ret_frem_ieee_all__nozero310; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR0]] {311; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]312; CHECK-NEXT: ret float [[FREM]]313;314 %frem = frem float %arg0, %arg1315 ret float %frem316}317 318define float @ret_frem_ieee_noinf__all(float nofpclass(inf) %arg0, float %arg1) #0 {319; CHECK-LABEL: define float @ret_frem_ieee_noinf__all320; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {321; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]322; CHECK-NEXT: ret float [[FREM]]323;324 %frem = frem float %arg0, %arg1325 ret float %frem326}327 328define float @ret_frem_ieee_nozero__noinf(float nofpclass(zero) %arg0, float nofpclass(inf) %arg1) #0 {329; CHECK-LABEL: define float @ret_frem_ieee_nozero__noinf330; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR0]] {331; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]332; CHECK-NEXT: ret float [[FREM]]333;334 %frem = frem float %arg0, %arg1335 ret float %frem336}337 338define float @ret_frem_daz_noinf__nozero(float nofpclass(inf) %arg0, float nofpclass(zero) %arg1) #1 {339; CHECK-LABEL: define float @ret_frem_daz_noinf__nozero340; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR1]] {341; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]342; CHECK-NEXT: ret float [[FREM]]343;344 %frem = frem float %arg0, %arg1345 ret float %frem346}347 348define float @ret_frem_daz_noinf__nozero_nosub(float nofpclass(inf) %arg0, float nofpclass(zero sub) %arg1) #1 {349; CHECK-LABEL: define float @ret_frem_daz_noinf__nozero_nosub350; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(zero sub) [[ARG1:%.*]]) #[[ATTR1]] {351; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]352; CHECK-NEXT: ret float [[FREM]]353;354 %frem = frem float %arg0, %arg1355 ret float %frem356}357 358define float @ret_frem_same_operands(float %arg) #0 {359; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands360; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR0]] {361; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]362; CHECK-NEXT: ret float [[FREM]]363;364 %frem = frem float %arg, %arg365 ret float %frem366}367 368define float @ret_frem_same_operands_nosnan(float nofpclass(snan) %arg) #0 {369; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands_nosnan370; CHECK-SAME: (float nofpclass(snan) [[ARG:%.*]]) #[[ATTR0]] {371; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]372; CHECK-NEXT: ret float [[FREM]]373;374 %frem = frem float %arg, %arg375 ret float %frem376}377 378define float @ret_frem_same_operands_noqnan(float nofpclass(qnan) %arg) #0 {379; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands_noqnan380; CHECK-SAME: (float nofpclass(qnan) [[ARG:%.*]]) #[[ATTR0]] {381; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]382; CHECK-NEXT: ret float [[FREM]]383;384 %frem = frem float %arg, %arg385 ret float %frem386}387 388define float @ret_frem_same_operands_nonan(float nofpclass(nan) %arg) #0 {389; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands_nonan390; CHECK-SAME: (float nofpclass(nan) [[ARG:%.*]]) #[[ATTR0]] {391; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]392; CHECK-NEXT: ret float [[FREM]]393;394 %frem = frem float %arg, %arg395 ret float %frem396}397 398define float @ret_frem_no_neg_lhs(float nofpclass(ninf nsub nnorm) %arg0, float %arg1) #0 {399; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_frem_no_neg_lhs400; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {401; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]402; CHECK-NEXT: ret float [[FREM]]403;404 %frem = frem float %arg0, %arg1405 ret float %frem406}407 408define float @ret_frem_no_neg_rhs(float %arg0, float nofpclass(ninf nsub nnorm) %arg1) #0 {409; CHECK-LABEL: define float @ret_frem_no_neg_rhs410; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {411; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]412; CHECK-NEXT: ret float [[FREM]]413;414 %frem = frem float %arg0, %arg1415 ret float %frem416}417 418define float @ret_frem_no_neg_nzero_rhs(float %arg0, float nofpclass(ninf nsub nnorm nzero) %arg1) #0 {419; CHECK-LABEL: define float @ret_frem_no_neg_nzero_rhs420; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {421; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]422; CHECK-NEXT: ret float [[FREM]]423;424 %frem = frem float %arg0, %arg1425 ret float %frem426}427 428define float @ret_frem_no_neg(float nofpclass(ninf nsub nnorm) %arg0, float nofpclass(ninf nsub nnorm) %arg1) #0 {429; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_frem_no_neg430; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {431; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]432; CHECK-NEXT: ret float [[FREM]]433;434 %frem = frem float %arg0, %arg1435 ret float %frem436}437 438define float @ret_frem_no_neg_nzero(float nofpclass(ninf nsub nnorm nzero) %arg0, float nofpclass(ninf nsub nnorm nzero) %arg1) #0 {439; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_frem_no_neg_nzero440; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {441; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]442; CHECK-NEXT: ret float [[FREM]]443;444 %frem = frem float %arg0, %arg1445 ret float %frem446}447 448define float @ret_frem_no_neg_rhs_no_nzero(float nofpclass(ninf nsub nnorm) %arg0, float nofpclass(ninf nsub nnorm nzero) %arg1) #0 {449; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_frem_no_neg_rhs_no_nzero450; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {451; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]452; CHECK-NEXT: ret float [[FREM]]453;454 %frem = frem float %arg0, %arg1455 ret float %frem456}457 458define float @ret_frem_no_neg_no_zero_rhs(float nofpclass(ninf nsub nnorm nzero) %arg0, float nofpclass(ninf nsub nnorm zero) %arg1) #0 {459; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_frem_no_neg_no_zero_rhs460; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf zero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {461; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]462; CHECK-NEXT: ret float [[FREM]]463;464 %frem = frem float %arg0, %arg1465 ret float %frem466}467 468define float @ret_frem_no_pos_lhs(float nofpclass(pinf psub pnorm pzero) %arg0, float %arg1) #0 {469; CHECK-LABEL: define nofpclass(pinf pzero psub pnorm) float @ret_frem_no_pos_lhs470; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {471; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]472; CHECK-NEXT: ret float [[FREM]]473;474 %frem = frem float %arg0, %arg1475 ret float %frem476}477 478define float @ret_frem_no_pos_rhs(float %arg0, float nofpclass(pinf psub pnorm pzero) %arg1) #0 {479; CHECK-LABEL: define float @ret_frem_no_pos_rhs480; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(pinf pzero psub pnorm) [[ARG1:%.*]]) #[[ATTR0]] {481; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]482; CHECK-NEXT: ret float [[FREM]]483;484 %frem = frem float %arg0, %arg1485 ret float %frem486}487 488define float @ret_frem_no_pos_zero_lhs(float nofpclass(pinf psub pnorm) %arg0, float %arg1) #0 {489; CHECK-LABEL: define nofpclass(pinf psub pnorm) float @ret_frem_no_pos_zero_lhs490; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {491; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]492; CHECK-NEXT: ret float [[FREM]]493;494 %frem = frem float %arg0, %arg1495 ret float %frem496}497 498define float @ret_frem_no_pos_zero_rhs(float %arg0, float nofpclass(pinf psub pnorm) %arg1) #0 {499; CHECK-LABEL: define float @ret_frem_no_pos_zero_rhs500; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(pinf psub pnorm) [[ARG1:%.*]]) #[[ATTR0]] {501; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]502; CHECK-NEXT: ret float [[FREM]]503;504 %frem = frem float %arg0, %arg1505 ret float %frem506}507 508attributes #0 = { "denormal-fp-math"="ieee,ieee" }509attributes #1 = { "denormal-fp-math"="ieee,preserve-sign" }510attributes #2 = { "denormal-fp-math"="ieee,positive-zero" }511attributes #3 = { "denormal-fp-math"="ieee,dynamic" }512;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:513; TUNIT: {{.*}}514