
In review of bbde6b, I had originally proposed that we support the legacy text format. As review evolved, it bacame clear this had been a bad idea (too much complexity), but in order to let that patch finally move forward, I approved the change with the variant. This change undoes the variant, and updates all the tests to just use the array form.
413 lines
21 KiB
YAML
413 lines
21 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -mtriple aarch64 -aarch64-enable-subreg-liveness-tracking --run-pass=greedy,virtregrewriter -verify-machineinstrs %s -o - | FileCheck %s
|
|
|
|
# We should ideally not spill around any of the SUBSWri in the loop exit blocks (if.end and if.end27).
|
|
|
|
--- |
|
|
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
|
|
target triple = "aarch64"
|
|
|
|
@g = dso_local local_unnamed_addr global [9 x [9 x i32]] zeroinitializer, align 4
|
|
|
|
define void @test(ptr nocapture noundef readonly %p, i32 noundef %m, ptr noundef %q) {
|
|
entry:
|
|
%0 = load i32, ptr %p, align 4
|
|
%spec.select = tail call i32 @llvm.smax.i32(i32 %0, i32 1)
|
|
%arrayidx2 = getelementptr inbounds i32, ptr %p, i64 1
|
|
%1 = load i32, ptr %arrayidx2, align 4
|
|
%cond8 = tail call i32 @llvm.smax.i32(i32 %1, i32 1)
|
|
br label %do.body
|
|
|
|
do.body: ; preds = %if.end27, %entry
|
|
%indvars.iv49 = phi i64 [ %indvars.iv.next50, %if.end27 ], [ 0, %entry ]
|
|
%n0.0 = phi i32 [ %dec30, %if.end27 ], [ %spec.select, %entry ]
|
|
%n1.0 = phi i32 [ %n1.2, %if.end27 ], [ %cond8, %entry ]
|
|
%arrayidx9 = getelementptr inbounds [9 x [9 x i32]], ptr @g, i64 0, i64 %indvars.iv49
|
|
%2 = load i32, ptr %arrayidx9, align 4
|
|
%cmp11 = icmp sgt i32 %2, 0
|
|
br i1 %cmp11, label %do.body12.preheader, label %if.end27
|
|
|
|
do.body12.preheader: ; preds = %do.body
|
|
br label %do.body12
|
|
|
|
do.body12: ; preds = %do.body12.preheader, %if.end
|
|
%indvars.iv = phi i64 [ %indvars.iv.next, %if.end ], [ 0, %do.body12.preheader ]
|
|
%n1.1 = phi i32 [ %dec, %if.end ], [ %n1.0, %do.body12.preheader ]
|
|
%arrayidx14 = getelementptr inbounds [9 x [9 x i32]], ptr @g, i64 0, i64 %indvars.iv
|
|
%3 = load i32, ptr %arrayidx14, align 4
|
|
%cmp16 = icmp sgt i32 %3, 0
|
|
br i1 %cmp16, label %if.then17, label %if.end
|
|
|
|
if.then17: ; preds = %do.body12
|
|
%arrayidx19 = getelementptr inbounds i32, ptr %q, i64 %indvars.iv
|
|
%4 = load volatile i32, ptr %arrayidx19, align 4
|
|
br label %for.body
|
|
|
|
for.cond.cleanup: ; preds = %for.body
|
|
tail call void asm sideeffect "nop;nop", "~{x0},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{fp},~{lr}"() #3
|
|
%sunkaddr = mul i64 %indvars.iv, 4
|
|
%sunkaddr1 = getelementptr inbounds i8, ptr %q, i64 %sunkaddr
|
|
store volatile i32 %add, ptr %sunkaddr1, align 4
|
|
br label %if.end
|
|
|
|
for.body: ; preds = %for.body, %if.then17
|
|
%lsr.iv = phi i32 [ %lsr.iv.next, %for.body ], [ 100, %if.then17 ]
|
|
%s.046 = phi i32 [ %4, %if.then17 ], [ %add, %for.body ]
|
|
%call = tail call i32 @callee() #3
|
|
%add = add nsw i32 %call, %s.046
|
|
%lsr.iv.next = add nsw i32 %lsr.iv, -1
|
|
%exitcond.not = icmp eq i32 %lsr.iv.next, 0
|
|
br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
|
|
|
|
if.end: ; preds = %for.cond.cleanup, %do.body12
|
|
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
|
|
%dec = add nsw i32 %n1.1, -1
|
|
%cmp24.not = icmp eq i32 %dec, 0
|
|
br i1 %cmp24.not, label %do.end, label %do.body12
|
|
|
|
do.end: ; preds = %if.end
|
|
%arrayidx26 = getelementptr inbounds i32, ptr %q, i64 %indvars.iv49
|
|
store volatile i32 0, ptr %arrayidx26, align 4
|
|
br label %if.end27
|
|
|
|
if.end27: ; preds = %do.end, %do.body
|
|
%n1.2 = phi i32 [ 0, %do.end ], [ %n1.0, %do.body ]
|
|
%indvars.iv.next50 = add nuw nsw i64 %indvars.iv49, 1
|
|
%dec30 = add nsw i32 %n0.0, -1
|
|
%cmp31.not = icmp eq i32 %dec30, 0
|
|
br i1 %cmp31.not, label %do.end32, label %do.body
|
|
|
|
do.end32: ; preds = %if.end27
|
|
ret void
|
|
}
|
|
|
|
declare i32 @callee(...)
|
|
|
|
declare i32 @llvm.smax.i32(i32, i32) #2
|
|
...
|
|
---
|
|
name: test
|
|
alignment: 4
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
failedISel: false
|
|
tracksRegLiveness: true
|
|
hasWinCFI: false
|
|
callsEHReturn: false
|
|
callsUnwindInit: false
|
|
hasEHContTarget: false
|
|
hasEHScopes: false
|
|
hasEHFunclets: false
|
|
isOutlined: false
|
|
debugInstrRef: false
|
|
failsVerification: false
|
|
tracksDebugUserValues: false
|
|
registers:
|
|
- { id: 0, class: gpr32, preferred-register: '' }
|
|
- { id: 1, class: gpr32, preferred-register: '' }
|
|
- { id: 2, class: gpr64common, preferred-register: '' }
|
|
- { id: 3, class: gpr32sp, preferred-register: '' }
|
|
- { id: 4, class: gpr32all, preferred-register: '' }
|
|
- { id: 5, class: gpr64common, preferred-register: '' }
|
|
- { id: 6, class: gpr32sp, preferred-register: '' }
|
|
- { id: 7, class: gpr32, preferred-register: '' }
|
|
- { id: 8, class: gpr32sp, preferred-register: '' }
|
|
- { id: 9, class: gpr32, preferred-register: '' }
|
|
- { id: 10, class: gpr32, preferred-register: '' }
|
|
- { id: 11, class: gpr32, preferred-register: '' }
|
|
- { id: 12, class: gpr64sp, preferred-register: '' }
|
|
- { id: 13, class: gpr32, preferred-register: '' }
|
|
- { id: 14, class: gpr32all, preferred-register: '' }
|
|
- { id: 15, class: gpr64sp, preferred-register: '' }
|
|
- { id: 16, class: gpr32, preferred-register: '' }
|
|
- { id: 17, class: gpr64common, preferred-register: '' }
|
|
- { id: 18, class: gpr32, preferred-register: '' }
|
|
- { id: 19, class: gpr64common, preferred-register: '' }
|
|
- { id: 20, class: gpr64all, preferred-register: '' }
|
|
- { id: 21, class: gpr32common, preferred-register: '' }
|
|
- { id: 22, class: gpr32, preferred-register: '' }
|
|
- { id: 23, class: gpr32, preferred-register: '' }
|
|
- { id: 24, class: gpr32common, preferred-register: '' }
|
|
- { id: 25, class: gpr32, preferred-register: '' }
|
|
- { id: 26, class: gpr32, preferred-register: '' }
|
|
- { id: 27, class: gpr64all, preferred-register: '' }
|
|
- { id: 28, class: gpr32, preferred-register: '' }
|
|
- { id: 29, class: gpr64, preferred-register: '' }
|
|
- { id: 30, class: gpr64, preferred-register: '' }
|
|
- { id: 31, class: gpr64common, preferred-register: '' }
|
|
- { id: 32, class: gpr32common, preferred-register: '' }
|
|
- { id: 33, class: gpr32, preferred-register: '' }
|
|
- { id: 34, class: gpr64all, preferred-register: '' }
|
|
- { id: 35, class: gpr64all, preferred-register: '' }
|
|
- { id: 36, class: gpr32, preferred-register: '' }
|
|
- { id: 37, class: gpr64, preferred-register: '' }
|
|
- { id: 38, class: gpr64, preferred-register: '' }
|
|
- { id: 39, class: gpr64common, preferred-register: '' }
|
|
- { id: 40, class: gpr32common, preferred-register: '' }
|
|
- { id: 41, class: gpr32, preferred-register: '' }
|
|
- { id: 42, class: gpr32, preferred-register: '' }
|
|
- { id: 43, class: gpr32, preferred-register: '' }
|
|
- { id: 44, class: gpr32, preferred-register: '' }
|
|
- { id: 45, class: gpr32, preferred-register: '' }
|
|
- { id: 46, class: gpr32, preferred-register: '' }
|
|
- { id: 47, class: gpr32, preferred-register: '' }
|
|
- { id: 48, class: gpr64sp, preferred-register: '' }
|
|
- { id: 49, class: gpr32, preferred-register: '' }
|
|
- { id: 50, class: gpr32all, preferred-register: '' }
|
|
- { id: 51, class: gpr32, preferred-register: '' }
|
|
- { id: 52, class: gpr64sp, preferred-register: '' }
|
|
- { id: 53, class: gpr32, preferred-register: '' }
|
|
- { id: 54, class: gpr64common, preferred-register: '' }
|
|
- { id: 55, class: gpr32common, preferred-register: '' }
|
|
- { id: 56, class: gpr32common, preferred-register: '' }
|
|
- { id: 57, class: gpr64common, preferred-register: '' }
|
|
- { id: 58, class: gpr32common, preferred-register: '' }
|
|
- { id: 59, class: gpr32common, preferred-register: '' }
|
|
- { id: 60, class: gpr32, preferred-register: '' }
|
|
- { id: 61, class: gpr32all, preferred-register: '' }
|
|
liveins:
|
|
- { reg: '$x0', virtual-reg: '%17' }
|
|
- { reg: '$x2', virtual-reg: '%19' }
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 1
|
|
adjustsStack: true
|
|
hasCalls: true
|
|
stackProtector: ''
|
|
functionContext: ''
|
|
maxCallFrameSize: 0
|
|
cvBytesOfCalleeSavedRegisters: 0
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
hasTailCall: false
|
|
localFrameSize: 0
|
|
savePoint: []
|
|
restorePoint: []
|
|
fixedStack: []
|
|
stack: []
|
|
entry_values: []
|
|
callSites: []
|
|
debugValueSubstitutions: []
|
|
constants: []
|
|
machineFunctionInfo: {}
|
|
body: |
|
|
; CHECK-LABEL: name: test
|
|
; CHECK: bb.0.entry:
|
|
; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
; CHECK-NEXT: liveins: $x0, $x2
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $x10 = COPY $xzr
|
|
; CHECK-NEXT: renamable $w8 = LDRWui renamable $x0, 0 :: (load (s32) from %ir.p)
|
|
; CHECK-NEXT: renamable $w9 = LDRWui killed renamable $x0, 1 :: (load (s32) from %ir.arrayidx2)
|
|
; CHECK-NEXT: dead $wzr = SUBSWri renamable $w8, 1, 0, implicit-def $nzcv
|
|
; CHECK-NEXT: renamable $w11 = CSINCWr killed renamable $w8, $wzr, 12, implicit $nzcv
|
|
; CHECK-NEXT: renamable $x8 = COPY killed renamable $x10
|
|
; CHECK-NEXT: dead $wzr = SUBSWri renamable $w9, 1, 0, implicit-def $nzcv
|
|
; CHECK-NEXT: renamable $w10 = CSINCWr killed renamable $w9, $wzr, 12, implicit $nzcv
|
|
; CHECK-NEXT: STRXui renamable $x2, %stack.0, 0 :: (store (s64) into %stack.0)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.1.do.body:
|
|
; CHECK-NEXT: successors: %bb.3(0x50000000), %bb.2(0x30000000)
|
|
; CHECK-NEXT: liveins: $w10, $w11, $x2, $x8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: STRXui renamable $x8, %stack.1, 0 :: (store (s64) into %stack.1)
|
|
; CHECK-NEXT: renamable $w9 = MOVi32imm 36
|
|
; CHECK-NEXT: renamable $x8 = MADDXrrr killed renamable $x8, killed renamable $x9, $xzr
|
|
; CHECK-NEXT: renamable $x9 = MOVaddr target-flags(aarch64-page) @g, target-flags(aarch64-pageoff, aarch64-nc) @g
|
|
; CHECK-NEXT: renamable $w8 = LDRWroX killed renamable $x9, killed renamable $x8, 0, 0 :: (load (s32) from %ir.arrayidx9)
|
|
; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w8, 1, 0, implicit-def $nzcv
|
|
; CHECK-NEXT: Bcc 10, %bb.3, implicit $nzcv
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.2:
|
|
; CHECK-NEXT: successors: %bb.10(0x80000000)
|
|
; CHECK-NEXT: liveins: $w10, $w11, $x2
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $x8 = LDRXui %stack.1, 0 :: (load (s64) from %stack.1)
|
|
; CHECK-NEXT: B %bb.10
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.3.do.body12.preheader:
|
|
; CHECK-NEXT: successors: %bb.4(0x80000000)
|
|
; CHECK-NEXT: liveins: $w10, $w11, $x2
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $x12 = COPY $xzr
|
|
; CHECK-NEXT: STRWui renamable $w11, %stack.2, 0 :: (store (s32) into %stack.2)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.4.do.body12:
|
|
; CHECK-NEXT: successors: %bb.5(0x50000000), %bb.8(0x30000000)
|
|
; CHECK-NEXT: liveins: $w10, $w11, $x2, $x12
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $w8 = MOVi32imm 36
|
|
; CHECK-NEXT: renamable $x8 = MADDXrrr renamable $x12, killed renamable $x8, $xzr
|
|
; CHECK-NEXT: renamable $x9 = MOVaddr target-flags(aarch64-page) @g, target-flags(aarch64-pageoff, aarch64-nc) @g
|
|
; CHECK-NEXT: renamable $w8 = LDRWroX killed renamable $x9, killed renamable $x8, 0, 0 :: (load (s32) from %ir.arrayidx14)
|
|
; CHECK-NEXT: dead $wzr = SUBSWri killed renamable $w8, 1, 0, implicit-def $nzcv
|
|
; CHECK-NEXT: Bcc 11, %bb.8, implicit $nzcv
|
|
; CHECK-NEXT: B %bb.5
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.5.if.then17:
|
|
; CHECK-NEXT: successors: %bb.7(0x80000000)
|
|
; CHECK-NEXT: liveins: $w10, $x2, $x12
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: STRWui killed renamable $w10, %stack.3, 0 :: (store (s32) into %stack.3)
|
|
; CHECK-NEXT: STRXui renamable $x12, %stack.4, 0 :: (store (s64) into %stack.4)
|
|
; CHECK-NEXT: renamable $w20 = LDRWroX killed renamable $x2, killed renamable $x12, 0, 1 :: (volatile load (s32) from %ir.arrayidx19)
|
|
; CHECK-NEXT: renamable $w19 = MOVi32imm 100
|
|
; CHECK-NEXT: B %bb.7
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.6.for.cond.cleanup:
|
|
; CHECK-NEXT: successors: %bb.8(0x80000000)
|
|
; CHECK-NEXT: liveins: $w20
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $w1 = COPY killed renamable $w20
|
|
; CHECK-NEXT: INLINEASM &"nop;nop", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead early-clobber $x0, 12 /* clobber */, implicit-def dead early-clobber $x2, 12 /* clobber */, implicit-def dead early-clobber $x3, 12 /* clobber */, implicit-def dead early-clobber $x4, 12 /* clobber */, implicit-def dead early-clobber $x5, 12 /* clobber */, implicit-def dead early-clobber $x6, 12 /* clobber */, implicit-def dead early-clobber $x7, 12 /* clobber */, implicit-def dead early-clobber $x8, 12 /* clobber */, implicit-def dead early-clobber $x9, 12 /* clobber */, implicit-def dead early-clobber $x10, 12 /* clobber */, implicit-def dead early-clobber $x11, 12 /* clobber */, implicit-def dead early-clobber $x12, 12 /* clobber */, implicit-def dead early-clobber $x13, 12 /* clobber */, implicit-def dead early-clobber $x14, 12 /* clobber */, implicit-def dead early-clobber $x15, 12 /* clobber */, implicit-def dead early-clobber $x16, 12 /* clobber */, implicit-def dead early-clobber $x17, 12 /* clobber */, implicit-def dead early-clobber $x18, 12 /* clobber */, implicit-def dead early-clobber $x19, 12 /* clobber */, implicit-def dead early-clobber $x20, 12 /* clobber */, implicit-def dead early-clobber $x21, 12 /* clobber */, implicit-def dead early-clobber $x22, 12 /* clobber */, implicit-def dead early-clobber $x23, 12 /* clobber */, implicit-def dead early-clobber $x24, 12 /* clobber */, implicit-def dead early-clobber $x25, 12 /* clobber */, implicit-def dead early-clobber $x26, 12 /* clobber */, implicit-def dead early-clobber $x27, 12 /* clobber */, implicit-def dead early-clobber $x28, 12 /* clobber */, implicit-def dead early-clobber $fp, 12 /* clobber */, implicit-def dead early-clobber $lr
|
|
; CHECK-NEXT: renamable $x2 = LDRXui %stack.0, 0 :: (load (s64) from %stack.0)
|
|
; CHECK-NEXT: renamable $x12 = LDRXui %stack.4, 0 :: (load (s64) from %stack.4)
|
|
; CHECK-NEXT: STRWroX killed renamable $w1, renamable $x2, renamable $x12, 0, 1 :: (volatile store (s32) into %ir.sunkaddr1)
|
|
; CHECK-NEXT: renamable $w11 = LDRWui %stack.2, 0 :: (load (s32) from %stack.2)
|
|
; CHECK-NEXT: renamable $w10 = LDRWui %stack.3, 0 :: (load (s32) from %stack.3)
|
|
; CHECK-NEXT: B %bb.8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.7.for.body:
|
|
; CHECK-NEXT: successors: %bb.6(0x04000000), %bb.7(0x7c000000)
|
|
; CHECK-NEXT: liveins: $w19, $w20
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
|
; CHECK-NEXT: BL @callee, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
|
|
; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
|
|
; CHECK-NEXT: renamable $w19 = nsw SUBSWri killed renamable $w19, 1, 0, implicit-def $nzcv
|
|
; CHECK-NEXT: renamable $w20 = nsw ADDWrr killed renamable $w0, killed renamable $w20
|
|
; CHECK-NEXT: Bcc 0, %bb.6, implicit $nzcv
|
|
; CHECK-NEXT: B %bb.7
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.8.if.end:
|
|
; CHECK-NEXT: successors: %bb.9(0x04000000), %bb.4(0x7c000000)
|
|
; CHECK-NEXT: liveins: $w10, $w11, $x2, $x12
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $w10 = nsw SUBSWri killed renamable $w10, 1, 0, implicit-def $nzcv
|
|
; CHECK-NEXT: renamable $x12 = nuw nsw ADDXri killed renamable $x12, 1, 0
|
|
; CHECK-NEXT: Bcc 1, %bb.4, implicit $nzcv
|
|
; CHECK-NEXT: B %bb.9
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.9.do.end:
|
|
; CHECK-NEXT: successors: %bb.10(0x80000000)
|
|
; CHECK-NEXT: liveins: $w11, $x2
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $w10 = COPY $wzr
|
|
; CHECK-NEXT: renamable $x8 = LDRXui %stack.1, 0 :: (load (s64) from %stack.1)
|
|
; CHECK-NEXT: STRWroX $wzr, renamable $x2, renamable $x8, 0, 1 :: (volatile store (s32) into %ir.arrayidx26)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.10.if.end27:
|
|
; CHECK-NEXT: successors: %bb.11(0x04000000), %bb.1(0x7c000000)
|
|
; CHECK-NEXT: liveins: $w10, $w11, $x2, $x8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $w11 = nsw SUBSWri killed renamable $w11, 1, 0, implicit-def $nzcv
|
|
; CHECK-NEXT: renamable $x8 = nuw nsw ADDXri killed renamable $x8, 1, 0
|
|
; CHECK-NEXT: Bcc 1, %bb.1, implicit $nzcv
|
|
; CHECK-NEXT: B %bb.11
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.11.do.end32:
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
bb.0.entry:
|
|
successors: %bb.1(0x80000000)
|
|
liveins: $x0, $x2
|
|
|
|
%19:gpr64common = COPY $x2
|
|
%17:gpr64common = COPY $x0
|
|
%54:gpr64common = COPY $xzr
|
|
%21:gpr32common = LDRWui %17, 0 :: (load (s32) from %ir.p)
|
|
%24:gpr32common = LDRWui %17, 1 :: (load (s32) from %ir.arrayidx2)
|
|
dead $wzr = SUBSWri %21, 1, 0, implicit-def $nzcv
|
|
%55:gpr32common = CSINCWr %21, $wzr, 12, implicit $nzcv
|
|
dead $wzr = SUBSWri %24, 1, 0, implicit-def $nzcv
|
|
%56:gpr32common = CSINCWr %24, $wzr, 12, implicit $nzcv
|
|
undef %29.sub_32:gpr64 = MOVi32imm 36
|
|
%31:gpr64common = MOVaddr target-flags(aarch64-page) @g, target-flags(aarch64-pageoff, aarch64-nc) @g
|
|
|
|
bb.1.do.body:
|
|
successors: %bb.2(0x50000000), %bb.11(0x30000000)
|
|
|
|
%30:gpr64 = MADDXrrr %54, %29, $xzr
|
|
%32:gpr32common = LDRWroX %31, %30, 0, 0 :: (load (s32) from %ir.arrayidx9)
|
|
dead $wzr = SUBSWri %32, 1, 0, implicit-def $nzcv
|
|
Bcc 10, %bb.2, implicit $nzcv
|
|
|
|
bb.11:
|
|
successors: %bb.9(0x80000000)
|
|
|
|
B %bb.9
|
|
|
|
bb.2.do.body12.preheader:
|
|
successors: %bb.3(0x80000000)
|
|
|
|
%57:gpr64common = COPY $xzr
|
|
|
|
bb.3.do.body12:
|
|
successors: %bb.4(0x50000000), %bb.7(0x30000000)
|
|
|
|
%38:gpr64 = MADDXrrr %57, %29, $xzr
|
|
%40:gpr32common = LDRWroX %31, %38, 0, 0 :: (load (s32) from %ir.arrayidx14)
|
|
dead $wzr = SUBSWri %40, 1, 0, implicit-def $nzcv
|
|
Bcc 11, %bb.7, implicit $nzcv
|
|
B %bb.4
|
|
|
|
bb.4.if.then17:
|
|
successors: %bb.6(0x80000000)
|
|
|
|
%60:gpr32 = LDRWroX %19, %57, 0, 1 :: (volatile load (s32) from %ir.arrayidx19)
|
|
%59:gpr32common = MOVi32imm 100
|
|
B %bb.6
|
|
|
|
bb.5.for.cond.cleanup:
|
|
successors: %bb.7(0x80000000)
|
|
|
|
INLINEASM &"nop;nop", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead early-clobber $x0, 12 /* clobber */, implicit-def dead early-clobber $x2, 12 /* clobber */, implicit-def dead early-clobber $x3, 12 /* clobber */, implicit-def dead early-clobber $x4, 12 /* clobber */, implicit-def dead early-clobber $x5, 12 /* clobber */, implicit-def dead early-clobber $x6, 12 /* clobber */, implicit-def dead early-clobber $x7, 12 /* clobber */, implicit-def dead early-clobber $x8, 12 /* clobber */, implicit-def dead early-clobber $x9, 12 /* clobber */, implicit-def dead early-clobber $x10, 12 /* clobber */, implicit-def dead early-clobber $x11, 12 /* clobber */, implicit-def dead early-clobber $x12, 12 /* clobber */, implicit-def dead early-clobber $x13, 12 /* clobber */, implicit-def dead early-clobber $x14, 12 /* clobber */, implicit-def dead early-clobber $x15, 12 /* clobber */, implicit-def dead early-clobber $x16, 12 /* clobber */, implicit-def dead early-clobber $x17, 12 /* clobber */, implicit-def dead early-clobber $x18, 12 /* clobber */, implicit-def dead early-clobber $x19, 12 /* clobber */, implicit-def dead early-clobber $x20, 12 /* clobber */, implicit-def dead early-clobber $x21, 12 /* clobber */, implicit-def dead early-clobber $x22, 12 /* clobber */, implicit-def dead early-clobber $x23, 12 /* clobber */, implicit-def dead early-clobber $x24, 12 /* clobber */, implicit-def dead early-clobber $x25, 12 /* clobber */, implicit-def dead early-clobber $x26, 12 /* clobber */, implicit-def dead early-clobber $x27, 12 /* clobber */, implicit-def dead early-clobber $x28, 12 /* clobber */, implicit-def dead early-clobber $fp, 12 /* clobber */, implicit-def dead early-clobber $lr
|
|
STRWroX %60, %19, %57, 0, 1 :: (volatile store (s32) into %ir.sunkaddr1)
|
|
B %bb.7
|
|
|
|
bb.6.for.body:
|
|
successors: %bb.5(0x04000000), %bb.6(0x7c000000)
|
|
|
|
ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
|
BL @callee, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
|
|
ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
|
|
%45:gpr32 = COPY $w0
|
|
%59:gpr32common = nsw SUBSWri %59, 1, 0, implicit-def $nzcv
|
|
%60:gpr32 = nsw ADDWrr %45, %60
|
|
Bcc 0, %bb.5, implicit $nzcv
|
|
B %bb.6
|
|
|
|
bb.7.if.end:
|
|
successors: %bb.8(0x04000000), %bb.3(0x7c000000)
|
|
|
|
%56:gpr32common = nsw SUBSWri %56, 1, 0, implicit-def $nzcv
|
|
%57:gpr64common = nuw nsw ADDXri %57, 1, 0
|
|
Bcc 1, %bb.3, implicit $nzcv
|
|
B %bb.8
|
|
|
|
bb.8.do.end:
|
|
successors: %bb.9(0x80000000)
|
|
|
|
%56:gpr32common = COPY $wzr
|
|
STRWroX $wzr, %19, %54, 0, 1 :: (volatile store (s32) into %ir.arrayidx26)
|
|
|
|
bb.9.if.end27:
|
|
successors: %bb.10(0x04000000), %bb.1(0x7c000000)
|
|
|
|
%55:gpr32common = nsw SUBSWri %55, 1, 0, implicit-def $nzcv
|
|
%54:gpr64common = nuw nsw ADDXri %54, 1, 0
|
|
Bcc 1, %bb.1, implicit $nzcv
|
|
B %bb.10
|
|
|
|
bb.10.do.end32:
|
|
RET_ReallyLR
|
|
|
|
...
|