1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK 3; RUN: opt -aa-pipeline=basic-aa -passes=attributor-light -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=LIGHT 4 5declare float @llvm.round.f32(float) 6declare ppc_fp128 @llvm.round.ppcf128(ppc_fp128) 7 8define float @ret_round(float %arg0) { 9; CHECK-LABEL: define nofpclass(sub) float @ret_round 10; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] { 11; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float [[ARG0]]) #[[ATTR2:[0-9]+]] 12; CHECK-NEXT: ret float [[CALL]] 13; 14; LIGHT-LABEL: define float @ret_round 15; LIGHT-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] { 16; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float [[ARG0]]) #[[ATTR2:[0-9]+]] 17; LIGHT-NEXT: ret float [[CALL]] 18; 19 %call = call float @llvm.round.f32(float %arg0) 20 ret float %call 21} 22 23define float @ret_round_noinf(float nofpclass(inf) %arg0) { 24; CHECK-LABEL: define nofpclass(inf sub) float @ret_round_noinf 25; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] { 26; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf sub) float @llvm.round.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]] 27; CHECK-NEXT: ret float [[CALL]] 28; 29; LIGHT-LABEL: define float @ret_round_noinf 30; LIGHT-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] { 31; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]] 32; LIGHT-NEXT: ret float [[CALL]] 33; 34 %call = call float @llvm.round.f32(float %arg0) 35 ret float %call 36} 37 38define float @ret_round_nopinf(float nofpclass(pinf) %arg0) { 39; CHECK-LABEL: define nofpclass(pinf sub) float @ret_round_nopinf 40; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] { 41; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(pinf sub) float @llvm.round.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]] 42; CHECK-NEXT: ret float [[CALL]] 43; 44; LIGHT-LABEL: define float @ret_round_nopinf 45; LIGHT-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] { 46; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]] 47; LIGHT-NEXT: ret float [[CALL]] 48; 49 %call = call float @llvm.round.f32(float %arg0) 50 ret float %call 51} 52 53define float @ret_round_noninf(float nofpclass(ninf) %arg0) { 54; CHECK-LABEL: define nofpclass(ninf sub) float @ret_round_noninf 55; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] { 56; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(ninf sub) float @llvm.round.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]] 57; CHECK-NEXT: ret float [[CALL]] 58; 59; LIGHT-LABEL: define float @ret_round_noninf 60; LIGHT-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] { 61; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]] 62; LIGHT-NEXT: ret float [[CALL]] 63; 64 %call = call float @llvm.round.f32(float %arg0) 65 ret float %call 66} 67 68define float @ret_round_nonan(float nofpclass(nan) %arg0) { 69; CHECK-LABEL: define nofpclass(nan sub) float @ret_round_nonan 70; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] { 71; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan sub) float @llvm.round.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]] 72; CHECK-NEXT: ret float [[CALL]] 73; 74; LIGHT-LABEL: define float @ret_round_nonan 75; LIGHT-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] { 76; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]] 77; LIGHT-NEXT: ret float [[CALL]] 78; 79 %call = call float @llvm.round.f32(float %arg0) 80 ret float %call 81} 82 83define float @ret_round_noqnan(float nofpclass(qnan) %arg0) { 84; CHECK-LABEL: define nofpclass(sub) float @ret_round_noqnan 85; CHECK-SAME: (float nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR1]] { 86; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(qnan) [[ARG0]]) #[[ATTR2]] 87; CHECK-NEXT: ret float [[CALL]] 88; 89; LIGHT-LABEL: define float @ret_round_noqnan 90; LIGHT-SAME: (float nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR1]] { 91; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(qnan) [[ARG0]]) #[[ATTR2]] 92; LIGHT-NEXT: ret float [[CALL]] 93; 94 %call = call float @llvm.round.f32(float %arg0) 95 ret float %call 96} 97 98define float @ret_round_nosnan(float nofpclass(snan) %arg0) { 99; CHECK-LABEL: define nofpclass(snan sub) float @ret_round_nosnan 100; CHECK-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1]] { 101; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.round.f32(float nofpclass(snan) [[ARG0]]) #[[ATTR2]] 102; CHECK-NEXT: ret float [[CALL]] 103; 104; LIGHT-LABEL: define float @ret_round_nosnan 105; LIGHT-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1]] { 106; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(snan) [[ARG0]]) #[[ATTR2]] 107; LIGHT-NEXT: ret float [[CALL]] 108; 109 %call = call float @llvm.round.f32(float %arg0) 110 ret float %call 111} 112 113define float @ret_round_nozero(float nofpclass(zero) %arg0) { 114; CHECK-LABEL: define nofpclass(sub) float @ret_round_nozero 115; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]]) #[[ATTR1]] { 116; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(zero) [[ARG0]]) #[[ATTR2]] 117; CHECK-NEXT: ret float [[CALL]] 118; 119; LIGHT-LABEL: define float @ret_round_nozero 120; LIGHT-SAME: (float nofpclass(zero) [[ARG0:%.*]]) #[[ATTR1]] { 121; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(zero) [[ARG0]]) #[[ATTR2]] 122; LIGHT-NEXT: ret float [[CALL]] 123; 124 %call = call float @llvm.round.f32(float %arg0) 125 ret float %call 126} 127 128define float @ret_round_nopzero(float nofpclass(pzero) %arg0) { 129; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopzero 130; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR1]] { 131; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(pzero) [[ARG0]]) #[[ATTR2]] 132; CHECK-NEXT: ret float [[CALL]] 133; 134; LIGHT-LABEL: define float @ret_round_nopzero 135; LIGHT-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR1]] { 136; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pzero) [[ARG0]]) #[[ATTR2]] 137; LIGHT-NEXT: ret float [[CALL]] 138; 139 %call = call float @llvm.round.f32(float %arg0) 140 ret float %call 141} 142 143define float @ret_round_nonzero(float nofpclass(nzero) %arg0) { 144; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonzero 145; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR1]] { 146; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nzero) [[ARG0]]) #[[ATTR2]] 147; CHECK-NEXT: ret float [[CALL]] 148; 149; LIGHT-LABEL: define float @ret_round_nonzero 150; LIGHT-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR1]] { 151; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nzero) [[ARG0]]) #[[ATTR2]] 152; LIGHT-NEXT: ret float [[CALL]] 153; 154 %call = call float @llvm.round.f32(float %arg0) 155 ret float %call 156} 157 158define float @ret_round_nonorm(float nofpclass(norm) %arg0) { 159; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonorm 160; CHECK-SAME: (float nofpclass(norm) [[ARG0:%.*]]) #[[ATTR1]] { 161; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(norm) [[ARG0]]) #[[ATTR2]] 162; CHECK-NEXT: ret float [[CALL]] 163; 164; LIGHT-LABEL: define float @ret_round_nonorm 165; LIGHT-SAME: (float nofpclass(norm) [[ARG0:%.*]]) #[[ATTR1]] { 166; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(norm) [[ARG0]]) #[[ATTR2]] 167; LIGHT-NEXT: ret float [[CALL]] 168; 169 %call = call float @llvm.round.f32(float %arg0) 170 ret float %call 171} 172 173define float @ret_round_nonnorm(float nofpclass(nnorm) %arg0) { 174; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonnorm 175; CHECK-SAME: (float nofpclass(nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 176; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nnorm) [[ARG0]]) #[[ATTR2]] 177; CHECK-NEXT: ret float [[CALL]] 178; 179; LIGHT-LABEL: define float @ret_round_nonnorm 180; LIGHT-SAME: (float nofpclass(nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 181; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nnorm) [[ARG0]]) #[[ATTR2]] 182; LIGHT-NEXT: ret float [[CALL]] 183; 184 %call = call float @llvm.round.f32(float %arg0) 185 ret float %call 186} 187 188define float @ret_round_nopnorm(float nofpclass(pnorm) %arg0) { 189; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopnorm 190; CHECK-SAME: (float nofpclass(pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 191; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(pnorm) [[ARG0]]) #[[ATTR2]] 192; CHECK-NEXT: ret float [[CALL]] 193; 194; LIGHT-LABEL: define float @ret_round_nopnorm 195; LIGHT-SAME: (float nofpclass(pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 196; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pnorm) [[ARG0]]) #[[ATTR2]] 197; LIGHT-NEXT: ret float [[CALL]] 198; 199 %call = call float @llvm.round.f32(float %arg0) 200 ret float %call 201} 202 203define float @ret_round_nonsub(float nofpclass(nsub) %arg0) { 204; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonsub 205; CHECK-SAME: (float nofpclass(nsub) [[ARG0:%.*]]) #[[ATTR1]] { 206; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nsub) [[ARG0]]) #[[ATTR2]] 207; CHECK-NEXT: ret float [[CALL]] 208; 209; LIGHT-LABEL: define float @ret_round_nonsub 210; LIGHT-SAME: (float nofpclass(nsub) [[ARG0:%.*]]) #[[ATTR1]] { 211; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nsub) [[ARG0]]) #[[ATTR2]] 212; LIGHT-NEXT: ret float [[CALL]] 213; 214 %call = call float @llvm.round.f32(float %arg0) 215 ret float %call 216} 217 218define float @ret_round_nopsub(float nofpclass(psub) %arg0) { 219; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopsub 220; CHECK-SAME: (float nofpclass(psub) [[ARG0:%.*]]) #[[ATTR1]] { 221; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(psub) [[ARG0]]) #[[ATTR2]] 222; CHECK-NEXT: ret float [[CALL]] 223; 224; LIGHT-LABEL: define float @ret_round_nopsub 225; LIGHT-SAME: (float nofpclass(psub) [[ARG0:%.*]]) #[[ATTR1]] { 226; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(psub) [[ARG0]]) #[[ATTR2]] 227; LIGHT-NEXT: ret float [[CALL]] 228; 229 %call = call float @llvm.round.f32(float %arg0) 230 ret float %call 231} 232 233define float @ret_round_nonorm_nosub(float nofpclass(norm sub) %arg0) { 234; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonorm_nosub 235; CHECK-SAME: (float nofpclass(sub norm) [[ARG0:%.*]]) #[[ATTR1]] { 236; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(sub norm) [[ARG0]]) #[[ATTR2]] 237; CHECK-NEXT: ret float [[CALL]] 238; 239; LIGHT-LABEL: define float @ret_round_nonorm_nosub 240; LIGHT-SAME: (float nofpclass(sub norm) [[ARG0:%.*]]) #[[ATTR1]] { 241; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(sub norm) [[ARG0]]) #[[ATTR2]] 242; LIGHT-NEXT: ret float [[CALL]] 243; 244 %call = call float @llvm.round.f32(float %arg0) 245 ret float %call 246} 247 248define float @ret_round_nopnorm_nopsub(float nofpclass(pnorm psub) %arg0) { 249; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopnorm_nopsub 250; CHECK-SAME: (float nofpclass(psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 251; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(psub pnorm) [[ARG0]]) #[[ATTR2]] 252; CHECK-NEXT: ret float [[CALL]] 253; 254; LIGHT-LABEL: define float @ret_round_nopnorm_nopsub 255; LIGHT-SAME: (float nofpclass(psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 256; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(psub pnorm) [[ARG0]]) #[[ATTR2]] 257; LIGHT-NEXT: ret float [[CALL]] 258; 259 %call = call float @llvm.round.f32(float %arg0) 260 ret float %call 261} 262 263define float @ret_round_nonnorm_nonsub(float nofpclass(nnorm nsub) %arg0) { 264; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonnorm_nonsub 265; CHECK-SAME: (float nofpclass(nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 266; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nsub nnorm) [[ARG0]]) #[[ATTR2]] 267; CHECK-NEXT: ret float [[CALL]] 268; 269; LIGHT-LABEL: define float @ret_round_nonnorm_nonsub 270; LIGHT-SAME: (float nofpclass(nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 271; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nsub nnorm) [[ARG0]]) #[[ATTR2]] 272; LIGHT-NEXT: ret float [[CALL]] 273; 274 %call = call float @llvm.round.f32(float %arg0) 275 ret float %call 276} 277 278define float @ret_round_nopnorm_nonsub(float nofpclass(pnorm nsub) %arg0) { 279; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopnorm_nonsub 280; CHECK-SAME: (float nofpclass(nsub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 281; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nsub pnorm) [[ARG0]]) #[[ATTR2]] 282; CHECK-NEXT: ret float [[CALL]] 283; 284; LIGHT-LABEL: define float @ret_round_nopnorm_nonsub 285; LIGHT-SAME: (float nofpclass(nsub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 286; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nsub pnorm) [[ARG0]]) #[[ATTR2]] 287; LIGHT-NEXT: ret float [[CALL]] 288; 289 %call = call float @llvm.round.f32(float %arg0) 290 ret float %call 291} 292 293define ppc_fp128 @ret_round_ppcf128(ppc_fp128 %arg0) { 294; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_ppcf128 295; CHECK-SAME: (ppc_fp128 [[ARG0:%.*]]) #[[ATTR1]] { 296; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 [[ARG0]]) #[[ATTR2]] 297; CHECK-NEXT: ret ppc_fp128 [[CALL]] 298; 299; LIGHT-LABEL: define ppc_fp128 @ret_round_ppcf128 300; LIGHT-SAME: (ppc_fp128 [[ARG0:%.*]]) #[[ATTR1]] { 301; LIGHT-NEXT: [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 [[ARG0]]) #[[ATTR2]] 302; LIGHT-NEXT: ret ppc_fp128 [[CALL]] 303; 304 %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0) 305 ret ppc_fp128 %call 306} 307 308define ppc_fp128 @ret_round_noinf_ppcf128(ppc_fp128 nofpclass(inf) %arg0) { 309; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_noinf_ppcf128 310; CHECK-SAME: (ppc_fp128 nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] { 311; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(inf) [[ARG0]]) #[[ATTR2]] 312; CHECK-NEXT: ret ppc_fp128 [[CALL]] 313; 314; LIGHT-LABEL: define ppc_fp128 @ret_round_noinf_ppcf128 315; LIGHT-SAME: (ppc_fp128 nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] { 316; LIGHT-NEXT: [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(inf) [[ARG0]]) #[[ATTR2]] 317; LIGHT-NEXT: ret ppc_fp128 [[CALL]] 318; 319 %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0) 320 ret ppc_fp128 %call 321} 322 323define ppc_fp128 @ret_round_nopinf_ppcf128(ppc_fp128 nofpclass(pinf) %arg0) { 324; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_nopinf_ppcf128 325; CHECK-SAME: (ppc_fp128 nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] { 326; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(pinf) [[ARG0]]) #[[ATTR2]] 327; CHECK-NEXT: ret ppc_fp128 [[CALL]] 328; 329; LIGHT-LABEL: define ppc_fp128 @ret_round_nopinf_ppcf128 330; LIGHT-SAME: (ppc_fp128 nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] { 331; LIGHT-NEXT: [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(pinf) [[ARG0]]) #[[ATTR2]] 332; LIGHT-NEXT: ret ppc_fp128 [[CALL]] 333; 334 %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0) 335 ret ppc_fp128 %call 336} 337 338define ppc_fp128 @ret_round_noninf_ppcf128(ppc_fp128 nofpclass(ninf) %arg0) { 339; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_noninf_ppcf128 340; CHECK-SAME: (ppc_fp128 nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] { 341; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(ninf) [[ARG0]]) #[[ATTR2]] 342; CHECK-NEXT: ret ppc_fp128 [[CALL]] 343; 344; LIGHT-LABEL: define ppc_fp128 @ret_round_noninf_ppcf128 345; LIGHT-SAME: (ppc_fp128 nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] { 346; LIGHT-NEXT: [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(ninf) [[ARG0]]) #[[ATTR2]] 347; LIGHT-NEXT: ret ppc_fp128 [[CALL]] 348; 349 %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0) 350 ret ppc_fp128 %call 351} 352 353define ppc_fp128 @ret_round_nonan_ppcf128(ppc_fp128 nofpclass(nan) %arg0) { 354; CHECK-LABEL: define nofpclass(nan sub) ppc_fp128 @ret_round_nonan_ppcf128 355; CHECK-SAME: (ppc_fp128 nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] { 356; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(nan) [[ARG0]]) #[[ATTR2]] 357; CHECK-NEXT: ret ppc_fp128 [[CALL]] 358; 359; LIGHT-LABEL: define ppc_fp128 @ret_round_nonan_ppcf128 360; LIGHT-SAME: (ppc_fp128 nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] { 361; LIGHT-NEXT: [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(nan) [[ARG0]]) #[[ATTR2]] 362; LIGHT-NEXT: ret ppc_fp128 [[CALL]] 363; 364 %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0) 365 ret ppc_fp128 %call 366} 367 368define float @ret_round_noneg(float nofpclass(ninf nsub nnorm) %arg0) { 369; CHECK-LABEL: define nofpclass(ninf sub) float @ret_round_noneg 370; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 371; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(ninf sub) float @llvm.round.f32(float nofpclass(ninf nsub nnorm) [[ARG0]]) #[[ATTR2]] 372; CHECK-NEXT: ret float [[CALL]] 373; 374; LIGHT-LABEL: define float @ret_round_noneg 375; LIGHT-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 376; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf nsub nnorm) [[ARG0]]) #[[ATTR2]] 377; LIGHT-NEXT: ret float [[CALL]] 378; 379 %call = call float @llvm.round.f32(float %arg0) 380 ret float %call 381} 382 383define float @ret_round_noneg_nonegzero(float nofpclass(ninf nsub nnorm nzero) %arg0) { 384; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) float @ret_round_noneg_nonegzero 385; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 386; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]] 387; CHECK-NEXT: ret float [[CALL]] 388; 389; LIGHT-LABEL: define float @ret_round_noneg_nonegzero 390; LIGHT-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 391; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]] 392; LIGHT-NEXT: ret float [[CALL]] 393; 394 %call = call float @llvm.round.f32(float %arg0) 395 ret float %call 396} 397 398define float @ret_round_noneg_nonegzero_nonan(float nofpclass(ninf nsub nnorm nzero nan) %arg0) { 399; CHECK-LABEL: define nofpclass(nan ninf nzero sub nnorm) float @ret_round_noneg_nonegzero_nonan 400; CHECK-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 401; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(nan ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]] 402; CHECK-NEXT: ret float [[CALL]] 403; 404; LIGHT-LABEL: define float @ret_round_noneg_nonegzero_nonan 405; LIGHT-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 406; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]] 407; LIGHT-NEXT: ret float [[CALL]] 408; 409 %call = call float @llvm.round.f32(float %arg0) 410 ret float %call 411} 412 413define float @ret_round_noneg_nozero(float nofpclass(ninf nsub nnorm zero) %arg0) { 414; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) float @ret_round_noneg_nozero 415; CHECK-SAME: (float nofpclass(ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 416; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]] 417; CHECK-NEXT: ret float [[CALL]] 418; 419; LIGHT-LABEL: define float @ret_round_noneg_nozero 420; LIGHT-SAME: (float nofpclass(ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 421; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]] 422; LIGHT-NEXT: ret float [[CALL]] 423; 424 %call = call float @llvm.round.f32(float %arg0) 425 ret float %call 426} 427 428define float @ret_round_noneg_nozero_nonan(float nofpclass(ninf nsub nnorm zero nan) %arg0) { 429; CHECK-LABEL: define nofpclass(nan ninf nzero sub nnorm) float @ret_round_noneg_nozero_nonan 430; CHECK-SAME: (float nofpclass(nan ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 431; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(nan ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]] 432; CHECK-NEXT: ret float [[CALL]] 433; 434; LIGHT-LABEL: define float @ret_round_noneg_nozero_nonan 435; LIGHT-SAME: (float nofpclass(nan ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 436; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]] 437; LIGHT-NEXT: ret float [[CALL]] 438; 439 %call = call float @llvm.round.f32(float %arg0) 440 ret float %call 441} 442 443define float @ret_round_nopos(float nofpclass(pinf psub pnorm) %arg0) { 444; CHECK-LABEL: define nofpclass(pinf sub) float @ret_round_nopos 445; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 446; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(pinf sub) float @llvm.round.f32(float nofpclass(pinf psub pnorm) [[ARG0]]) #[[ATTR2]] 447; CHECK-NEXT: ret float [[CALL]] 448; 449; LIGHT-LABEL: define float @ret_round_nopos 450; LIGHT-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 451; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf psub pnorm) [[ARG0]]) #[[ATTR2]] 452; LIGHT-NEXT: ret float [[CALL]] 453; 454 %call = call float @llvm.round.f32(float %arg0) 455 ret float %call 456} 457 458define float @ret_round_nopos_nopzero(float nofpclass(pinf psub pnorm pzero) %arg0) { 459; CHECK-LABEL: define nofpclass(pinf pzero sub pnorm) float @ret_round_nopos_nopzero 460; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 461; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]] 462; CHECK-NEXT: ret float [[CALL]] 463; 464; LIGHT-LABEL: define float @ret_round_nopos_nopzero 465; LIGHT-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 466; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]] 467; LIGHT-NEXT: ret float [[CALL]] 468; 469 %call = call float @llvm.round.f32(float %arg0) 470 ret float %call 471} 472 473define float @ret_round_nopos_nopzero_nonan(float nofpclass(pinf psub pnorm pzero nan) %arg0) { 474; CHECK-LABEL: define nofpclass(nan pinf pzero sub pnorm) float @ret_round_nopos_nopzero_nonan 475; CHECK-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 476; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(nan pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]] 477; CHECK-NEXT: ret float [[CALL]] 478; 479; LIGHT-LABEL: define float @ret_round_nopos_nopzero_nonan 480; LIGHT-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 481; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]] 482; LIGHT-NEXT: ret float [[CALL]] 483; 484 %call = call float @llvm.round.f32(float %arg0) 485 ret float %call 486} 487 488define float @ret_round_nopos_nozero(float nofpclass(pinf psub pnorm zero) %arg0) { 489; CHECK-LABEL: define nofpclass(pinf pzero sub pnorm) float @ret_round_nopos_nozero 490; CHECK-SAME: (float nofpclass(pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 491; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]] 492; CHECK-NEXT: ret float [[CALL]] 493; 494; LIGHT-LABEL: define float @ret_round_nopos_nozero 495; LIGHT-SAME: (float nofpclass(pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 496; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]] 497; LIGHT-NEXT: ret float [[CALL]] 498; 499 %call = call float @llvm.round.f32(float %arg0) 500 ret float %call 501} 502 503define float @ret_round_nopos_nozero_nonan(float nofpclass(pinf psub pnorm zero nan) %arg0) { 504; CHECK-LABEL: define nofpclass(nan pinf pzero sub pnorm) float @ret_round_nopos_nozero_nonan 505; CHECK-SAME: (float nofpclass(nan pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 506; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(nan pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]] 507; CHECK-NEXT: ret float [[CALL]] 508; 509; LIGHT-LABEL: define float @ret_round_nopos_nozero_nonan 510; LIGHT-SAME: (float nofpclass(nan pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 511; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]] 512; LIGHT-NEXT: ret float [[CALL]] 513; 514 %call = call float @llvm.round.f32(float %arg0) 515 ret float %call 516} 517 518define float @ret_round_nopzero_nopnorm(float nofpclass(pzero pnorm) %arg0) { 519; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopzero_nopnorm 520; CHECK-SAME: (float nofpclass(pzero pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 521; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(pzero pnorm) [[ARG0]]) #[[ATTR2]] 522; CHECK-NEXT: ret float [[CALL]] 523; 524; LIGHT-LABEL: define float @ret_round_nopzero_nopnorm 525; LIGHT-SAME: (float nofpclass(pzero pnorm) [[ARG0:%.*]]) #[[ATTR1]] { 526; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pzero pnorm) [[ARG0]]) #[[ATTR2]] 527; LIGHT-NEXT: ret float [[CALL]] 528; 529 %call = call float @llvm.round.f32(float %arg0) 530 ret float %call 531} 532 533define float @ret_round_nonzero_nonnorm(float nofpclass(nzero nnorm) %arg0) { 534; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonzero_nonnorm 535; CHECK-SAME: (float nofpclass(nzero nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 536; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nzero nnorm) [[ARG0]]) #[[ATTR2]] 537; CHECK-NEXT: ret float [[CALL]] 538; 539; LIGHT-LABEL: define float @ret_round_nonzero_nonnorm 540; LIGHT-SAME: (float nofpclass(nzero nnorm) [[ARG0:%.*]]) #[[ATTR1]] { 541; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nzero nnorm) [[ARG0]]) #[[ATTR2]] 542; LIGHT-NEXT: ret float [[CALL]] 543; 544 %call = call float @llvm.round.f32(float %arg0) 545 ret float %call 546} 547 548define float @ret_round_nozero_nonorm(float nofpclass(zero norm) %arg0) { 549; CHECK-LABEL: define nofpclass(sub) float @ret_round_nozero_nonorm 550; CHECK-SAME: (float nofpclass(zero norm) [[ARG0:%.*]]) #[[ATTR1]] { 551; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(zero norm) [[ARG0]]) #[[ATTR2]] 552; CHECK-NEXT: ret float [[CALL]] 553; 554; LIGHT-LABEL: define float @ret_round_nozero_nonorm 555; LIGHT-SAME: (float nofpclass(zero norm) [[ARG0:%.*]]) #[[ATTR1]] { 556; LIGHT-NEXT: [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(zero norm) [[ARG0]]) #[[ATTR2]] 557; LIGHT-NEXT: ret float [[CALL]] 558; 559 %call = call float @llvm.round.f32(float %arg0) 560 ret float %call 561} 562