338 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.fptrunc.round.f32.f64(double, metadata)5 6define float @ret_fptrunc(double %arg0) {7; CHECK-LABEL: define float @ret_fptrunc8; CHECK-SAME: (double [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {9; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float10; CHECK-NEXT: ret float [[EXT]]11;12 %ext = fptrunc double %arg0 to float13 ret float %ext14}15 16define float @ret_fptrunc_nonan(double nofpclass(nan) %arg0) {17; CHECK-LABEL: define nofpclass(nan) float @ret_fptrunc_nonan18; CHECK-SAME: (double nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {19; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float20; CHECK-NEXT: ret float [[EXT]]21;22 %ext = fptrunc double %arg0 to float23 ret float %ext24}25 26define float @ret_fptrunc_noqnan(double nofpclass(qnan) %arg0) {27; CHECK-LABEL: define float @ret_fptrunc_noqnan28; CHECK-SAME: (double nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR1]] {29; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float30; CHECK-NEXT: ret float [[EXT]]31;32 %ext = fptrunc double %arg0 to float33 ret float %ext34}35 36define float @ret_fptrunc_nosnan(double nofpclass(snan) %arg0) {37; CHECK-LABEL: define nofpclass(snan) float @ret_fptrunc_nosnan38; CHECK-SAME: (double nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1]] {39; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float40; CHECK-NEXT: ret float [[EXT]]41;42 %ext = fptrunc double %arg0 to float43 ret float %ext44}45 46define float @ret_fptrunc_noinf(double nofpclass(inf) %arg0) {47; CHECK-LABEL: define float @ret_fptrunc_noinf48; CHECK-SAME: (double nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {49; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float50; CHECK-NEXT: ret float [[EXT]]51;52 %ext = fptrunc double %arg0 to float53 ret float %ext54}55 56define float @ret_fptrunc_nopinf(double nofpclass(pinf) %arg0) {57; CHECK-LABEL: define float @ret_fptrunc_nopinf58; CHECK-SAME: (double nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {59; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float60; CHECK-NEXT: ret float [[EXT]]61;62 %ext = fptrunc double %arg0 to float63 ret float %ext64}65 66define float @ret_fptrunc_noninf(double nofpclass(ninf) %arg0) {67; CHECK-LABEL: define float @ret_fptrunc_noninf68; CHECK-SAME: (double nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {69; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float70; CHECK-NEXT: ret float [[EXT]]71;72 %ext = fptrunc double %arg0 to float73 ret float %ext74}75 76define float @ret_fptrunc_nozero(double nofpclass(zero) %arg0) {77; CHECK-LABEL: define float @ret_fptrunc_nozero78; CHECK-SAME: (double nofpclass(zero) [[ARG0:%.*]]) #[[ATTR1]] {79; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float80; CHECK-NEXT: ret float [[EXT]]81;82 %ext = fptrunc double %arg0 to float83 ret float %ext84}85 86define float @ret_fptrunc_nopzero(double nofpclass(pzero) %arg0) {87; CHECK-LABEL: define float @ret_fptrunc_nopzero88; CHECK-SAME: (double nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR1]] {89; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float90; CHECK-NEXT: ret float [[EXT]]91;92 %ext = fptrunc double %arg0 to float93 ret float %ext94}95 96define float @ret_fptrunc_nonzero(double nofpclass(nzero) %arg0) {97; CHECK-LABEL: define float @ret_fptrunc_nonzero98; CHECK-SAME: (double nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR1]] {99; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float100; CHECK-NEXT: ret float [[EXT]]101;102 %ext = fptrunc double %arg0 to float103 ret float %ext104}105 106define float @ret_fptrunc_nonan_noinf(double nofpclass(nan inf) %arg0) {107; CHECK-LABEL: define nofpclass(nan) float @ret_fptrunc_nonan_noinf108; CHECK-SAME: (double nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR1]] {109; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float110; CHECK-NEXT: ret float [[EXT]]111;112 %ext = fptrunc double %arg0 to float113 ret float %ext114}115 116define float @ret_fptrunc_nosub(double nofpclass(sub) %arg0) {117; CHECK-LABEL: define float @ret_fptrunc_nosub118; CHECK-SAME: (double nofpclass(sub) [[ARG0:%.*]]) #[[ATTR1]] {119; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float120; CHECK-NEXT: ret float [[EXT]]121;122 %ext = fptrunc double %arg0 to float123 ret float %ext124}125 126define float @ret_fptrunc_nonorm(double nofpclass(norm) %arg0) {127; CHECK-LABEL: define float @ret_fptrunc_nonorm128; CHECK-SAME: (double nofpclass(norm) [[ARG0:%.*]]) #[[ATTR1]] {129; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float130; CHECK-NEXT: ret float [[EXT]]131;132 %ext = fptrunc double %arg0 to float133 ret float %ext134}135 136define float @ret_fptrunc_posonly(double nofpclass(ninf nnorm nsub nzero) %arg0) {137; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_fptrunc_posonly138; CHECK-SAME: (double nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {139; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float140; CHECK-NEXT: ret float [[EXT]]141;142 %ext = fptrunc double %arg0 to float143 ret float %ext144}145 146define float @ret_fptrunc_posonly_zero(double nofpclass(ninf nnorm nsub) %arg0) {147; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_fptrunc_posonly_zero148; CHECK-SAME: (double nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {149; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float150; CHECK-NEXT: ret float [[EXT]]151;152 %ext = fptrunc double %arg0 to float153 ret float %ext154}155 156define float @ret_fptrunc_posonly_zero_nan(double nofpclass(ninf nnorm nsub nan) %arg0) {157; CHECK-LABEL: define nofpclass(nan ninf nsub nnorm) float @ret_fptrunc_posonly_zero_nan158; CHECK-SAME: (double nofpclass(nan ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {159; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float160; CHECK-NEXT: ret float [[EXT]]161;162 %ext = fptrunc double %arg0 to float163 ret float %ext164}165 166define float @ret_fptrunc_posonly_nan(double nofpclass(ninf nnorm nsub nzero nan) %arg0) {167; CHECK-LABEL: define nofpclass(nan ninf nsub nnorm) float @ret_fptrunc_posonly_nan168; CHECK-SAME: (double nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {169; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float170; CHECK-NEXT: ret float [[EXT]]171;172 %ext = fptrunc double %arg0 to float173 ret float %ext174}175 176define float @ret_fptrunc_negonly(double nofpclass(pinf pnorm psub pzero) %arg0) {177; CHECK-LABEL: define float @ret_fptrunc_negonly178; CHECK-SAME: (double nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {179; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float180; CHECK-NEXT: ret float [[EXT]]181;182 %ext = fptrunc double %arg0 to float183 ret float %ext184}185 186define float @ret_fptrunc_negonly_zero(double nofpclass(pinf pnorm psub) %arg0) {187; CHECK-LABEL: define float @ret_fptrunc_negonly_zero188; CHECK-SAME: (double nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {189; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float190; CHECK-NEXT: ret float [[EXT]]191;192 %ext = fptrunc double %arg0 to float193 ret float %ext194}195 196define float @ret_fptrunc_negonly_zero_nan(double nofpclass(pinf pnorm psub nan) %arg0) {197; CHECK-LABEL: define nofpclass(nan) float @ret_fptrunc_negonly_zero_nan198; CHECK-SAME: (double nofpclass(nan pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {199; CHECK-NEXT: [[EXT:%.*]] = fptrunc double [[ARG0]] to float200; CHECK-NEXT: ret float [[EXT]]201;202 %ext = fptrunc double %arg0 to float203 ret float %ext204}205 206define float @ret_fptrunc_round(double %arg0) {207; CHECK-LABEL: define float @ret_fptrunc_round208; CHECK-SAME: (double [[ARG0:%.*]]) #[[ATTR1]] {209; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double [[ARG0]], metadata !"round.downward") #[[ATTR2:[0-9]+]]210; CHECK-NEXT: ret float [[EXT]]211;212 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")213 ret float %ext214}215 216define float @ret_fptrunc_round_nonan(double nofpclass(nan) %arg0) {217; CHECK-LABEL: define nofpclass(nan) float @ret_fptrunc_round_nonan218; CHECK-SAME: (double nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {219; CHECK-NEXT: [[EXT:%.*]] = call nofpclass(nan) float @llvm.fptrunc.round.f32.f64(double nofpclass(nan) [[ARG0]], metadata !"round.downward") #[[ATTR2]]220; CHECK-NEXT: ret float [[EXT]]221;222 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")223 ret float %ext224}225 226define float @ret_fptrunc_round_noqnan(double nofpclass(qnan) %arg0) {227; CHECK-LABEL: define float @ret_fptrunc_round_noqnan228; CHECK-SAME: (double nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR1]] {229; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(qnan) [[ARG0]], metadata !"round.downward") #[[ATTR2]]230; CHECK-NEXT: ret float [[EXT]]231;232 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")233 ret float %ext234}235 236define float @ret_fptrunc_round_nosnan(double nofpclass(snan) %arg0) {237; CHECK-LABEL: define nofpclass(snan) float @ret_fptrunc_round_nosnan238; CHECK-SAME: (double nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1]] {239; CHECK-NEXT: [[EXT:%.*]] = call nofpclass(snan) float @llvm.fptrunc.round.f32.f64(double nofpclass(snan) [[ARG0]], metadata !"round.downward") #[[ATTR2]]240; CHECK-NEXT: ret float [[EXT]]241;242 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")243 ret float %ext244}245 246define float @ret_fptrunc_round_noinf(double nofpclass(inf) %arg0) {247; CHECK-LABEL: define float @ret_fptrunc_round_noinf248; CHECK-SAME: (double nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {249; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(inf) [[ARG0]], metadata !"round.downward") #[[ATTR2]]250; CHECK-NEXT: ret float [[EXT]]251;252 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")253 ret float %ext254}255 256define float @ret_fptrunc_round_nopinf(double nofpclass(pinf) %arg0) {257; CHECK-LABEL: define float @ret_fptrunc_round_nopinf258; CHECK-SAME: (double nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {259; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(pinf) [[ARG0]], metadata !"round.downward") #[[ATTR2]]260; CHECK-NEXT: ret float [[EXT]]261;262 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")263 ret float %ext264}265 266define float @ret_fptrunc_round_noninf(double nofpclass(ninf) %arg0) {267; CHECK-LABEL: define float @ret_fptrunc_round_noninf268; CHECK-SAME: (double nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {269; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(ninf) [[ARG0]], metadata !"round.downward") #[[ATTR2]]270; CHECK-NEXT: ret float [[EXT]]271;272 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")273 ret float %ext274}275 276define float @ret_fptrunc_round_nozero(double nofpclass(zero) %arg0) {277; CHECK-LABEL: define float @ret_fptrunc_round_nozero278; CHECK-SAME: (double nofpclass(zero) [[ARG0:%.*]]) #[[ATTR1]] {279; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(zero) [[ARG0]], metadata !"round.downward") #[[ATTR2]]280; CHECK-NEXT: ret float [[EXT]]281;282 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")283 ret float %ext284}285 286define float @ret_fptrunc_round_nopzero(double nofpclass(pzero) %arg0) {287; CHECK-LABEL: define float @ret_fptrunc_round_nopzero288; CHECK-SAME: (double nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR1]] {289; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(pzero) [[ARG0]], metadata !"round.downward") #[[ATTR2]]290; CHECK-NEXT: ret float [[EXT]]291;292 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")293 ret float %ext294}295 296define float @ret_fptrunc_round_nonzero(double nofpclass(nzero) %arg0) {297; CHECK-LABEL: define float @ret_fptrunc_round_nonzero298; CHECK-SAME: (double nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR1]] {299; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(nzero) [[ARG0]], metadata !"round.downward") #[[ATTR2]]300; CHECK-NEXT: ret float [[EXT]]301;302 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")303 ret float %ext304}305 306define float @ret_fptrunc_round_nonan_noinf(double nofpclass(nan inf) %arg0) {307; CHECK-LABEL: define nofpclass(nan) float @ret_fptrunc_round_nonan_noinf308; CHECK-SAME: (double nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR1]] {309; CHECK-NEXT: [[EXT:%.*]] = call nofpclass(nan) float @llvm.fptrunc.round.f32.f64(double nofpclass(nan inf) [[ARG0]], metadata !"round.downward") #[[ATTR2]]310; CHECK-NEXT: ret float [[EXT]]311;312 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")313 ret float %ext314}315 316define float @ret_fptrunc_round_nosub(double nofpclass(sub) %arg0) {317; CHECK-LABEL: define float @ret_fptrunc_round_nosub318; CHECK-SAME: (double nofpclass(sub) [[ARG0:%.*]]) #[[ATTR1]] {319; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(sub) [[ARG0]], metadata !"round.downward") #[[ATTR2]]320; CHECK-NEXT: ret float [[EXT]]321;322 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")323 ret float %ext324}325 326define float @ret_fptrunc_round_nonorm(double nofpclass(norm) %arg0) {327; CHECK-LABEL: define float @ret_fptrunc_round_nonorm328; CHECK-SAME: (double nofpclass(norm) [[ARG0:%.*]]) #[[ATTR1]] {329; CHECK-NEXT: [[EXT:%.*]] = call float @llvm.fptrunc.round.f32.f64(double nofpclass(norm) [[ARG0]], metadata !"round.downward") #[[ATTR2]]330; CHECK-NEXT: ret float [[EXT]]331;332 %ext = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")333 ret float %ext334}335 336;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:337; TUNIT: {{.*}}338