| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 |
| # RUN: llc -run-pass=aarch64-ldst-opt -verify-machineinstrs %s -o - | FileCheck %s |
| |
| --- | |
| target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" |
| target triple = "aarch64-none-linux-gnu" |
| |
| ; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable vscale_range(1,16) |
| define dso_local void @test(ptr noundef captures(none) %data) local_unnamed_addr #0 { |
| entry: |
| br i1 undef, label %while.cond.preheader, label %for.body.preheader |
| |
| for.body.preheader: ; preds = %entry |
| br label %for.body |
| |
| while.cond.preheader.loopexit: ; preds = %for.body |
| br label %while.cond.preheader |
| |
| while.cond.preheader: ; preds = %while.cond.preheader.loopexit, %entry |
| br i1 undef, label %while.body.lr.ph.lr.ph, label %for.cond28.preheader |
| |
| while.body.lr.ph.lr.ph: ; preds = %while.cond.preheader |
| br label %while.body.preheader |
| |
| for.body: ; preds = %for.body, %for.body.preheader |
| br i1 undef, label %for.body, label %while.cond.preheader.loopexit |
| |
| for.cond28.preheader: ; preds = %if.then, %if.end, %while.cond.preheader |
| br i1 undef, label %for.end45, label %for.body36.preheader |
| |
| for.body36.preheader: ; preds = %for.cond28.preheader |
| br label %for.body36 |
| |
| while.body: ; preds = %if.end, %while.body.preheader |
| br i1 undef, label %if.end, label %if.then |
| |
| if.then: ; preds = %while.body |
| br i1 undef, label %while.body.preheader, label %for.cond28.preheader |
| |
| while.body.preheader: ; preds = %if.then, %while.body.lr.ph.lr.ph |
| br label %while.body |
| |
| if.end: ; preds = %while.body |
| br i1 undef, label %for.cond28.preheader, label %while.body |
| |
| for.body36: ; preds = %for.body36.preheader, %for.body36 |
| br i1 undef, label %for.body36, label %for.end45 |
| |
| for.end45: ; preds = %for.body36, %for.cond28.preheader |
| ret void |
| } |
| |
| ... |
| --- |
| name: test |
| alignment: 16 |
| exposesReturnsTwice: false |
| legalized: false |
| regBankSelected: false |
| selected: false |
| failedISel: false |
| tracksRegLiveness: true |
| hasWinCFI: false |
| noPhis: true |
| isSSA: false |
| noVRegs: true |
| hasFakeUses: false |
| callsEHReturn: false |
| callsUnwindInit: false |
| hasEHContTarget: false |
| hasEHScopes: false |
| hasEHFunclets: false |
| isOutlined: false |
| debugInstrRef: false |
| failsVerification: false |
| tracksDebugUserValues: true |
| registers: [] |
| liveins: |
| - { reg: '$x0', virtual-reg: '' } |
| frameInfo: |
| isFrameAddressTaken: false |
| isReturnAddressTaken: false |
| hasStackMap: false |
| hasPatchPoint: false |
| stackSize: 0 |
| offsetAdjustment: 0 |
| maxAlignment: 1 |
| adjustsStack: false |
| hasCalls: false |
| stackProtector: '' |
| functionContext: '' |
| maxCallFrameSize: 0 |
| cvBytesOfCalleeSavedRegisters: 0 |
| hasOpaqueSPAdjustment: false |
| hasVAStart: false |
| hasMustTailInVarArgFunc: false |
| hasTailCall: false |
| isCalleeSavedInfoValid: true |
| localFrameSize: 0 |
| savePoint: [] |
| restorePoint: [] |
| fixedStack: [] |
| stack: [] |
| entry_values: [] |
| callSites: [] |
| debugValueSubstitutions: [] |
| constants: [] |
| machineFunctionInfo: |
| hasRedZone: false |
| body: | |
| ; CHECK-LABEL: name: test |
| ; CHECK: bb.0.entry: |
| ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.5(0x40000000) |
| ; CHECK-NEXT: liveins: $x0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w8 = LDRBBui renamable $x0, 4 |
| ; CHECK-NEXT: TBNZW killed renamable $w8, 3, %bb.5 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: liveins: $x0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w11 = MOVZWi 1, 0 |
| ; CHECK-NEXT: renamable $w9 = MOVZWi 1, 0 |
| ; CHECK-NEXT: renamable $w8 = MOVZWi 2, 0, implicit-def $x8 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2.while.cond.preheader: |
| ; CHECK-NEXT: successors: %bb.3(0x60000000), %bb.8(0x20000000) |
| ; CHECK-NEXT: liveins: $w9, $w11, $x0, $x8 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w11, 299, 0, implicit-def $nzcv |
| ; CHECK-NEXT: Bcc 8, %bb.8, implicit $nzcv |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.3.while.cond.preheader: |
| ; CHECK-NEXT: successors: %bb.4(0x55555555), %bb.8(0x2aaaaaab) |
| ; CHECK-NEXT: liveins: $w9, $x0, $x8 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $x10 = nuw ADDXrx renamable $x0, renamable $w9, 18 |
| ; CHECK-NEXT: renamable $w11 = LDRWui renamable $x10, 0 |
| ; CHECK-NEXT: TBZW killed renamable $w11, 3, %bb.8 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.4: |
| ; CHECK-NEXT: successors: %bb.14(0x80000000) |
| ; CHECK-NEXT: liveins: $w9, $x0, $x8, $x10 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w9 = ORRWrs $wzr, killed renamable $w9, 0, implicit-def $x9 |
| ; CHECK-NEXT: B %bb.14 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.5.for.body.preheader: |
| ; CHECK-NEXT: successors: %bb.6(0x80000000) |
| ; CHECK-NEXT: liveins: $x0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $x10 = ADDXri renamable $x0, 8, 0 |
| ; CHECK-NEXT: renamable $w9 = MOVZWi 1, 0 |
| ; CHECK-NEXT: renamable $w12 = MOVZWi 2, 0, implicit-def $x12 |
| ; CHECK-NEXT: $x11 = ORRXrs $xzr, $x10, 0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.6.for.body: |
| ; CHECK-NEXT: successors: %bb.7(0x7e000000), %bb.2(0x02000000) |
| ; CHECK-NEXT: liveins: $w9, $x0, $x10, $x11, $x12 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w8 = LDURWi renamable $x11, -4 |
| ; CHECK-NEXT: STRWui killed renamable $w8, renamable $x11, 0 |
| ; CHECK-NEXT: renamable $x8 = nuw nsw ADDXri renamable $x12, 2, 0 |
| ; CHECK-NEXT: renamable $w9 = nuw nsw ADDWri killed renamable $w9, 1, 0 |
| ; CHECK-NEXT: early-clobber renamable $x10, renamable $w13 = LDRBBpost killed renamable $x10, 4 |
| ; CHECK-NEXT: TBZW killed renamable $w13, 3, %bb.2 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.7.for.body: |
| ; CHECK-NEXT: successors: %bb.6(0x7df7df7e), %bb.2(0x02082082) |
| ; CHECK-NEXT: liveins: $w9, $x0, $x8, $x10, $x11, $x12 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $x11 = ADDXri killed renamable $x11, 8, 0 |
| ; CHECK-NEXT: dead $xzr = SUBSXri killed renamable $x12, 598, 0, implicit-def $nzcv |
| ; CHECK-NEXT: $x12 = ORRXrs $xzr, $x8, 0 |
| ; CHECK-NEXT: Bcc 0, %bb.2, implicit $nzcv |
| ; CHECK-NEXT: B %bb.6 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.8.for.cond28.preheader: |
| ; CHECK-NEXT: successors: %bb.12(0x40000000), %bb.9(0x40000000) |
| ; CHECK-NEXT: liveins: $x0, $x8 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w9 = LDRBBui renamable $x0, 4 |
| ; CHECK-NEXT: TBZW killed renamable $w9, 3, %bb.12 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.9.for.body36.preheader: |
| ; CHECK-NEXT: successors: %bb.10(0x80000000) |
| ; CHECK-NEXT: liveins: $x0, $x8 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w9 = MOVZWi 8, 0, implicit-def $x9 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.10.for.body36: |
| ; CHECK-NEXT: successors: %bb.11(0x7e000000), %bb.12(0x02000000) |
| ; CHECK-NEXT: liveins: $x0, $x8, $x9 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w10 = SUBWri renamable $w8, 1, 0 |
| ; CHECK-NEXT: renamable $w10 = LDRWroW renamable $x0, killed renamable $w10, 0, 1 |
| ; CHECK-NEXT: early-clobber renamable $x8 = STRWpost killed renamable $w10, renamable $x8, 2 |
| ; CHECK-NEXT: renamable $w10 = LDRBBroX renamable $x0, renamable $x9, 0, 0 |
| ; CHECK-NEXT: TBZW killed renamable $w10, 3, %bb.12 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.11.for.body36: |
| ; CHECK-NEXT: successors: %bb.10(0x7df7df7e), %bb.12(0x02082082) |
| ; CHECK-NEXT: liveins: $x0, $x8, $x9 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: dead $xzr = SUBSXri renamable $x9, 1200, 0, implicit-def $nzcv |
| ; CHECK-NEXT: renamable $x9 = nuw nsw ADDXri killed renamable $x9, 4, 0 |
| ; CHECK-NEXT: Bcc 1, %bb.10, implicit $nzcv |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.12.for.end45: |
| ; CHECK-NEXT: RET undef $lr |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.13.if.end: |
| ; CHECK-NEXT: successors: %bb.8(0x04000000), %bb.14(0x7c000000) |
| ; CHECK-NEXT: liveins: $x0, $x8, $x9, $x10 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w11 = LDRBBui renamable $x10, 0 |
| ; CHECK-NEXT: TBZW killed renamable $w11, 3, %bb.8 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.14.while.body: |
| ; CHECK-NEXT: successors: %bb.13(0x7c000000), %bb.15(0x04000000) |
| ; CHECK-NEXT: liveins: $x0, $x8, $x9, $x10 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w11 = SUBWri renamable $w8, 1, 0 |
| ; CHECK-NEXT: renamable $w11 = LDRWroW renamable $x0, killed renamable $w11, 0, 1 |
| ; CHECK-NEXT: early-clobber renamable $x8 = STRWpost renamable $w11, renamable $x8, 2 |
| ; CHECK-NEXT: TBZW killed renamable $w11, 2, %bb.13 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.15.if.then: |
| ; CHECK-NEXT: successors: %bb.16(0x7e000000), %bb.8(0x02000000) |
| ; CHECK-NEXT: liveins: $x0, $x9 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $w8 = LDRWui renamable $x0, 4 |
| ; CHECK-NEXT: STRWroX killed renamable $w8, renamable $x0, renamable $x9, 0, 1 |
| ; CHECK-NEXT: renamable $w8 = MOVZWi 3, 0, implicit-def $x8 |
| ; CHECK-NEXT: dead $xzr = SUBSXri renamable $x9, 298, 0, implicit-def $nzcv |
| ; CHECK-NEXT: Bcc 8, %bb.8, implicit $nzcv |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.16.if.then: |
| ; CHECK-NEXT: successors: %bb.14(0x7df7df7e), %bb.8(0x02082082) |
| ; CHECK-NEXT: liveins: $x0, $x8, $x9 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: renamable $x9 = nuw nsw ADDXri killed renamable $x9, 1, 0 |
| ; CHECK-NEXT: renamable $x10 = nuw ADDXrs renamable $x0, renamable $x9, 2 |
| ; CHECK-NEXT: renamable $w11 = LDRWui renamable $x10, 0 |
| ; CHECK-NEXT: TBZW killed renamable $w11, 3, %bb.8 |
| ; CHECK-NEXT: B %bb.14 |
| bb.0.entry: |
| successors: %bb.1(0x40000000), %bb.5(0x40000000) |
| liveins: $x0 |
| |
| renamable $w8 = LDRBBui renamable $x0, 4 |
| TBNZW killed renamable $w8, 3, %bb.5 |
| |
| bb.1: |
| successors: %bb.2(0x80000000) |
| liveins: $x0 |
| |
| renamable $w11 = MOVZWi 1, 0 |
| renamable $w9 = MOVZWi 1, 0 |
| renamable $w8 = MOVZWi 2, 0, implicit-def $x8 |
| |
| bb.2.while.cond.preheader: |
| successors: %bb.3(0x60000000), %bb.8(0x20000000) |
| liveins: $w9, $w11, $x0, $x8 |
| |
| dead $wzr = SUBSWri renamable $w11, 299, 0, implicit-def $nzcv |
| Bcc 8, %bb.8, implicit $nzcv |
| |
| bb.3.while.cond.preheader: |
| successors: %bb.4(0x55555555), %bb.8(0x2aaaaaab) |
| liveins: $w9, $x0, $x8 |
| |
| renamable $x10 = nuw ADDXrx renamable $x0, renamable $w9, 18 |
| renamable $w11 = LDRWui renamable $x10, 0 |
| TBZW killed renamable $w11, 3, %bb.8 |
| |
| bb.4: |
| successors: %bb.14(0x80000000) |
| liveins: $w9, $x0, $x8, $x10 |
| |
| renamable $w9 = ORRWrs $wzr, killed renamable $w9, 0, implicit-def $x9 |
| B %bb.14 |
| |
| bb.5.for.body.preheader: |
| successors: %bb.6(0x80000000) |
| liveins: $x0 |
| |
| renamable $x10 = ADDXri renamable $x0, 8, 0 |
| renamable $w9 = MOVZWi 1, 0 |
| renamable $w12 = MOVZWi 2, 0, implicit-def $x12 |
| $x11 = ORRXrs $xzr, $x10, 0 |
| |
| bb.6.for.body: |
| successors: %bb.7(0x7e000000), %bb.2(0x02000000) |
| liveins: $w9, $x0, $x10, $x11, $x12 |
| |
| renamable $w8 = LDURWi renamable $x11, -4 |
| STRWui killed renamable $w8, renamable $x11, 0 |
| renamable $x8 = nuw nsw ADDXri renamable $x12, 2, 0 |
| renamable $w9 = nuw nsw ADDWri killed renamable $w9, 1, 0 |
| early-clobber renamable $x10, renamable $w13 = LDRBBpost killed renamable $x10, 4 |
| TBZW killed renamable $w13, 3, %bb.2 |
| |
| bb.7.for.body: |
| successors: %bb.6(0x7df7df7e), %bb.2(0x02082082) |
| liveins: $w9, $x0, $x8, $x10, $x11, $x12 |
| |
| renamable $x11 = ADDXri killed renamable $x11, 8, 0 |
| dead $xzr = SUBSXri killed renamable $x12, 598, 0, implicit-def $nzcv |
| $x12 = ORRXrs $xzr, $x8, 0 |
| Bcc 0, %bb.2, implicit $nzcv |
| B %bb.6 |
| |
| bb.8.for.cond28.preheader: |
| successors: %bb.12(0x40000000), %bb.9(0x40000000) |
| liveins: $x0, $x8 |
| |
| renamable $w9 = LDRBBui renamable $x0, 4 |
| TBZW killed renamable $w9, 3, %bb.12 |
| |
| bb.9.for.body36.preheader: |
| successors: %bb.10(0x80000000) |
| liveins: $x0, $x8 |
| |
| renamable $w9 = MOVZWi 8, 0, implicit-def $x9 |
| |
| bb.10.for.body36: |
| successors: %bb.11(0x7e000000), %bb.12(0x02000000) |
| liveins: $x0, $x8, $x9 |
| |
| renamable $w10 = SUBWri renamable $w8, 1, 0 |
| renamable $w10 = LDRWroW renamable $x0, killed renamable $w10, 0, 1 |
| STRWui killed renamable $w10, renamable $x8, 0 |
| renamable $w10 = LDRBBroX renamable $x0, renamable $x9, 0, 0 |
| TBZW killed renamable $w10, 3, %bb.12 |
| |
| bb.11.for.body36: |
| successors: %bb.10(0x7df7df7e), %bb.12(0x02082082) |
| liveins: $x0, $x8, $x9 |
| |
| renamable $x8 = ADDXri renamable $x8, 2, 0, implicit killed $x8, implicit-def $x8 |
| dead $xzr = SUBSXri renamable $x9, 1200, 0, implicit-def $nzcv |
| renamable $x9 = nuw nsw ADDXri killed renamable $x9, 4, 0 |
| Bcc 1, %bb.10, implicit $nzcv |
| |
| bb.12.for.end45: |
| RET undef $lr |
| |
| bb.13.if.end: |
| successors: %bb.8(0x04000000), %bb.14(0x7c000000) |
| liveins: $x0, $x8, $x9, $x10 |
| |
| renamable $x8 = ADDXri renamable $x8, 2, 0, implicit killed $x8, implicit-def $x8 |
| renamable $w11 = LDRBBui renamable $x10, 0 |
| TBZW killed renamable $w11, 3, %bb.8 |
| |
| bb.14.while.body: |
| successors: %bb.13(0x7c000000), %bb.15(0x04000000) |
| liveins: $x0, $x8, $x9, $x10 |
| |
| renamable $w11 = SUBWri renamable $w8, 1, 0 |
| renamable $w11 = LDRWroW renamable $x0, killed renamable $w11, 0, 1 |
| STRWui renamable $w11, renamable $x8, 0 |
| TBZW killed renamable $w11, 2, %bb.13 |
| |
| bb.15.if.then: |
| successors: %bb.16(0x7e000000), %bb.8(0x02000000) |
| liveins: $x0, $x9 |
| |
| renamable $w8 = LDRWui renamable $x0, 4 |
| STRWroX killed renamable $w8, renamable $x0, renamable $x9, 0, 1 |
| renamable $w8 = MOVZWi 3, 0, implicit-def $x8 |
| dead $xzr = SUBSXri renamable $x9, 298, 0, implicit-def $nzcv |
| Bcc 8, %bb.8, implicit $nzcv |
| |
| bb.16.if.then: |
| successors: %bb.14(0x7df7df7e), %bb.8(0x02082082) |
| liveins: $x0, $x8, $x9 |
| |
| renamable $x9 = nuw nsw ADDXri killed renamable $x9, 1, 0 |
| renamable $x10 = nuw ADDXrs renamable $x0, renamable $x9, 2 |
| renamable $w11 = LDRWui renamable $x10, 0 |
| TBZW killed renamable $w11, 3, %bb.8 |
| B %bb.14 |
| ... |