brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 7c753bd Raw
201 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 %s3 4define float @phi_select(i1 %c, float nofpclass(inf) %base, float nofpclass(inf) %arg) {5; CHECK-LABEL: define nofpclass(inf) float @phi_select6; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT:  entry:8; CHECK-NEXT:    br label [[LOOP:%.*]]9; CHECK:       loop:10; CHECK-NEXT:    [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[SELECT:%.*]], [[LOOP]] ]11; CHECK-NEXT:    [[SELECT]] = select i1 [[C]], float [[PHI]], float [[ARG]]12; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]13; CHECK:       exit:14; CHECK-NEXT:    ret float [[SELECT]]15;16entry:17  br label %loop18 19loop:20  %phi = phi float [ %base, %entry ], [ %select, %loop ]21  %select = select i1 %c, float %phi, float %arg22  br i1 %c, label %loop, label %exit23 24exit:25  ret float %select26}27 28define float @phi_select_c(i1 %c, float nofpclass(inf) %base, float nofpclass(inf) %arg) {29; CHECK-LABEL: define nofpclass(inf) float @phi_select_c30; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {31; CHECK-NEXT:  entry:32; CHECK-NEXT:    br label [[LOOP:%.*]]33; CHECK:       loop:34; CHECK-NEXT:    [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[SELECT:%.*]], [[LOOP]] ]35; CHECK-NEXT:    [[SELECT]] = select i1 [[C]], float [[ARG]], float [[PHI]]36; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]37; CHECK:       exit:38; CHECK-NEXT:    ret float [[SELECT]]39;40entry:41  br label %loop42 43loop:44  %phi = phi float [ %base, %entry ], [ %select, %loop ]45  %select = select i1 %c, float %arg, float %phi46  br i1 %c, label %loop, label %exit47 48exit:49  ret float %select50}51 52define float @phi_select_onlybase(i1 %c, float nofpclass(inf) %base, float %arg) {53; CHECK-LABEL: define float @phi_select_onlybase54; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float [[ARG:%.*]]) #[[ATTR0]] {55; CHECK-NEXT:  entry:56; CHECK-NEXT:    br label [[LOOP:%.*]]57; CHECK:       loop:58; CHECK-NEXT:    [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[SELECT:%.*]], [[LOOP]] ]59; CHECK-NEXT:    [[SELECT]] = select i1 [[C]], float [[PHI]], float [[ARG]]60; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]61; CHECK:       exit:62; CHECK-NEXT:    ret float [[SELECT]]63;64entry:65  br label %loop66 67loop:68  %phi = phi float [ %base, %entry ], [ %select, %loop ]69  %select = select i1 %c, float %phi, float %arg70  br i1 %c, label %loop, label %exit71 72exit:73  ret float %select74}75 76define float @phi_select_onlyarg(i1 %c, float %base, float nofpclass(inf) %arg) {77; CHECK-LABEL: define float @phi_select_onlyarg78; CHECK-SAME: (i1 [[C:%.*]], float [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {79; CHECK-NEXT:  entry:80; CHECK-NEXT:    br label [[LOOP:%.*]]81; CHECK:       loop:82; CHECK-NEXT:    [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[SELECT:%.*]], [[LOOP]] ]83; CHECK-NEXT:    [[SELECT]] = select i1 [[C]], float [[PHI]], float [[ARG]]84; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]85; CHECK:       exit:86; CHECK-NEXT:    ret float [[SELECT]]87;88entry:89  br label %loop90 91loop:92  %phi = phi float [ %base, %entry ], [ %select, %loop ]93  %select = select i1 %c, float %phi, float %arg94  br i1 %c, label %loop, label %exit95 96exit:97  ret float %select98}99 100define float @phi_phi(i1 %c, float nofpclass(inf) %base, float nofpclass(inf) %arg) {101; CHECK-LABEL: define nofpclass(inf) float @phi_phi102; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {103; CHECK-NEXT:  entry:104; CHECK-NEXT:    br label [[LOOP:%.*]]105; CHECK:       loop:106; CHECK-NEXT:    [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[PHI2:%.*]], [[EXIT1:%.*]] ]107; CHECK-NEXT:    br label [[INNER:%.*]]108; CHECK:       inner:109; CHECK-NEXT:    [[PHI2]] = phi float [ [[PHI]], [[LOOP]] ], [ [[ARG]], [[INNER]] ]110; CHECK-NEXT:    br i1 [[C]], label [[INNER]], label [[EXIT1]]111; CHECK:       exit1:112; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]113; CHECK:       exit:114; CHECK-NEXT:    ret float [[PHI2]]115;116entry:117  br label %loop118 119loop:120  %phi = phi float [ %base, %entry ], [ %phi2, %exit1 ]121  br label %inner122 123inner:124  %phi2 = phi float [ %phi, %loop ], [ %arg, %inner ]125  br i1 %c, label %inner, label %exit1126 127exit1:128  br i1 %c, label %loop, label %exit129 130exit:131  ret float %phi2132}133 134define float @phi_phi_onlybase(i1 %c, float nofpclass(inf) %base, float %arg) {135; CHECK-LABEL: define float @phi_phi_onlybase136; CHECK-SAME: (i1 [[C:%.*]], float nofpclass(inf) [[BASE:%.*]], float [[ARG:%.*]]) #[[ATTR0]] {137; CHECK-NEXT:  entry:138; CHECK-NEXT:    br label [[LOOP:%.*]]139; CHECK:       loop:140; CHECK-NEXT:    [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[PHI2:%.*]], [[EXIT1:%.*]] ]141; CHECK-NEXT:    br label [[INNER:%.*]]142; CHECK:       inner:143; CHECK-NEXT:    [[PHI2]] = phi float [ [[PHI]], [[LOOP]] ], [ [[ARG]], [[INNER]] ]144; CHECK-NEXT:    br i1 [[C]], label [[INNER]], label [[EXIT1]]145; CHECK:       exit1:146; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]147; CHECK:       exit:148; CHECK-NEXT:    ret float [[PHI2]]149;150entry:151  br label %loop152 153loop:154  %phi = phi float [ %base, %entry ], [ %phi2, %exit1 ]155  br label %inner156 157inner:158  %phi2 = phi float [ %phi, %loop ], [ %arg, %inner ]159  br i1 %c, label %inner, label %exit1160 161exit1:162  br i1 %c, label %loop, label %exit163 164exit:165  ret float %phi2166}167 168define float @phi_phi_onlyarg(i1 %c, float %base, float nofpclass(inf) %arg) {169; CHECK-LABEL: define float @phi_phi_onlyarg170; CHECK-SAME: (i1 [[C:%.*]], float [[BASE:%.*]], float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {171; CHECK-NEXT:  entry:172; CHECK-NEXT:    br label [[LOOP:%.*]]173; CHECK:       loop:174; CHECK-NEXT:    [[PHI:%.*]] = phi float [ [[BASE]], [[ENTRY:%.*]] ], [ [[PHI2:%.*]], [[EXIT1:%.*]] ]175; CHECK-NEXT:    br label [[INNER:%.*]]176; CHECK:       inner:177; CHECK-NEXT:    [[PHI2]] = phi float [ [[PHI]], [[LOOP]] ], [ [[ARG]], [[INNER]] ]178; CHECK-NEXT:    br i1 [[C]], label [[INNER]], label [[EXIT1]]179; CHECK:       exit1:180; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]181; CHECK:       exit:182; CHECK-NEXT:    ret float [[PHI2]]183;184entry:185  br label %loop186 187loop:188  %phi = phi float [ %base, %entry ], [ %phi2, %exit1 ]189  br label %inner190 191inner:192  %phi2 = phi float [ %phi, %loop ], [ %arg, %inner ]193  br i1 %c, label %inner, label %exit1194 195exit1:196  br i1 %c, label %loop, label %exit197 198exit:199  ret float %phi2200}201