296 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.copysign.f32(float, float)5declare float @llvm.fabs.f32(float)6 7define float @ret_copysign(float %arg0, float %arg1) {8; CHECK-LABEL: define float @ret_copysign9; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1:[0-9]+]] {10; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float [[ARG0]], float [[ARG1]]) #[[ATTR2:[0-9]+]]11; CHECK-NEXT: ret float [[CALL]]12;13 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)14 ret float %call15}16 17define float @ret_copysign_fabs_rhs(float %arg0, float %arg1) {18; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_copysign_fabs_rhs19; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {20; CHECK-NEXT: [[FABS_ARG1:%.*]] = call float @llvm.fabs.f32(float [[ARG1]]) #[[ATTR2]]21; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.copysign.f32(float [[ARG0]], float [[FABS_ARG1]]) #[[ATTR2]]22; CHECK-NEXT: ret float [[CALL]]23;24 %fabs.arg1 = call float @llvm.fabs.f32(float %arg1)25 %call = call float @llvm.copysign.f32(float %arg0, float %fabs.arg1)26 ret float %call27}28 29define float @ret_copysign_nnan_lhs_fabs_rhs(float nofpclass(nan) %arg0, float %arg1) {30; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_copysign_nnan_lhs_fabs_rhs31; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {32; CHECK-NEXT: [[FABS_ARG1:%.*]] = call float @llvm.fabs.f32(float [[ARG1]]) #[[ATTR2]]33; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.copysign.f32(float nofpclass(nan) [[ARG0]], float [[FABS_ARG1]]) #[[ATTR2]]34; CHECK-NEXT: ret float [[CALL]]35;36 %fabs.arg1 = call float @llvm.fabs.f32(float %arg1)37 %call = call float @llvm.copysign.f32(float %arg0, float %fabs.arg1)38 ret float %call39}40 41 42define float @ret_copysign_lhs_fabs_nnan_rhs(float %arg0, float %arg1) {43; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_copysign_lhs_fabs_nnan_rhs44; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {45; CHECK-NEXT: [[FABS_ARG1:%.*]] = call nnan float @llvm.fabs.f32(float [[ARG1]]) #[[ATTR2]]46; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.copysign.f32(float [[ARG0]], float [[FABS_ARG1]]) #[[ATTR2]]47; CHECK-NEXT: ret float [[CALL]]48;49 %fabs.arg1 = call nnan float @llvm.fabs.f32(float %arg1)50 %call = call float @llvm.copysign.f32(float %arg0, float %fabs.arg1)51 ret float %call52}53 54 55define float @ret_copysign_noneg_lhs(float nofpclass(ninf nnorm nsub nzero) %arg0, float %arg1) {56; CHECK-LABEL: define float @ret_copysign_noneg_lhs57; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {58; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(ninf nzero nsub nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]59; CHECK-NEXT: ret float [[CALL]]60;61 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)62 ret float %call63}64 65define float @ret_copysign_noneg_rhs(float %arg0, float nofpclass(ninf nnorm nsub nzero) %arg1) {66; CHECK-LABEL: define float @ret_copysign_noneg_rhs67; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR1]] {68; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float [[ARG0]], float nofpclass(ninf nzero nsub nnorm) [[ARG1]]) #[[ATTR2]]69; CHECK-NEXT: ret float [[CALL]]70;71 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)72 ret float %call73}74 75define float @ret_copysign_noneg_nonan_rhs(float %arg0, float nofpclass(ninf nnorm nsub nzero nan) %arg1) {76; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_copysign_noneg_nonan_rhs77; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR1]] {78; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.copysign.f32(float [[ARG0]], float nofpclass(nan ninf nzero nsub nnorm) [[ARG1]]) #[[ATTR2]]79; CHECK-NEXT: ret float [[CALL]]80;81 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)82 ret float %call83}84 85define float @ret_copysign_nopos_lhs(float nofpclass(pinf pnorm psub pzero) %arg0, float %arg1) {86; CHECK-LABEL: define float @ret_copysign_nopos_lhs87; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {88; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(pinf pzero psub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]89; CHECK-NEXT: ret float [[CALL]]90;91 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)92 ret float %call93}94 95define float @ret_copysign_nopos_rhs(float %arg0, float nofpclass(pinf pnorm psub pzero) %arg1) {96; CHECK-LABEL: define float @ret_copysign_nopos_rhs97; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(pinf pzero psub pnorm) [[ARG1:%.*]]) #[[ATTR1]] {98; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float [[ARG0]], float nofpclass(pinf pzero psub pnorm) [[ARG1]]) #[[ATTR2]]99; CHECK-NEXT: ret float [[CALL]]100;101 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)102 ret float %call103}104 105define float @ret_copysign_nonan_lhs(float nofpclass(nan) %arg0, float %arg1) {106; CHECK-LABEL: define nofpclass(nan) float @ret_copysign_nonan_lhs107; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {108; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan) float @llvm.copysign.f32(float nofpclass(nan) [[ARG0]], float [[ARG1]]) #[[ATTR2]]109; CHECK-NEXT: ret float [[CALL]]110;111 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)112 ret float %call113}114 115define float @ret_copysign_nonan_rhs(float %arg0, float nofpclass(nan) %arg1) {116; CHECK-LABEL: define float @ret_copysign_nonan_rhs117; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {118; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float [[ARG0]], float nofpclass(nan) [[ARG1]]) #[[ATTR2]]119; CHECK-NEXT: ret float [[CALL]]120;121 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)122 ret float %call123}124 125define float @ret_copysign_noneg_nonan_lhs(float nofpclass(ninf nnorm nsub nzero nan) %arg0, float %arg1) {126; CHECK-LABEL: define nofpclass(nan) float @ret_copysign_noneg_nonan_lhs127; CHECK-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {128; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan) float @llvm.copysign.f32(float nofpclass(nan ninf nzero nsub nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]129; CHECK-NEXT: ret float [[CALL]]130;131 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)132 ret float %call133}134 135define float @ret_copysign_nopos_nonan_lhs(float nofpclass(pinf pnorm psub pzero nan) %arg0, float %arg1) {136; CHECK-LABEL: define nofpclass(nan) float @ret_copysign_nopos_nonan_lhs137; CHECK-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {138; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan) float @llvm.copysign.f32(float nofpclass(nan pinf pzero psub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]139; CHECK-NEXT: ret float [[CALL]]140;141 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)142 ret float %call143}144 145define float @ret_copysign_mixed_lhs0(float nofpclass(ninf pnorm nsub nzero) %arg0, float %arg1) {146; CHECK-LABEL: define float @ret_copysign_mixed_lhs0147; CHECK-SAME: (float nofpclass(ninf nzero nsub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {148; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(ninf nzero nsub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]149; CHECK-NEXT: ret float [[CALL]]150;151 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)152 ret float %call153}154 155define float @ret_copysign_mixed_lhs1(float nofpclass(pinf nnorm psub pzero) %arg0, float %arg1) {156; CHECK-LABEL: define float @ret_copysign_mixed_lhs1157; CHECK-SAME: (float nofpclass(pinf pzero psub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {158; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(pinf pzero psub nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]159; CHECK-NEXT: ret float [[CALL]]160;161 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)162 ret float %call163}164 165define float @ret_copysign_mixed_lhs2(float nofpclass(ninf pnorm psub nzero qnan) %arg0, float %arg1) {166; CHECK-LABEL: define nofpclass(qnan) float @ret_copysign_mixed_lhs2167; CHECK-SAME: (float nofpclass(qnan ninf nzero psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {168; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(qnan) float @llvm.copysign.f32(float nofpclass(qnan ninf nzero psub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]169; CHECK-NEXT: ret float [[CALL]]170;171 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)172 ret float %call173}174 175define float @ret_copysign_noninf_lhs(float nofpclass(ninf) %arg0, float %arg1) {176; CHECK-LABEL: define float @ret_copysign_noninf_lhs177; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {178; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(ninf) [[ARG0]], float [[ARG1]]) #[[ATTR2]]179; CHECK-NEXT: ret float [[CALL]]180;181 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)182 ret float %call183}184 185define float @ret_copysign_nopinf_lhs(float nofpclass(pinf) %arg0, float %arg1) {186; CHECK-LABEL: define float @ret_copysign_nopinf_lhs187; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {188; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(pinf) [[ARG0]], float [[ARG1]]) #[[ATTR2]]189; CHECK-NEXT: ret float [[CALL]]190;191 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)192 ret float %call193}194 195define float @ret_copysign_noinf_lhs(float nofpclass(inf) %arg0, float %arg1) {196; CHECK-LABEL: define nofpclass(inf) float @ret_copysign_noinf_lhs197; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {198; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.copysign.f32(float nofpclass(inf) [[ARG0]], float [[ARG1]]) #[[ATTR2]]199; CHECK-NEXT: ret float [[CALL]]200;201 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)202 ret float %call203}204 205define float @ret_copysign_nonzero_lhs(float nofpclass(nzero) %arg0, float %arg1) {206; CHECK-LABEL: define float @ret_copysign_nonzero_lhs207; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {208; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(nzero) [[ARG0]], float [[ARG1]]) #[[ATTR2]]209; CHECK-NEXT: ret float [[CALL]]210;211 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)212 ret float %call213}214 215define float @ret_copysign_nopzero_lhs(float nofpclass(pzero) %arg0, float %arg1) {216; CHECK-LABEL: define float @ret_copysign_nopzero_lhs217; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {218; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(pzero) [[ARG0]], float [[ARG1]]) #[[ATTR2]]219; CHECK-NEXT: ret float [[CALL]]220;221 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)222 ret float %call223}224 225define float @ret_copysign_nozero_lhs(float nofpclass(zero) %arg0, float %arg1) {226; CHECK-LABEL: define nofpclass(zero) float @ret_copysign_nozero_lhs227; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {228; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(zero) float @llvm.copysign.f32(float nofpclass(zero) [[ARG0]], float [[ARG1]]) #[[ATTR2]]229; CHECK-NEXT: ret float [[CALL]]230;231 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)232 ret float %call233}234 235define float @ret_copysign_nonsub_lhs(float nofpclass(nsub) %arg0, float %arg1) {236; CHECK-LABEL: define float @ret_copysign_nonsub_lhs237; CHECK-SAME: (float nofpclass(nsub) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {238; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(nsub) [[ARG0]], float [[ARG1]]) #[[ATTR2]]239; CHECK-NEXT: ret float [[CALL]]240;241 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)242 ret float %call243}244 245define float @ret_copysign_nopsub_lhs(float nofpclass(psub) %arg0, float %arg1) {246; CHECK-LABEL: define float @ret_copysign_nopsub_lhs247; CHECK-SAME: (float nofpclass(psub) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {248; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(psub) [[ARG0]], float [[ARG1]]) #[[ATTR2]]249; CHECK-NEXT: ret float [[CALL]]250;251 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)252 ret float %call253}254 255define float @ret_copysign_nosub_lhs(float nofpclass(sub) %arg0, float %arg1) {256; CHECK-LABEL: define nofpclass(sub) float @ret_copysign_nosub_lhs257; CHECK-SAME: (float nofpclass(sub) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {258; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(sub) float @llvm.copysign.f32(float nofpclass(sub) [[ARG0]], float [[ARG1]]) #[[ATTR2]]259; CHECK-NEXT: ret float [[CALL]]260;261 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)262 ret float %call263}264 265define float @ret_copysign_nonnorm_lhs(float nofpclass(nnorm) %arg0, float %arg1) {266; CHECK-LABEL: define float @ret_copysign_nonnorm_lhs267; CHECK-SAME: (float nofpclass(nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {268; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]269; CHECK-NEXT: ret float [[CALL]]270;271 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)272 ret float %call273}274 275define float @ret_copysign_nopnorm_lhs(float nofpclass(pnorm) %arg0, float %arg1) {276; CHECK-LABEL: define float @ret_copysign_nopnorm_lhs277; CHECK-SAME: (float nofpclass(pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {278; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.copysign.f32(float nofpclass(pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]279; CHECK-NEXT: ret float [[CALL]]280;281 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)282 ret float %call283}284 285define float @ret_copysign_nonorm_lhs(float nofpclass(norm) %arg0, float %arg1) {286; CHECK-LABEL: define nofpclass(norm) float @ret_copysign_nonorm_lhs287; CHECK-SAME: (float nofpclass(norm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {288; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(norm) float @llvm.copysign.f32(float nofpclass(norm) [[ARG0]], float [[ARG1]]) #[[ATTR2]]289; CHECK-NEXT: ret float [[CALL]]290;291 %call = call float @llvm.copysign.f32(float %arg0, float %arg1)292 ret float %call293}294;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:295; TUNIT: {{.*}}296