# 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 ...