brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · 4293006 Raw
179 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -run-pass=machine-sink -sink-insts-to-avoid-spills \3# RUN:   -machine-sink-cycle-limit=1 -verify-machineinstrs %s -o - 2>&1 | \4# RUN:   FileCheck %s --check-prefix=SINK15#6# RUN: llc -mtriple aarch64 -run-pass=machine-sink -sink-insts-to-avoid-spills \7# RUN:   -machine-sink-cycle-limit=2 -verify-machineinstrs %s -o - 2>&1 | \8# RUN:   FileCheck %s --check-prefix=SINK29 10--- |11  target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"12  target triple = "aarch64"13 14  @A = external dso_local global [100 x i32], align 415  %struct.A = type { i32, i32, i32, i32, i32, i32 }16 17  define i32 @do_sink_use_is_not_a_copy(i32 %n) {18  entry:19    %cmp63 = icmp sgt i32 %n, 020    br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup21 22  for.body.preheader:                               ; preds = %entry23    %0 = load i32, ptr @A, align 424    br label %for.body25 26  for.cond.cleanup:                                 ; preds = %for.body, %entry27    %sum.0.lcssa = phi i32 [ %n, %entry ], [ %div, %for.body ]28    ret i32 %sum.0.lcssa29 30  for.body:                                         ; preds = %for.body, %for.body.preheader31    %lsr.iv = phi i32 [ %n, %for.body.preheader ], [ %lsr.iv.next, %for.body ]32    %sum.065 = phi i32 [ %div, %for.body ], [ %n, %for.body.preheader ]33    %div = sdiv i32 %sum.065, %034    %lsr.iv.next = add i32 %lsr.iv, -135    %exitcond.not = icmp eq i32 %lsr.iv.next, 036    br i1 %exitcond.not, label %for.cond.cleanup, label %for.body37  }38 39...40---41name:            do_sink_use_is_not_a_copy42alignment:       443exposesReturnsTwice: false44legalized:       false45regBankSelected: false46selected:        false47failedISel:      false48tracksRegLiveness: true49hasWinCFI:       false50registers:51  - { id: 0, class: gpr32, preferred-register: '' }52  - { id: 1, class: gpr32all, preferred-register: '' }53  - { id: 2, class: gpr32sp, preferred-register: '' }54  - { id: 3, class: gpr32, preferred-register: '' }55  - { id: 4, class: gpr32all, preferred-register: '' }56  - { id: 5, class: gpr32all, preferred-register: '' }57  - { id: 6, class: gpr32common, preferred-register: '' }58  - { id: 7, class: gpr32, preferred-register: '' }59  - { id: 8, class: gpr64common, preferred-register: '' }60  - { id: 9, class: gpr32, preferred-register: '' }61  - { id: 10, class: gpr32, preferred-register: '' }62  - { id: 11, class: gpr32, preferred-register: '' }63liveins:64  - { reg: '$w0', virtual-reg: '%6' }65frameInfo:66  isFrameAddressTaken: false67  isReturnAddressTaken: false68  hasStackMap:     false69  hasPatchPoint:   false70  stackSize:       071  offsetAdjustment: 072  maxAlignment:    173  adjustsStack:    false74  hasCalls:        false75  stackProtector:  ''76  maxCallFrameSize: 077  cvBytesOfCalleeSavedRegisters: 078  hasOpaqueSPAdjustment: false79  hasVAStart:      false80  hasMustTailInVarArgFunc: false81  localFrameSize:  082  savePoint:       []83  restorePoint:    []84fixedStack:      []85stack:           []86callSites:       []87debugValueSubstitutions: []88constants:       []89machineFunctionInfo: {}90body:             |91  ; SINK1-LABEL: name: do_sink_use_is_not_a_copy92  ; SINK1: bb.0.entry:93  ; SINK1:   successors: %bb.1(0x50000000), %bb.2(0x30000000)94  ; SINK1:   liveins: $w095  ; SINK1:   [[COPY:%[0-9]+]]:gpr32common = COPY $w096  ; SINK1:   [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri [[COPY]], 1, 0, implicit-def $nzcv97  ; SINK1:   Bcc 11, %bb.2, implicit $nzcv98  ; SINK1:   B %bb.199  ; SINK1: bb.1.for.body.preheader:100  ; SINK1:   successors: %bb.3(0x80000000)101  ; SINK1:   [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) @A102  ; SINK1:   [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A)103  ; SINK1:   B %bb.3104  ; SINK1: bb.2.for.cond.cleanup:105  ; SINK1:   [[PHI:%[0-9]+]]:gpr32all = PHI [[COPY]], %bb.0, %4, %bb.3106  ; SINK1:   $w0 = COPY [[PHI]]107  ; SINK1:   RET_ReallyLR implicit $w0108  ; SINK1: bb.3.for.body:109  ; SINK1:   successors: %bb.2(0x04000000), %bb.3(0x7c000000)110  ; SINK1:   [[PHI1:%[0-9]+]]:gpr32sp = PHI [[COPY]], %bb.1, %5, %bb.3111  ; SINK1:   [[PHI2:%[0-9]+]]:gpr32 = PHI [[COPY]], %bb.1, %4, %bb.3112  ; SINK1:   [[SDIVWr:%[0-9]+]]:gpr32 = SDIVWr [[PHI2]], [[LDRWui]]113  ; SINK1:   [[COPY1:%[0-9]+]]:gpr32all = COPY [[SDIVWr]]114  ; SINK1:   [[SUBSWri1:%[0-9]+]]:gpr32 = SUBSWri [[PHI1]], 1, 0, implicit-def $nzcv115  ; SINK1:   [[COPY2:%[0-9]+]]:gpr32all = COPY [[SUBSWri1]]116  ; SINK1:   Bcc 0, %bb.2, implicit $nzcv117  ; SINK1:   B %bb.3118  ; SINK2-LABEL: name: do_sink_use_is_not_a_copy119  ; SINK2: bb.0.entry:120  ; SINK2:   successors: %bb.1(0x50000000), %bb.2(0x30000000)121  ; SINK2:   liveins: $w0122  ; SINK2:   [[COPY:%[0-9]+]]:gpr32common = COPY $w0123  ; SINK2:   [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri [[COPY]], 1, 0, implicit-def $nzcv124  ; SINK2:   Bcc 11, %bb.2, implicit $nzcv125  ; SINK2:   B %bb.1126  ; SINK2: bb.1.for.body.preheader:127  ; SINK2:   successors: %bb.3(0x80000000)128  ; SINK2:   [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) @A129  ; SINK2:   [[LDRWui:%[0-9]+]]:gpr32 = LDRWui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A)130  ; SINK2:   B %bb.3131  ; SINK2: bb.2.for.cond.cleanup:132  ; SINK2:   [[PHI:%[0-9]+]]:gpr32all = PHI [[COPY]], %bb.0, %4, %bb.3133  ; SINK2:   $w0 = COPY [[PHI]]134  ; SINK2:   RET_ReallyLR implicit $w0135  ; SINK2: bb.3.for.body:136  ; SINK2:   successors: %bb.2(0x04000000), %bb.3(0x7c000000)137  ; SINK2:   [[PHI1:%[0-9]+]]:gpr32sp = PHI [[COPY]], %bb.1, %5, %bb.3138  ; SINK2:   [[PHI2:%[0-9]+]]:gpr32 = PHI [[COPY]], %bb.1, %4, %bb.3139  ; SINK2:   [[SDIVWr:%[0-9]+]]:gpr32 = SDIVWr [[PHI2]], [[LDRWui]]140  ; SINK2:   [[COPY1:%[0-9]+]]:gpr32all = COPY [[SDIVWr]]141  ; SINK2:   [[SUBSWri1:%[0-9]+]]:gpr32 = SUBSWri [[PHI1]], 1, 0, implicit-def $nzcv142  ; SINK2:   [[COPY2:%[0-9]+]]:gpr32all = COPY [[SUBSWri1]]143  ; SINK2:   Bcc 0, %bb.2, implicit $nzcv144  ; SINK2:   B %bb.3145  bb.0.entry:146    successors: %bb.1(0x50000000), %bb.2(0x30000000)147    liveins: $w0148 149    %6:gpr32common = COPY $w0150    %7:gpr32 = SUBSWri %6, 1, 0, implicit-def $nzcv151    Bcc 11, %bb.2, implicit $nzcv152    B %bb.1153 154  bb.1.for.body.preheader:155    successors: %bb.3(0x80000000)156 157    %8:gpr64common = ADRP target-flags(aarch64-page) @A158    %9:gpr32 = LDRWui killed %8, target-flags(aarch64-pageoff, aarch64-nc) @A :: (dereferenceable load (s32) from @A)159    B %bb.3160 161  bb.2.for.cond.cleanup:162    %1:gpr32all = PHI %6, %bb.0, %4, %bb.3163    $w0 = COPY %1164    RET_ReallyLR implicit $w0165 166  bb.3.for.body:167    successors: %bb.2(0x04000000), %bb.3(0x7c000000)168 169    %2:gpr32sp = PHI %6, %bb.1, %5, %bb.3170    %3:gpr32 = PHI %6, %bb.1, %4, %bb.3171    %10:gpr32 = SDIVWr %3, %9172    %4:gpr32all = COPY %10173    %11:gpr32 = SUBSWri %2, 1, 0, implicit-def $nzcv174    %5:gpr32all = COPY %11175    Bcc 0, %bb.2, implicit $nzcv176    B %bb.3177 178...179