brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.9 KiB · e52c76f Raw
357 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=aarch64 -mattr=-bf16 -stop-after=finalize-isel | FileCheck %s --check-prefixes=CHECK-NOBF163; RUN: llc < %s -mtriple=aarch64 -mattr=+bf16 -stop-after=finalize-isel | FileCheck %s --check-prefixes=CHECK-BF164 5; Check that the output instructions have the same fast math flags as the input6; fadd, even when bf16 is legalized to f32.7 8define bfloat @normal_fadd(bfloat %x, bfloat %y) {9  ; CHECK-NOBF16-LABEL: name: normal_fadd10  ; CHECK-NOBF16: bb.0.entry:11  ; CHECK-NOBF16-NEXT:   liveins: $h0, $h112  ; CHECK-NOBF16-NEXT: {{  $}}13  ; CHECK-NOBF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h114  ; CHECK-NOBF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h015  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub16  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]17  ; CHECK-NOBF16-NEXT:   [[COPY2:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub18  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub19  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]20  ; CHECK-NOBF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub21  ; CHECK-NOBF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[COPY3]], killed [[COPY2]], implicit $fpcr22  ; CHECK-NOBF16-NEXT:   [[COPY4:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr]]23  ; CHECK-NOBF16-NEXT:   [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY4]], 16, 1624  ; CHECK-NOBF16-NEXT:   [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri]], [[COPY4]]25  ; CHECK-NOBF16-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 3276726  ; CHECK-NOBF16-NEXT:   [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr]], killed [[MOVi32imm]]27  ; CHECK-NOBF16-NEXT:   [[UBFMWri1:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr1]], 16, 3128  ; CHECK-NOBF16-NEXT:   [[COPY5:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri1]]29  ; CHECK-NOBF16-NEXT:   [[COPY6:%[0-9]+]]:fpr16 = COPY [[COPY5]].hsub30  ; CHECK-NOBF16-NEXT:   $h0 = COPY [[COPY6]]31  ; CHECK-NOBF16-NEXT:   RET_ReallyLR implicit $h032  ;33  ; CHECK-BF16-LABEL: name: normal_fadd34  ; CHECK-BF16: bb.0.entry:35  ; CHECK-BF16-NEXT:   liveins: $h0, $h136  ; CHECK-BF16-NEXT: {{  $}}37  ; CHECK-BF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h138  ; CHECK-BF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h039  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub40  ; CHECK-BF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]41  ; CHECK-BF16-NEXT:   [[COPY2:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub42  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub43  ; CHECK-BF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]44  ; CHECK-BF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub45  ; CHECK-BF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[COPY3]], killed [[COPY2]], implicit $fpcr46  ; CHECK-BF16-NEXT:   [[BFCVT:%[0-9]+]]:fpr16 = nofpexcept BFCVT killed [[FADDSrr]], implicit $fpcr47  ; CHECK-BF16-NEXT:   $h0 = COPY [[BFCVT]]48  ; CHECK-BF16-NEXT:   RET_ReallyLR implicit $h049entry:50  %add = fadd bfloat %x, %y51  ret bfloat %add52}53 54define bfloat @fast_fadd(bfloat %x, bfloat %y) {55  ; CHECK-NOBF16-LABEL: name: fast_fadd56  ; CHECK-NOBF16: bb.0.entry:57  ; CHECK-NOBF16-NEXT:   liveins: $h0, $h158  ; CHECK-NOBF16-NEXT: {{  $}}59  ; CHECK-NOBF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h160  ; CHECK-NOBF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h061  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub62  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]63  ; CHECK-NOBF16-NEXT:   [[COPY2:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub64  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub65  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]66  ; CHECK-NOBF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub67  ; CHECK-NOBF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nnan ninf nsz arcp contract afn reassoc nofpexcept FADDSrr killed [[COPY3]], killed [[COPY2]], implicit $fpcr68  ; CHECK-NOBF16-NEXT:   [[COPY4:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr]]69  ; CHECK-NOBF16-NEXT:   [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY4]], 16, 1670  ; CHECK-NOBF16-NEXT:   [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri]], [[COPY4]]71  ; CHECK-NOBF16-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 3276772  ; CHECK-NOBF16-NEXT:   [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr]], killed [[MOVi32imm]]73  ; CHECK-NOBF16-NEXT:   [[UBFMWri1:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr1]], 16, 3174  ; CHECK-NOBF16-NEXT:   [[COPY5:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri1]]75  ; CHECK-NOBF16-NEXT:   [[COPY6:%[0-9]+]]:fpr16 = COPY [[COPY5]].hsub76  ; CHECK-NOBF16-NEXT:   $h0 = COPY [[COPY6]]77  ; CHECK-NOBF16-NEXT:   RET_ReallyLR implicit $h078  ;79  ; CHECK-BF16-LABEL: name: fast_fadd80  ; CHECK-BF16: bb.0.entry:81  ; CHECK-BF16-NEXT:   liveins: $h0, $h182  ; CHECK-BF16-NEXT: {{  $}}83  ; CHECK-BF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h184  ; CHECK-BF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h085  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub86  ; CHECK-BF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]87  ; CHECK-BF16-NEXT:   [[COPY2:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub88  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub89  ; CHECK-BF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]90  ; CHECK-BF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub91  ; CHECK-BF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nnan ninf nsz arcp contract afn reassoc nofpexcept FADDSrr killed [[COPY3]], killed [[COPY2]], implicit $fpcr92  ; CHECK-BF16-NEXT:   [[BFCVT:%[0-9]+]]:fpr16 = nnan ninf nsz arcp contract afn reassoc nofpexcept BFCVT killed [[FADDSrr]], implicit $fpcr93  ; CHECK-BF16-NEXT:   $h0 = COPY [[BFCVT]]94  ; CHECK-BF16-NEXT:   RET_ReallyLR implicit $h095entry:96  %add = fadd fast bfloat %x, %y97  ret bfloat %add98}99 100define bfloat @ninf_fadd(bfloat %x, bfloat %y) {101  ; CHECK-NOBF16-LABEL: name: ninf_fadd102  ; CHECK-NOBF16: bb.0.entry:103  ; CHECK-NOBF16-NEXT:   liveins: $h0, $h1104  ; CHECK-NOBF16-NEXT: {{  $}}105  ; CHECK-NOBF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h1106  ; CHECK-NOBF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h0107  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub108  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]109  ; CHECK-NOBF16-NEXT:   [[COPY2:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub110  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub111  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]112  ; CHECK-NOBF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub113  ; CHECK-NOBF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[COPY3]], killed [[COPY2]], implicit $fpcr114  ; CHECK-NOBF16-NEXT:   [[COPY4:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr]]115  ; CHECK-NOBF16-NEXT:   [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY4]], 16, 16116  ; CHECK-NOBF16-NEXT:   [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri]], [[COPY4]]117  ; CHECK-NOBF16-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 32767118  ; CHECK-NOBF16-NEXT:   [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr]], killed [[MOVi32imm]]119  ; CHECK-NOBF16-NEXT:   [[UBFMWri1:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr1]], 16, 31120  ; CHECK-NOBF16-NEXT:   [[COPY5:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri1]]121  ; CHECK-NOBF16-NEXT:   [[COPY6:%[0-9]+]]:fpr16 = COPY [[COPY5]].hsub122  ; CHECK-NOBF16-NEXT:   $h0 = COPY [[COPY6]]123  ; CHECK-NOBF16-NEXT:   RET_ReallyLR implicit $h0124  ;125  ; CHECK-BF16-LABEL: name: ninf_fadd126  ; CHECK-BF16: bb.0.entry:127  ; CHECK-BF16-NEXT:   liveins: $h0, $h1128  ; CHECK-BF16-NEXT: {{  $}}129  ; CHECK-BF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h1130  ; CHECK-BF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h0131  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub132  ; CHECK-BF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]133  ; CHECK-BF16-NEXT:   [[COPY2:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub134  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub135  ; CHECK-BF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]136  ; CHECK-BF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub137  ; CHECK-BF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[COPY3]], killed [[COPY2]], implicit $fpcr138  ; CHECK-BF16-NEXT:   [[BFCVT:%[0-9]+]]:fpr16 = ninf nofpexcept BFCVT killed [[FADDSrr]], implicit $fpcr139  ; CHECK-BF16-NEXT:   $h0 = COPY [[BFCVT]]140  ; CHECK-BF16-NEXT:   RET_ReallyLR implicit $h0141entry:142  %add = fadd ninf bfloat %x, %y143  ret bfloat %add144}145 146; Check that when we have the right fast math flags the converts in between the147; two fadds are removed.148 149define bfloat @normal_fadd_sequence(bfloat %x, bfloat %y, bfloat %z) {150  ; CHECK-NOBF16-LABEL: name: normal_fadd_sequence151  ; CHECK-NOBF16: bb.0.entry:152  ; CHECK-NOBF16-NEXT:   liveins: $h0, $h1, $h2153  ; CHECK-NOBF16-NEXT: {{  $}}154  ; CHECK-NOBF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h2155  ; CHECK-NOBF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h1156  ; CHECK-NOBF16-NEXT:   [[COPY2:%[0-9]+]]:fpr16 = COPY $h0157  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub158  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]159  ; CHECK-NOBF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub160  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY2]], %subreg.hsub161  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]162  ; CHECK-NOBF16-NEXT:   [[COPY4:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub163  ; CHECK-NOBF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[COPY4]], killed [[COPY3]], implicit $fpcr164  ; CHECK-NOBF16-NEXT:   [[COPY5:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr]]165  ; CHECK-NOBF16-NEXT:   [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY5]], 16, 16166  ; CHECK-NOBF16-NEXT:   [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri]], [[COPY5]]167  ; CHECK-NOBF16-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 32767168  ; CHECK-NOBF16-NEXT:   [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr]], [[MOVi32imm]]169  ; CHECK-NOBF16-NEXT:   [[UBFMWri1:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr1]], 16, 31170  ; CHECK-NOBF16-NEXT:   [[COPY6:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri1]]171  ; CHECK-NOBF16-NEXT:   [[COPY7:%[0-9]+]]:fpr16 = COPY [[COPY6]].hsub172  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG2:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, killed [[COPY7]], %subreg.hsub173  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_2:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG2]]174  ; CHECK-NOBF16-NEXT:   [[COPY8:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_2]].ssub175  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG3:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub176  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_3:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG3]]177  ; CHECK-NOBF16-NEXT:   [[COPY9:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_3]].ssub178  ; CHECK-NOBF16-NEXT:   [[FADDSrr1:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[COPY8]], killed [[COPY9]], implicit $fpcr179  ; CHECK-NOBF16-NEXT:   [[COPY10:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr1]]180  ; CHECK-NOBF16-NEXT:   [[UBFMWri2:%[0-9]+]]:gpr32 = UBFMWri [[COPY10]], 16, 16181  ; CHECK-NOBF16-NEXT:   [[ADDWrr2:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri2]], [[COPY10]]182  ; CHECK-NOBF16-NEXT:   [[ADDWrr3:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr2]], [[MOVi32imm]]183  ; CHECK-NOBF16-NEXT:   [[UBFMWri3:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr3]], 16, 31184  ; CHECK-NOBF16-NEXT:   [[COPY11:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri3]]185  ; CHECK-NOBF16-NEXT:   [[COPY12:%[0-9]+]]:fpr16 = COPY [[COPY11]].hsub186  ; CHECK-NOBF16-NEXT:   $h0 = COPY [[COPY12]]187  ; CHECK-NOBF16-NEXT:   RET_ReallyLR implicit $h0188  ;189  ; CHECK-BF16-LABEL: name: normal_fadd_sequence190  ; CHECK-BF16: bb.0.entry:191  ; CHECK-BF16-NEXT:   liveins: $h0, $h1, $h2192  ; CHECK-BF16-NEXT: {{  $}}193  ; CHECK-BF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h2194  ; CHECK-BF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h1195  ; CHECK-BF16-NEXT:   [[COPY2:%[0-9]+]]:fpr16 = COPY $h0196  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub197  ; CHECK-BF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]198  ; CHECK-BF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub199  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY2]], %subreg.hsub200  ; CHECK-BF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]201  ; CHECK-BF16-NEXT:   [[COPY4:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub202  ; CHECK-BF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[COPY4]], killed [[COPY3]], implicit $fpcr203  ; CHECK-BF16-NEXT:   [[BFCVT:%[0-9]+]]:fpr16 = nofpexcept BFCVT killed [[FADDSrr]], implicit $fpcr204  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG2:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, killed [[BFCVT]], %subreg.hsub205  ; CHECK-BF16-NEXT:   [[SHLLv4i16_2:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG2]]206  ; CHECK-BF16-NEXT:   [[COPY5:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_2]].ssub207  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG3:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub208  ; CHECK-BF16-NEXT:   [[SHLLv4i16_3:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG3]]209  ; CHECK-BF16-NEXT:   [[COPY6:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_3]].ssub210  ; CHECK-BF16-NEXT:   [[FADDSrr1:%[0-9]+]]:fpr32 = nofpexcept FADDSrr killed [[COPY5]], killed [[COPY6]], implicit $fpcr211  ; CHECK-BF16-NEXT:   [[BFCVT1:%[0-9]+]]:fpr16 = nofpexcept BFCVT killed [[FADDSrr1]], implicit $fpcr212  ; CHECK-BF16-NEXT:   $h0 = COPY [[BFCVT1]]213  ; CHECK-BF16-NEXT:   RET_ReallyLR implicit $h0214entry:215  %add1 = fadd bfloat %x, %y216  %add2 = fadd bfloat %add1, %z217  ret bfloat %add2218}219 220define bfloat @nnan_ninf_contract_fadd_sequence(bfloat %x, bfloat %y, bfloat %z) {221  ; CHECK-NOBF16-LABEL: name: nnan_ninf_contract_fadd_sequence222  ; CHECK-NOBF16: bb.0.entry:223  ; CHECK-NOBF16-NEXT:   liveins: $h0, $h1, $h2224  ; CHECK-NOBF16-NEXT: {{  $}}225  ; CHECK-NOBF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h2226  ; CHECK-NOBF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h1227  ; CHECK-NOBF16-NEXT:   [[COPY2:%[0-9]+]]:fpr16 = COPY $h0228  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub229  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]230  ; CHECK-NOBF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub231  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY2]], %subreg.hsub232  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]233  ; CHECK-NOBF16-NEXT:   [[COPY4:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub234  ; CHECK-NOBF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FADDSrr killed [[COPY4]], killed [[COPY3]], implicit $fpcr235  ; CHECK-NOBF16-NEXT:   [[COPY5:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr]]236  ; CHECK-NOBF16-NEXT:   [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY5]], 16, 16237  ; CHECK-NOBF16-NEXT:   [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri]], [[COPY5]]238  ; CHECK-NOBF16-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 32767239  ; CHECK-NOBF16-NEXT:   [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr]], [[MOVi32imm]]240  ; CHECK-NOBF16-NEXT:   [[UBFMWri1:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr1]], 16, 31241  ; CHECK-NOBF16-NEXT:   [[COPY6:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri1]]242  ; CHECK-NOBF16-NEXT:   [[COPY7:%[0-9]+]]:fpr16 = COPY [[COPY6]].hsub243  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG2:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, killed [[COPY7]], %subreg.hsub244  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_2:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG2]]245  ; CHECK-NOBF16-NEXT:   [[COPY8:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_2]].ssub246  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG3:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub247  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_3:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG3]]248  ; CHECK-NOBF16-NEXT:   [[COPY9:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_3]].ssub249  ; CHECK-NOBF16-NEXT:   [[FADDSrr1:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FADDSrr killed [[COPY8]], killed [[COPY9]], implicit $fpcr250  ; CHECK-NOBF16-NEXT:   [[COPY10:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr1]]251  ; CHECK-NOBF16-NEXT:   [[UBFMWri2:%[0-9]+]]:gpr32 = UBFMWri [[COPY10]], 16, 16252  ; CHECK-NOBF16-NEXT:   [[ADDWrr2:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri2]], [[COPY10]]253  ; CHECK-NOBF16-NEXT:   [[ADDWrr3:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr2]], [[MOVi32imm]]254  ; CHECK-NOBF16-NEXT:   [[UBFMWri3:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr3]], 16, 31255  ; CHECK-NOBF16-NEXT:   [[COPY11:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri3]]256  ; CHECK-NOBF16-NEXT:   [[COPY12:%[0-9]+]]:fpr16 = COPY [[COPY11]].hsub257  ; CHECK-NOBF16-NEXT:   $h0 = COPY [[COPY12]]258  ; CHECK-NOBF16-NEXT:   RET_ReallyLR implicit $h0259  ;260  ; CHECK-BF16-LABEL: name: nnan_ninf_contract_fadd_sequence261  ; CHECK-BF16: bb.0.entry:262  ; CHECK-BF16-NEXT:   liveins: $h0, $h1, $h2263  ; CHECK-BF16-NEXT: {{  $}}264  ; CHECK-BF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h2265  ; CHECK-BF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h1266  ; CHECK-BF16-NEXT:   [[COPY2:%[0-9]+]]:fpr16 = COPY $h0267  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub268  ; CHECK-BF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]269  ; CHECK-BF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub270  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY2]], %subreg.hsub271  ; CHECK-BF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]272  ; CHECK-BF16-NEXT:   [[COPY4:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub273  ; CHECK-BF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FADDSrr killed [[COPY4]], killed [[COPY3]], implicit $fpcr274  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG2:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub275  ; CHECK-BF16-NEXT:   [[SHLLv4i16_2:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG2]]276  ; CHECK-BF16-NEXT:   [[COPY5:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_2]].ssub277  ; CHECK-BF16-NEXT:   [[FADDSrr1:%[0-9]+]]:fpr32 = nnan ninf contract nofpexcept FADDSrr killed [[FADDSrr]], killed [[COPY5]], implicit $fpcr278  ; CHECK-BF16-NEXT:   [[BFCVT:%[0-9]+]]:fpr16 = nnan ninf contract nofpexcept BFCVT killed [[FADDSrr1]], implicit $fpcr279  ; CHECK-BF16-NEXT:   $h0 = COPY [[BFCVT]]280  ; CHECK-BF16-NEXT:   RET_ReallyLR implicit $h0281entry:282  %add1 = fadd nnan ninf contract bfloat %x, %y283  %add2 = fadd nnan ninf contract bfloat %add1, %z284  ret bfloat %add2285}286 287define bfloat @ninf_fadd_sequence(bfloat %x, bfloat %y, bfloat %z) {288  ; CHECK-NOBF16-LABEL: name: ninf_fadd_sequence289  ; CHECK-NOBF16: bb.0.entry:290  ; CHECK-NOBF16-NEXT:   liveins: $h0, $h1, $h2291  ; CHECK-NOBF16-NEXT: {{  $}}292  ; CHECK-NOBF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h2293  ; CHECK-NOBF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h1294  ; CHECK-NOBF16-NEXT:   [[COPY2:%[0-9]+]]:fpr16 = COPY $h0295  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub296  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]297  ; CHECK-NOBF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub298  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY2]], %subreg.hsub299  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]300  ; CHECK-NOBF16-NEXT:   [[COPY4:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub301  ; CHECK-NOBF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[COPY4]], killed [[COPY3]], implicit $fpcr302  ; CHECK-NOBF16-NEXT:   [[COPY5:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr]]303  ; CHECK-NOBF16-NEXT:   [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY5]], 16, 16304  ; CHECK-NOBF16-NEXT:   [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri]], [[COPY5]]305  ; CHECK-NOBF16-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 32767306  ; CHECK-NOBF16-NEXT:   [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr]], [[MOVi32imm]]307  ; CHECK-NOBF16-NEXT:   [[UBFMWri1:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr1]], 16, 31308  ; CHECK-NOBF16-NEXT:   [[COPY6:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri1]]309  ; CHECK-NOBF16-NEXT:   [[COPY7:%[0-9]+]]:fpr16 = COPY [[COPY6]].hsub310  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG2:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, killed [[COPY7]], %subreg.hsub311  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_2:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG2]]312  ; CHECK-NOBF16-NEXT:   [[COPY8:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_2]].ssub313  ; CHECK-NOBF16-NEXT:   [[SUBREG_TO_REG3:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub314  ; CHECK-NOBF16-NEXT:   [[SHLLv4i16_3:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG3]]315  ; CHECK-NOBF16-NEXT:   [[COPY9:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_3]].ssub316  ; CHECK-NOBF16-NEXT:   [[FADDSrr1:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[COPY8]], killed [[COPY9]], implicit $fpcr317  ; CHECK-NOBF16-NEXT:   [[COPY10:%[0-9]+]]:gpr32 = COPY killed [[FADDSrr1]]318  ; CHECK-NOBF16-NEXT:   [[UBFMWri2:%[0-9]+]]:gpr32 = UBFMWri [[COPY10]], 16, 16319  ; CHECK-NOBF16-NEXT:   [[ADDWrr2:%[0-9]+]]:gpr32 = ADDWrr killed [[UBFMWri2]], [[COPY10]]320  ; CHECK-NOBF16-NEXT:   [[ADDWrr3:%[0-9]+]]:gpr32 = ADDWrr killed [[ADDWrr2]], [[MOVi32imm]]321  ; CHECK-NOBF16-NEXT:   [[UBFMWri3:%[0-9]+]]:gpr32 = UBFMWri killed [[ADDWrr3]], 16, 31322  ; CHECK-NOBF16-NEXT:   [[COPY11:%[0-9]+]]:fpr32 = COPY killed [[UBFMWri3]]323  ; CHECK-NOBF16-NEXT:   [[COPY12:%[0-9]+]]:fpr16 = COPY [[COPY11]].hsub324  ; CHECK-NOBF16-NEXT:   $h0 = COPY [[COPY12]]325  ; CHECK-NOBF16-NEXT:   RET_ReallyLR implicit $h0326  ;327  ; CHECK-BF16-LABEL: name: ninf_fadd_sequence328  ; CHECK-BF16: bb.0.entry:329  ; CHECK-BF16-NEXT:   liveins: $h0, $h1, $h2330  ; CHECK-BF16-NEXT: {{  $}}331  ; CHECK-BF16-NEXT:   [[COPY:%[0-9]+]]:fpr16 = COPY $h2332  ; CHECK-BF16-NEXT:   [[COPY1:%[0-9]+]]:fpr16 = COPY $h1333  ; CHECK-BF16-NEXT:   [[COPY2:%[0-9]+]]:fpr16 = COPY $h0334  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY1]], %subreg.hsub335  ; CHECK-BF16-NEXT:   [[SHLLv4i16_:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG]]336  ; CHECK-BF16-NEXT:   [[COPY3:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_]].ssub337  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG1:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY2]], %subreg.hsub338  ; CHECK-BF16-NEXT:   [[SHLLv4i16_1:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG1]]339  ; CHECK-BF16-NEXT:   [[COPY4:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_1]].ssub340  ; CHECK-BF16-NEXT:   [[FADDSrr:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[COPY4]], killed [[COPY3]], implicit $fpcr341  ; CHECK-BF16-NEXT:   [[BFCVT:%[0-9]+]]:fpr16 = ninf nofpexcept BFCVT killed [[FADDSrr]], implicit $fpcr342  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG2:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, killed [[BFCVT]], %subreg.hsub343  ; CHECK-BF16-NEXT:   [[SHLLv4i16_2:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG2]]344  ; CHECK-BF16-NEXT:   [[COPY5:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_2]].ssub345  ; CHECK-BF16-NEXT:   [[SUBREG_TO_REG3:%[0-9]+]]:fpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.hsub346  ; CHECK-BF16-NEXT:   [[SHLLv4i16_3:%[0-9]+]]:fpr128 = SHLLv4i16 killed [[SUBREG_TO_REG3]]347  ; CHECK-BF16-NEXT:   [[COPY6:%[0-9]+]]:fpr32 = COPY [[SHLLv4i16_3]].ssub348  ; CHECK-BF16-NEXT:   [[FADDSrr1:%[0-9]+]]:fpr32 = ninf nofpexcept FADDSrr killed [[COPY5]], killed [[COPY6]], implicit $fpcr349  ; CHECK-BF16-NEXT:   [[BFCVT1:%[0-9]+]]:fpr16 = ninf nofpexcept BFCVT killed [[FADDSrr1]], implicit $fpcr350  ; CHECK-BF16-NEXT:   $h0 = COPY [[BFCVT1]]351  ; CHECK-BF16-NEXT:   RET_ReallyLR implicit $h0352entry:353  %add1 = fadd ninf bfloat %x, %y354  %add2 = fadd ninf bfloat %add1, %z355  ret bfloat %add2356}357