| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -O0 %s -global-isel -start-before localizer \ |
| # RUN: -stop-after localizer -o - | FileCheck --check-prefix=CHECK %s |
| --- | |
| target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" |
| target triple = "arm64-apple-macosx12.0.0" |
| |
| @A = global i32 1234, align 4 |
| @B = global i32 5678, align 4 |
| @C = global i32 9012, align 4 |
| |
| define noundef i32 @foo() !dbg !5 { |
| %1 = alloca i32, align 4 |
| br i1 false, label %2, label %4 |
| |
| 2: ; preds = %0 |
| %3 = load i32, ptr @A, align 4, !dbg !10 |
| store volatile i32 %3, ptr %1, align 4 |
| br label %9 |
| |
| 4: ; preds = %0 |
| br i1 false, label %5, label %8 |
| |
| 5: ; preds = %4 |
| %6 = load i32, ptr @B, align 4, !dbg !13 |
| store volatile i32 %6, ptr %1, align 4 |
| %7 = load i32, ptr @B, align 4, !dbg !16 |
| store volatile i32 %7, ptr %1, align 4 |
| br label %9 |
| |
| 8: ; preds = %4 |
| store i32 3, ptr @C, align 4, !dbg !17 |
| br label %9 |
| |
| 9: ; preds = %8, %5, %2 |
| ret i32 0 |
| } |
| |
| !llvm.dbg.cu = !{!0} |
| !llvm.module.flags = !{!2, !3, !4} |
| |
| !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) |
| !1 = !DIFile(filename: "tmp.ll", directory: "/") |
| !2 = !{i32 7, !"Dwarf Version", i32 4} |
| !3 = !{i32 2, !"Debug Info Version", i32 3} |
| !4 = !{i32 1, !"wchar_size", i32 4} |
| !5 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 5, type: !6, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !9) |
| !6 = !DISubroutineType(types: !7) |
| !7 = !{!8} |
| !8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) |
| !9 = !{} |
| !10 = !DILocation(line: 9, column: 9, scope: !11) |
| !11 = distinct !DILexicalBlock(scope: !12, file: !1, line: 8, column: 15) |
| !12 = distinct !DILexicalBlock(scope: !5, file: !1, line: 8, column: 7) |
| !13 = !DILocation(line: 11, column: 9, scope: !14) |
| !14 = distinct !DILexicalBlock(scope: !15, file: !1, line: 10, column: 22) |
| !15 = distinct !DILexicalBlock(scope: !12, file: !1, line: 10, column: 14) |
| !16 = !DILocation(line: 12, column: 13, scope: !14) |
| !17 = !DILocation(line: 14, column: 7, scope: !18) |
| !18 = distinct !DILexicalBlock(scope: !15, file: !1, line: 13, column: 10) |
| |
| ... |
| --- |
| name: foo |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| stack: |
| - { id: 0, name: '', type: default, offset: 0, size: 4, alignment: 4, |
| stack-id: default, callee-saved-register: '', callee-saved-restored: true, |
| debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } |
| body: | |
| ; CHECK: [[ADRP3:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @A, debug-location !10 |
| ; CHECK-NEXT: [[ADD_LOW3:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP3]](p0), target-flags(aarch64-pageoff, aarch64-nc) @A, debug-location !10 |
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW3]](p0), debug-location !10 :: (dereferenceable load (s32)) |
| |
| ; CHECK: [[ADRP4:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @B, debug-location !DILocation(line: 0, scope: !14) |
| ; CHECK-NEXT: [[ADD_LOW4:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP4]](p0), target-flags(aarch64-pageoff, aarch64-nc) @B, debug-location !DILocation(line: 0, scope: !14) |
| ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW4]](p0), debug-location !13 :: (dereferenceable load (s32)) |
| |
| ; CHECK: [[ADRP5:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @C, debug-location !17 |
| ; CHECK-NEXT: [[ADD_LOW5:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP5]](p0), target-flags(aarch64-pageoff, aarch64-nc) @C, debug-location !17 |
| ; CHECK-NEXT: [[C5:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 3, debug-location !17 |
| ; CHECK-NEXT: G_STORE [[C5]](s32), [[ADD_LOW5]](p0), debug-location !17 :: (store (s32) into @C) |
| bb.1: |
| successors: %bb.2(0x40000000), %bb.3(0x40000000) |
| |
| %2:gpr(s32) = G_CONSTANT i32 3 |
| %24:gpr64(p0) = ADRP target-flags(aarch64-page) @C, debug-location !DILocation(line: 0, scope: !18) |
| %3:gpr(p0) = G_ADD_LOW %24(p0), target-flags(aarch64-pageoff, aarch64-nc) @C, debug-location !DILocation(line: 0, scope: !18) |
| %23:gpr64(p0) = ADRP target-flags(aarch64-page) @B, debug-location !DILocation(line: 0, scope: !14) |
| %5:gpr(p0) = G_ADD_LOW %23(p0), target-flags(aarch64-pageoff, aarch64-nc) @B, debug-location !DILocation(line: 0, scope: !14) |
| %22:gpr64(p0) = ADRP target-flags(aarch64-page) @A, debug-location !DILocation(line: 0, scope: !11) |
| %8:gpr(p0) = G_ADD_LOW %22(p0), target-flags(aarch64-pageoff, aarch64-nc) @A, debug-location !DILocation(line: 0, scope: !11) |
| %9:gpr(s32) = G_CONSTANT i32 0 |
| %0:gpr(p0) = G_FRAME_INDEX %stack.0 |
| %18:gpr(s32) = COPY %9(s32) |
| %19:gpr(s32) = G_CONSTANT i32 1 |
| %20:gpr(s32) = G_XOR %18, %19 |
| %11:gpr(s1) = G_TRUNC %20(s32) |
| G_BRCOND %11(s1), %bb.3 |
| G_BR %bb.2 |
| |
| bb.2: |
| successors: %bb.6(0x80000000) |
| |
| %7:gpr(s32) = G_LOAD %8(p0), debug-location !10 :: (dereferenceable load (s32)) |
| G_STORE %7(s32), %0(p0) :: (volatile store (s32) into %ir.1) |
| G_BR %bb.6 |
| |
| bb.3: |
| successors: %bb.4(0x40000000), %bb.5(0x40000000) |
| |
| %14:gpr(s32) = G_CONSTANT i32 0 |
| %15:gpr(s32) = G_CONSTANT i32 1 |
| %16:gpr(s32) = G_XOR %14, %15 |
| %13:gpr(s1) = G_TRUNC %16(s32) |
| G_BRCOND %13(s1), %bb.5 |
| G_BR %bb.4 |
| |
| bb.4: |
| successors: %bb.6(0x80000000) |
| |
| %4:gpr(s32) = G_LOAD %5(p0), debug-location !13 :: (dereferenceable load (s32)) |
| G_STORE %4(s32), %0(p0) :: (volatile store (s32) into %ir.1) |
| %6:gpr(s32) = G_LOAD %5(p0), debug-location !16 :: (dereferenceable load (s32)) |
| G_STORE %6(s32), %0(p0) :: (volatile store (s32) into %ir.1) |
| G_BR %bb.6 |
| |
| bb.5: |
| successors: %bb.6(0x80000000) |
| |
| G_STORE %2(s32), %3(p0), debug-location !17 :: (store (s32) into @C) |
| G_BR %bb.6 |
| |
| bb.6: |
| $w0 = COPY %9(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |