127 lines · plain
1# RUN: llc -run-pass=machine-combiner -mtriple=aarch64-unknown-linux-gnu %s -o - | FileCheck %s2 3# fadd without the reassoc flags can be reassociate only when unsafe fp math is4# enabled.5# CHECK-LABEL: name: fadd_no_reassoc6# CHECK: [[ADD1:%[0-9]+]]:fpr32 = FADDSrr %0, %1, implicit $fpcr7# CHECK: [[ADD2:%[0-9]+]]:fpr32 = FADDSrr killed [[ADD1]], %2, implicit $fpcr8# CHECK: [[ADD3:%[0-9]+]]:fpr32 = FADDSrr killed [[ADD2]], %3, implicit $fpcr9---10name: fadd_no_reassoc11alignment: 412tracksRegLiveness: true13registers:14 - { id: 0, class: fpr32 }15 - { id: 1, class: fpr32 }16 - { id: 2, class: fpr32 }17 - { id: 3, class: fpr32 }18 - { id: 4, class: fpr32 }19 - { id: 5, class: fpr32 }20 - { id: 6, class: fpr32 }21liveins:22 - { reg: '$s0', virtual-reg: '%0' }23 - { reg: '$s1', virtual-reg: '%1' }24 - { reg: '$s2', virtual-reg: '%2' }25 - { reg: '$s3', virtual-reg: '%3' }26frameInfo:27 maxAlignment: 128 maxCallFrameSize: 029machineFunctionInfo: {}30body: |31 bb.0.entry:32 liveins: $s0, $s1, $s2, $s333 34 %3:fpr32 = COPY $s335 %2:fpr32 = COPY $s236 %1:fpr32 = COPY $s137 %0:fpr32 = COPY $s038 %4:fpr32 = FADDSrr %0, %1, implicit $fpcr39 %5:fpr32 = FADDSrr killed %4, %2, implicit $fpcr40 %6:fpr32 = FADDSrr killed %5, %3, implicit $fpcr41 $s0 = COPY %642 RET_ReallyLR implicit $s043 44 45# FIXME: We should be able to reassociate without unsafe fp math, but currently46# the reassoc flag is ignored.47# CHECK-LABEL: name: fadd_reassoc48# CHECK: [[ADD1:%[0-9]+]]:fpr32 = reassoc FADDSrr %0, %1, implicit $fpcr49# CHECK: [[ADD2:%[0-9]+]]:fpr32 = reassoc FADDSrr killed [[ADD1]], %2, implicit $fpcr50# CHECK: [[ADD3:%[0-9]+]]:fpr32 = reassoc FADDSrr killed [[ADD2]], %3, implicit $fpcr51 52---53name: fadd_reassoc54alignment: 455tracksRegLiveness: true56registers:57 - { id: 0, class: fpr32 }58 - { id: 1, class: fpr32 }59 - { id: 2, class: fpr32 }60 - { id: 3, class: fpr32 }61 - { id: 4, class: fpr32 }62 - { id: 5, class: fpr32 }63 - { id: 6, class: fpr32 }64liveins:65 - { reg: '$s0', virtual-reg: '%0' }66 - { reg: '$s1', virtual-reg: '%1' }67 - { reg: '$s2', virtual-reg: '%2' }68 - { reg: '$s3', virtual-reg: '%3' }69frameInfo:70 maxAlignment: 171 maxCallFrameSize: 072machineFunctionInfo: {}73body: |74 bb.0.entry:75 liveins: $s0, $s1, $s2, $s376 77 %3:fpr32 = COPY $s378 %2:fpr32 = COPY $s279 %1:fpr32 = COPY $s180 %0:fpr32 = COPY $s081 %4:fpr32 = reassoc FADDSrr %0, %1, implicit $fpcr82 %5:fpr32 = reassoc FADDSrr killed %4, %2, implicit $fpcr83 %6:fpr32 = reassoc FADDSrr killed %5, %3, implicit $fpcr84 $s0 = COPY %685 RET_ReallyLR implicit $s086 87 88# Check that flags on the instructions are preserved after reassociation.89# CHECK-LABEL: name: fadd_flags90# CHECK: [[ADD1:%[0-9]+]]:fpr32 = nnan ninf nsz FADDSrr %0, %1, implicit $fpcr91# CHECK: [[ADD2:%[0-9]+]]:fpr32 = nnan nsz FADDSrr killed [[ADD1]], %2, implicit $fpcr92# CHECK: [[ADD3:%[0-9]+]]:fpr32 = ninf nsz FADDSrr killed [[ADD2]], %3, implicit $fpcr93---94name: fadd_flags95alignment: 496tracksRegLiveness: true97registers:98 - { id: 0, class: fpr32 }99 - { id: 1, class: fpr32 }100 - { id: 2, class: fpr32 }101 - { id: 3, class: fpr32 }102 - { id: 4, class: fpr32 }103 - { id: 5, class: fpr32 }104 - { id: 6, class: fpr32 }105liveins:106 - { reg: '$s0', virtual-reg: '%0' }107 - { reg: '$s1', virtual-reg: '%1' }108 - { reg: '$s2', virtual-reg: '%2' }109 - { reg: '$s3', virtual-reg: '%3' }110frameInfo:111 maxAlignment: 1112 maxCallFrameSize: 0113machineFunctionInfo: {}114body: |115 bb.0.entry:116 liveins: $s0, $s1, $s2, $s3117 118 %3:fpr32 = COPY $s3119 %2:fpr32 = COPY $s2120 %1:fpr32 = COPY $s1121 %0:fpr32 = COPY $s0122 %4:fpr32 = nsz nnan ninf FADDSrr %0, %1, implicit $fpcr123 %5:fpr32 = nsz nnan FADDSrr killed %4, %2, implicit $fpcr124 %6:fpr32 = nsz ninf FADDSrr killed %5, %3, implicit $fpcr125 $s0 = COPY %6126 RET_ReallyLR implicit $s0127