118 lines · plain
1; RUN: llc -O0 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-UNOPT,DEFCM2; RUN: llc -O1 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-OPT,DEFCM3; RUN: llc -O2 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-OPT,DEFCM4; RUN: llc -O3 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-OPT,DEFCM5; RUN: llc -O1 -code-model=large < %s | FileCheck %s --check-prefixes=CHECK,CHECK-OPT,LARGE6 7target triple = "aarch64-unknown-linux-gnu"8 9@foo = dso_local global i64 0, align 810@bar = dso_local global i64 0, align 811 12define i64 @multiple() !pcsections !0 {13; CHECK-LABEL: multiple:14; CHECK: .Lfunc_begin0:15; CHECK: // %bb.0: // %entry16; CHECK: .Lpcsection0:17; CHECK-NEXT: ldr18; CHECK-NEXT: ret19; CHECK: .section section_no_aux,"awo",@progbits,.text20; CHECK-NEXT: .Lpcsection_base0:21; DEFCM-NEXT: .word .Lfunc_begin0-.Lpcsection_base022; LARGE-NEXT: .xword .Lfunc_begin0-.Lpcsection_base023; CHECK-NEXT: .word .Lfunc_end0-.Lfunc_begin024; CHECK-NEXT: .section section_aux_42,"awo",@progbits,.text25; CHECK-NEXT: .Lpcsection_base1:26; DEFCM-NEXT: .word .Lpcsection0-.Lpcsection_base127; LARGE-NEXT: .xword .Lpcsection0-.Lpcsection_base128; CHECK-NEXT: .word 4229; CHECK-NEXT: .section section_aux_21264,"awo",@progbits,.text30; CHECK-NEXT: .Lpcsection_base2:31; DEFCM-NEXT: .word .Lpcsection0-.Lpcsection_base232; LARGE-NEXT: .xword .Lpcsection0-.Lpcsection_base233; CHECK-NEXT: .word 2126434; CHECK-NEXT: .text35entry:36 %0 = load i64, ptr @bar, align 8, !pcsections !137 ret i64 %038}39 40define i64 @test_simple_atomic() {41; CHECK-LABEL: test_simple_atomic:42; CHECK: .Lpcsection1:43; CHECK-NEXT: ldr44; CHECK-NOT: .Lpcsection245; CHECK: ldr46; CHECK: add47; CHECK-NEXT: ret48; CHECK: .section section_no_aux,"awo",@progbits,.text49; CHECK-NEXT: .Lpcsection_base3:50; DEFCM-NEXT: .word .Lpcsection1-.Lpcsection_base351; LARGE-NEXT: .xword .Lpcsection1-.Lpcsection_base352; CHECK-NEXT: .text53entry:54 %0 = load atomic i64, ptr @foo monotonic, align 8, !pcsections !055 %1 = load i64, ptr @bar, align 856 %add = add nsw i64 %1, %057 ret i64 %add58}59 60define i64 @test_complex_atomic() {61; CHECK-LABEL: test_complex_atomic:62; ---63; CHECK-OPT: .Lpcsection2:64; CHECK-OPT-NEXT: ldxr65; CHECK-OPT: .Lpcsection3:66; CHECK-OPT-NEXT: add67; CHECK-OPT: .Lpcsection4:68; CHECK-OPT-NEXT: stxr69; CHECK-OPT: .Lpcsection5:70; CHECK-OPT-NEXT: cbnz71; ---72; CHECK-UNOPT: .Lpcsection2:73; CHECK-UNOPT-NEXT: ldr74; CHECK-UNOPT: .Lpcsection4:75; CHECK-UNOPT-NEXT: add76; CHECK-UNOPT: .Lpcsection5:77; CHECK-UNOPT-NEXT: ldaxr78; CHECK-UNOPT: .Lpcsection6:79; CHECK-UNOPT-NEXT: cmp80; CHECK-UNOPT: .Lpcsection8:81; CHECK-UNOPT-NEXT: stlxr82; CHECK-UNOPT: .Lpcsection9:83; CHECK-UNOPT-NEXT: cbnz84; CHECK-UNOPT: .Lpcsection13:85; CHECK-UNOPT-NEXT: b86; ---87; CHECK-NOT: .Lpcsection88; CHECK: ldr89; CHECK: ret90; CHECK: .section section_no_aux,"awo",@progbits,.text91; CHECK-NEXT: .Lpcsection_base4:92; DEFCM-NEXT: .word .Lpcsection2-.Lpcsection_base493; LARGE-NEXT: .xword .Lpcsection2-.Lpcsection_base494; CHECK-NEXT: .Lpcsection_base5:95; DEFCM-NEXT: .word .Lpcsection3-.Lpcsection_base596; LARGE-NEXT: .xword .Lpcsection3-.Lpcsection_base597; CHECK-NEXT: .Lpcsection_base6:98; DEFCM-NEXT: .word .Lpcsection4-.Lpcsection_base699; LARGE-NEXT: .xword .Lpcsection4-.Lpcsection_base6100; CHECK-NEXT: .Lpcsection_base7:101; DEFCM-NEXT: .word .Lpcsection5-.Lpcsection_base7102; LARGE-NEXT: .xword .Lpcsection5-.Lpcsection_base7103; CHECK-UNOPT: .word .Lpcsection13-.Lpcsection_base15104; CHECK-NEXT: .text105entry:106 %0 = atomicrmw add ptr @foo, i64 1 monotonic, align 8, !pcsections !0107 %1 = load i64, ptr @bar, align 8108 %inc = add nsw i64 %1, 1109 store i64 %inc, ptr @bar, align 8110 %add = add nsw i64 %1, %0111 ret i64 %add112}113 114!0 = !{!"section_no_aux"}115!1 = !{!"section_aux_42", !2, !"section_aux_21264", !3}116!2 = !{i32 42}117!3 = !{i32 21264}118