473 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, i32 } @llvm.frexp.f32.i32(float)5declare { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float>)6declare { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float>)7 8define { float, i32 } @ret_frexp_f32(float %arg0) {9; CHECK-LABEL: define { float, i32 } @ret_frexp_f3210; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {11; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float [[ARG0]]) #[[ATTR7:[0-9]+]]12; CHECK-NEXT: ret { float, i32 } [[CALL]]13;14 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)15 ret { float, i32 } %call16}17 18define { float, i32 } @ret_frexp_f32_nonan(float nofpclass(nan) %arg0) {19; CHECK-LABEL: define { float, i32 } @ret_frexp_f32_nonan20; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {21; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan) [[ARG0]]) #[[ATTR7]]22; CHECK-NEXT: ret { float, i32 } [[CALL]]23;24 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)25 ret { float, i32 } %call26}27 28define float @ret_frexp_f32_0_nonan(float nofpclass(nan) %arg0) {29; CHECK-LABEL: define nofpclass(nan sub) float @ret_frexp_f32_0_nonan30; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {31; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan) [[ARG0]]) #[[ATTR7]]32; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 033; CHECK-NEXT: ret float [[CALL_0]]34;35 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)36 %call.0 = extractvalue { float, i32 } %call, 037 ret float %call.038}39 40define float @ret_frexp_f32_0_nosnan(float nofpclass(snan) %arg0) {41; CHECK-LABEL: define nofpclass(snan sub) float @ret_frexp_f32_0_nosnan42; CHECK-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1]] {43; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(snan) [[ARG0]]) #[[ATTR7]]44; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 045; CHECK-NEXT: ret float [[CALL_0]]46;47 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)48 %call.0 = extractvalue { float, i32 } %call, 049 ret float %call.050}51 52define float @ret_frexp_f32_0_noqnan(float nofpclass(qnan) %arg0) {53; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_noqnan54; CHECK-SAME: (float nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR1]] {55; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(qnan) [[ARG0]]) #[[ATTR7]]56; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 057; CHECK-NEXT: ret float [[CALL_0]]58;59 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)60 %call.0 = extractvalue { float, i32 } %call, 061 ret float %call.062}63 64define i32 @ret_frexp_f32_1_nonan(float nofpclass(nan) %arg0) {65; CHECK-LABEL: define i32 @ret_frexp_f32_1_nonan66; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {67; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan) [[ARG0]]) #[[ATTR7]]68; CHECK-NEXT: [[CALL_1:%.*]] = extractvalue { float, i32 } [[CALL]], 169; CHECK-NEXT: ret i32 [[CALL_1]]70;71 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)72 %call.1 = extractvalue { float, i32 } %call, 173 ret i32 %call.174}75 76define <2 x float> @ret_frexp_v2f32_0_nonan(<2 x float> nofpclass(nan) %arg0) {77; CHECK-LABEL: define nofpclass(nan sub) <2 x float> @ret_frexp_v2f32_0_nonan78; CHECK-SAME: (<2 x float> nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {79; CHECK-NEXT: [[CALL:%.*]] = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> nofpclass(nan) [[ARG0]]) #[[ATTR7]]80; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { <2 x float>, <2 x i32> } [[CALL]], 081; CHECK-NEXT: ret <2 x float> [[CALL_0]]82;83 %call = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %arg0)84 %call.0 = extractvalue { <2 x float>, <2 x i32> } %call, 085 ret <2 x float> %call.086}87 88define <2 x i32> @ret_frexp_v2f32_1_nonan(<2 x float> nofpclass(nan) %arg0) {89; CHECK-LABEL: define <2 x i32> @ret_frexp_v2f32_1_nonan90; CHECK-SAME: (<2 x float> nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {91; CHECK-NEXT: [[CALL:%.*]] = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> nofpclass(nan) [[ARG0]]) #[[ATTR7]]92; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { <2 x float>, <2 x i32> } [[CALL]], 193; CHECK-NEXT: ret <2 x i32> [[CALL_0]]94;95 %call = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %arg0)96 %call.0 = extractvalue { <2 x float>, <2 x i32> } %call, 197 ret <2 x i32> %call.098}99 100define float @ret_frexp_v4f32_0_nonan_elt1(<4 x float> nofpclass(nan) %arg0) {101; CHECK-LABEL: define nofpclass(nan sub) float @ret_frexp_v4f32_0_nonan_elt1102; CHECK-SAME: (<4 x float> nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {103; CHECK-NEXT: [[CALL:%.*]] = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> nofpclass(nan) [[ARG0]]) #[[ATTR7]]104; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { <4 x float>, <4 x i32> } [[CALL]], 0105; CHECK-NEXT: [[ELT_2:%.*]] = extractelement <4 x float> [[CALL_0]], i32 2106; CHECK-NEXT: ret float [[ELT_2]]107;108 %call = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %arg0)109 %call.0 = extractvalue { <4 x float>, <4 x i32> } %call, 0110 %elt.2 = extractelement <4 x float> %call.0, i32 2111 ret float %elt.2112}113 114define float @ret_frexp_f32_0_nopos_nopzero(float nofpclass(pinf psub pnorm pzero) %arg0) {115; CHECK-LABEL: define nofpclass(pinf pzero sub pnorm) float @ret_frexp_f32_0_nopos_nopzero116; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {117; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pinf pzero psub pnorm) [[ARG0]]) #[[ATTR7]]118; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0119; CHECK-NEXT: ret float [[CALL_0]]120;121 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)122 %call.0 = extractvalue { float, i32 } %call, 0123 ret float %call.0124}125 126define float @ret_frexp_f32_0_nopos_nopzero_nonan(float nofpclass(pinf psub pnorm pzero nan) %arg0) {127; CHECK-LABEL: define nofpclass(nan pinf pzero sub pnorm) float @ret_frexp_f32_0_nopos_nopzero_nonan128; CHECK-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {129; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan pinf pzero psub pnorm) [[ARG0]]) #[[ATTR7]]130; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0131; CHECK-NEXT: ret float [[CALL_0]]132;133 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)134 %call.0 = extractvalue { float, i32 } %call, 0135 ret float %call.0136}137 138define float @ret_frexp_f32_0_nopos(float nofpclass(pinf psub pnorm) %arg0) {139; CHECK-LABEL: define nofpclass(pinf sub) float @ret_frexp_f32_0_nopos140; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {141; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pinf psub pnorm) [[ARG0]]) #[[ATTR7]]142; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0143; CHECK-NEXT: ret float [[CALL_0]]144;145 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)146 %call.0 = extractvalue { float, i32 } %call, 0147 ret float %call.0148}149 150define float @ret_frexp_f32_0_nopos_nonan(float nofpclass(pinf psub pnorm nan) %arg0) {151; CHECK-LABEL: define nofpclass(nan pinf sub) float @ret_frexp_f32_0_nopos_nonan152; CHECK-SAME: (float nofpclass(nan pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {153; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan pinf psub pnorm) [[ARG0]]) #[[ATTR7]]154; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0155; CHECK-NEXT: ret float [[CALL_0]]156;157 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)158 %call.0 = extractvalue { float, i32 } %call, 0159 ret float %call.0160}161 162define float @ret_frexp_f32_0_nopos_nozero(float nofpclass(pinf psub pnorm zero) %arg0) {163; CHECK-LABEL: define nofpclass(pinf zero sub pnorm) float @ret_frexp_f32_0_nopos_nozero164; CHECK-SAME: (float nofpclass(pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {165; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pinf zero psub pnorm) [[ARG0]]) #[[ATTR7]]166; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0167; CHECK-NEXT: ret float [[CALL_0]]168;169 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)170 %call.0 = extractvalue { float, i32 } %call, 0171 ret float %call.0172}173 174define float @ret_frexp_f32_0_noneg_nonzero(float nofpclass(ninf nsub nnorm nzero) %arg0) {175; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) float @ret_frexp_f32_0_noneg_nonzero176; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {177; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR7]]178; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0179; CHECK-NEXT: ret float [[CALL_0]]180;181 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)182 %call.0 = extractvalue { float, i32 } %call, 0183 ret float %call.0184}185 186define float @ret_frexp_f32_0_noneg_nonzero_nonan(float nofpclass(ninf nsub nnorm nzero nan) %arg0) {187; CHECK-LABEL: define nofpclass(nan ninf nzero sub nnorm) float @ret_frexp_f32_0_noneg_nonzero_nonan188; CHECK-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {189; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR7]]190; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0191; CHECK-NEXT: ret float [[CALL_0]]192;193 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)194 %call.0 = extractvalue { float, i32 } %call, 0195 ret float %call.0196}197 198define float @ret_frexp_f32_0_noneg(float nofpclass(ninf nsub nnorm) %arg0) {199; CHECK-LABEL: define nofpclass(ninf sub) float @ret_frexp_f32_0_noneg200; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {201; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(ninf nsub nnorm) [[ARG0]]) #[[ATTR7]]202; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0203; CHECK-NEXT: ret float [[CALL_0]]204;205 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)206 %call.0 = extractvalue { float, i32 } %call, 0207 ret float %call.0208}209 210define float @ret_frexp_f32_0_noneg_nonan(float nofpclass(ninf nsub nnorm nan) %arg0) {211; CHECK-LABEL: define nofpclass(nan ninf sub) float @ret_frexp_f32_0_noneg_nonan212; CHECK-SAME: (float nofpclass(nan ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {213; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan ninf nsub nnorm) [[ARG0]]) #[[ATTR7]]214; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0215; CHECK-NEXT: ret float [[CALL_0]]216;217 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)218 %call.0 = extractvalue { float, i32 } %call, 0219 ret float %call.0220}221 222define float @ret_frexp_f32_0_noneg_nozero(float nofpclass(ninf nsub nnorm nzero) %arg0) {223; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) float @ret_frexp_f32_0_noneg_nozero224; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {225; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR7]]226; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0227; CHECK-NEXT: ret float [[CALL_0]]228;229 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)230 %call.0 = extractvalue { float, i32 } %call, 0231 ret float %call.0232}233 234define float @ret_frexp_f32_0_nopzero(float nofpclass(pzero) %arg0) {235; CHECK-LABEL: define nofpclass(pzero sub) float @ret_frexp_f32_0_nopzero236; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR1]] {237; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pzero) [[ARG0]]) #[[ATTR7]]238; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0239; CHECK-NEXT: ret float [[CALL_0]]240;241 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)242 %call.0 = extractvalue { float, i32 } %call, 0243 ret float %call.0244}245 246define float @ret_frexp_f32_0_nonzero(float nofpclass(nzero) %arg0) {247; CHECK-LABEL: define nofpclass(nzero sub) float @ret_frexp_f32_0_nonzero248; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR1]] {249; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nzero) [[ARG0]]) #[[ATTR7]]250; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0251; CHECK-NEXT: ret float [[CALL_0]]252;253 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)254 %call.0 = extractvalue { float, i32 } %call, 0255 ret float %call.0256}257 258define float @ret_frexp_f32_0_nozero(float nofpclass(zero) %arg0) {259; CHECK-LABEL: define nofpclass(zero sub) float @ret_frexp_f32_0_nozero260; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]]) #[[ATTR1]] {261; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(zero) [[ARG0]]) #[[ATTR7]]262; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0263; CHECK-NEXT: ret float [[CALL_0]]264;265 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)266 %call.0 = extractvalue { float, i32 } %call, 0267 ret float %call.0268}269 270define float @ret_frexp_f32_0_nopinf(float nofpclass(pinf) %arg0) {271; CHECK-LABEL: define nofpclass(pinf sub) float @ret_frexp_f32_0_nopinf272; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {273; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pinf) [[ARG0]]) #[[ATTR7]]274; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0275; CHECK-NEXT: ret float [[CALL_0]]276;277 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)278 %call.0 = extractvalue { float, i32 } %call, 0279 ret float %call.0280}281 282define float @ret_frexp_f32_0_noninf(float nofpclass(ninf) %arg0) {283; CHECK-LABEL: define nofpclass(ninf sub) float @ret_frexp_f32_0_noninf284; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {285; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(ninf) [[ARG0]]) #[[ATTR7]]286; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0287; CHECK-NEXT: ret float [[CALL_0]]288;289 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)290 %call.0 = extractvalue { float, i32 } %call, 0291 ret float %call.0292}293 294define float @ret_frexp_f32_0_noinf(float nofpclass(inf) %arg0) {295; CHECK-LABEL: define nofpclass(inf sub) float @ret_frexp_f32_0_noinf296; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {297; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(inf) [[ARG0]]) #[[ATTR7]]298; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0299; CHECK-NEXT: ret float [[CALL_0]]300;301 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)302 %call.0 = extractvalue { float, i32 } %call, 0303 ret float %call.0304}305 306define float @ret_frexp_f32_0_nozero_nonan(float nofpclass(zero nan) %arg0) {307; CHECK-LABEL: define nofpclass(nan zero sub) float @ret_frexp_f32_0_nozero_nonan308; CHECK-SAME: (float nofpclass(nan zero) [[ARG0:%.*]]) #[[ATTR1]] {309; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan zero) [[ARG0]]) #[[ATTR7]]310; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0311; CHECK-NEXT: ret float [[CALL_0]]312;313 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)314 %call.0 = extractvalue { float, i32 } %call, 0315 ret float %call.0316}317 318define float @ret_frexp_f32_0_nozero_noinf(float nofpclass(zero inf) %arg0) {319; CHECK-LABEL: define nofpclass(inf zero sub) float @ret_frexp_f32_0_nozero_noinf320; CHECK-SAME: (float nofpclass(inf zero) [[ARG0:%.*]]) #[[ATTR1]] {321; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(inf zero) [[ARG0]]) #[[ATTR7]]322; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0323; CHECK-NEXT: ret float [[CALL_0]]324;325 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)326 %call.0 = extractvalue { float, i32 } %call, 0327 ret float %call.0328}329 330define float @ret_frexp_f32_0_nozero_nonan_noinf(float nofpclass(zero nan inf) %arg0) {331; CHECK-LABEL: define nofpclass(nan inf zero sub) float @ret_frexp_f32_0_nozero_nonan_noinf332; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]]) #[[ATTR1]] {333; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nan inf zero) [[ARG0]]) #[[ATTR7]]334; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0335; CHECK-NEXT: ret float [[CALL_0]]336;337 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)338 %call.0 = extractvalue { float, i32 } %call, 0339 ret float %call.0340}341 342define float @ret_frexp_f32_0_nonzero_ftz_daz(float nofpclass(nzero) %arg0) #1 {343; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_nonzero_ftz_daz344; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR2:[0-9]+]] {345; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nzero) [[ARG0]]) #[[ATTR7]]346; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0347; CHECK-NEXT: ret float [[CALL_0]]348;349 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)350 %call.0 = extractvalue { float, i32 } %call, 0351 ret float %call.0352}353 354define float @ret_frexp_f32_0_nonzero_ftpz_dapz(float nofpclass(nzero) %arg0) #2 {355; CHECK-LABEL: define nofpclass(nzero sub) float @ret_frexp_f32_0_nonzero_ftpz_dapz356; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR3:[0-9]+]] {357; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nzero) [[ARG0]]) #[[ATTR7]]358; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0359; CHECK-NEXT: ret float [[CALL_0]]360;361 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)362 %call.0 = extractvalue { float, i32 } %call, 0363 ret float %call.0364}365 366define float @ret_frexp_f32_0_nonzero_dynamic_dynamic(float nofpclass(nzero) %arg0) #3 {367; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_nonzero_dynamic_dynamic368; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR4:[0-9]+]] {369; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nzero) [[ARG0]]) #[[ATTR7]]370; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0371; CHECK-NEXT: ret float [[CALL_0]]372;373 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)374 %call.0 = extractvalue { float, i32 } %call, 0375 ret float %call.0376}377 378define float @ret_frexp_f32_0_nonzero_ieee_daz(float nofpclass(nzero) %arg0) #4 {379; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_nonzero_ieee_daz380; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR5:[0-9]+]] {381; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nzero) [[ARG0]]) #[[ATTR7]]382; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0383; CHECK-NEXT: ret float [[CALL_0]]384;385 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)386 %call.0 = extractvalue { float, i32 } %call, 0387 ret float %call.0388}389 390define float @ret_frexp_f32_0_nonzero_daz_ieee(float nofpclass(nzero) %arg0) #5 {391; CHECK-LABEL: define nofpclass(nzero sub) float @ret_frexp_f32_0_nonzero_daz_ieee392; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR6:[0-9]+]] {393; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(nzero) [[ARG0]]) #[[ATTR7]]394; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0395; CHECK-NEXT: ret float [[CALL_0]]396;397 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)398 %call.0 = extractvalue { float, i32 } %call, 0399 ret float %call.0400}401 402define float @ret_frexp_f32_0_nopzero_ftz_daz(float nofpclass(pzero) %arg0) #1 {403; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_nopzero_ftz_daz404; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR2]] {405; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pzero) [[ARG0]]) #[[ATTR7]]406; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0407; CHECK-NEXT: ret float [[CALL_0]]408;409 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)410 %call.0 = extractvalue { float, i32 } %call, 0411 ret float %call.0412}413 414define float @ret_frexp_f32_0_nopzero_ftpz_dapz(float nofpclass(pzero) %arg0) #2 {415; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_nopzero_ftpz_dapz416; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR3]] {417; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pzero) [[ARG0]]) #[[ATTR7]]418; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0419; CHECK-NEXT: ret float [[CALL_0]]420;421 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)422 %call.0 = extractvalue { float, i32 } %call, 0423 ret float %call.0424}425 426define float @ret_frexp_f32_0_nopzero_dynamic_dynamic(float nofpclass(pzero) %arg0) #3 {427; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_nopzero_dynamic_dynamic428; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR4]] {429; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pzero) [[ARG0]]) #[[ATTR7]]430; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0431; CHECK-NEXT: ret float [[CALL_0]]432;433 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)434 %call.0 = extractvalue { float, i32 } %call, 0435 ret float %call.0436}437 438define float @ret_frexp_f32_0_nopzero_ieee_daz(float nofpclass(pzero) %arg0) #4 {439; CHECK-LABEL: define nofpclass(sub) float @ret_frexp_f32_0_nopzero_ieee_daz440; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR5]] {441; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pzero) [[ARG0]]) #[[ATTR7]]442; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0443; CHECK-NEXT: ret float [[CALL_0]]444;445 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)446 %call.0 = extractvalue { float, i32 } %call, 0447 ret float %call.0448}449 450define float @ret_frexp_f32_0_nopzero_daz_ieee(float nofpclass(pzero) %arg0) #5 {451; CHECK-LABEL: define nofpclass(pzero sub) float @ret_frexp_f32_0_nopzero_daz_ieee452; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR6]] {453; CHECK-NEXT: [[CALL:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float nofpclass(pzero) [[ARG0]]) #[[ATTR7]]454; CHECK-NEXT: [[CALL_0:%.*]] = extractvalue { float, i32 } [[CALL]], 0455; CHECK-NEXT: ret float [[CALL_0]]456;457 %call = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)458 %call.0 = extractvalue { float, i32 } %call, 0459 ret float %call.0460}461 462 463attributes #0 = { "denormal-fp-math"="ieee,ieee" }464attributes #1 = { "denormal-fp-math"="preserve-sign,preserve-sign" }465attributes #2 = { "denormal-fp-math"="positive-zero,positive-zero" }466attributes #3 = { "denormal-fp-math"="dynamic,dynamic" }467attributes #4 = { "denormal-fp-math"="ieee,preserve-sign" }468attributes #5 = { "denormal-fp-math"="preserve-sign,ieee" }469 470 471;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:472; TUNIT: {{.*}}473