1; REQUIRES: asserts 2; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s \ 3; RUN: -stop-before=ppc-ctr-loops-verify | FileCheck %s --check-prefix CHECK32 4; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s \ 5; RUN: -stop-before=ppc-ctr-loops-verify | FileCheck %s --check-prefix CHECK64 6; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefix TEST32 7; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefix TEST64 8 9@i = dso_local global i32 0, align 4 #0 10@d = dso_local local_unnamed_addr global double 3.141590e+00, align 8 11@f = dso_local local_unnamed_addr global float 0x4005BE76C0000000, align 4 #0 12@ll = dso_local local_unnamed_addr global i64 55, align 8 13@ilocal = internal global i32 0, align 4 14 15define dso_local void @write_int(i32 signext %in) { 16 entry: 17 store i32 %in, i32* @i, align 4 18 ret void 19} 20; CHECK32: name: write_int 21; CHECK32: %[[SCRATCH:[0-9]+]]:gprc_and_gprc_nor0 = ADDItoc @i, $r2 22; CHECK32-NEXT: STW %{{[0-9]+}}, 0, killed %[[SCRATCH]] :: (store (s32) into @i) 23 24; TEST32: .write_int: 25; TEST32: la 4, i[TD](2) 26; TEST32-NEXT: stw 3, 0(4) 27 28; CHECK64: name: write_int 29; CHECK64: %[[SCRATCH:[0-9]+]]:g8rc_and_g8rc_nox0 = ADDItoc8 @i, $x2 30; CHECK64-NEXT: STW8 %{{[0-9]+}}, 0, killed %[[SCRATCH]] :: (store (s32) into @i) 31 32; TEST64: .write_int: 33; TEST64: la 4, i[TD](2) 34; TEST64-NEXT: stw 3, 0(4) 35 36 37define dso_local i64 @read_ll() { 38 entry: 39 %0 = load i64, i64* @ll, align 8 40 ret i64 %0 41} 42; CHECK32: name: read_ll 43; CHECK32: LWZtoc @ll, $r2 :: (load (s32) from got) 44 45; TEST32: .read_ll: 46; TEST32: lwz 4, L..C0(2) 47; TEST32-NEXT: lwz 3, 0(4) 48; TEST32-NEXT: lwz 4, 4(4) 49 50; CHECK64: name: read_ll 51; CHECK64: LDtoc @ll, $x2 :: (load (s64) from got) 52 53; TEST64: .read_ll: 54; TEST64: ld 3, L..C0(2) 55; TEST64-NEXT: ld 3, 0(3) 56 57 58define dso_local float @read_float() { 59 entry: 60 %0 = load float, float* @f, align 4 61 ret float %0 62} 63; CHECK32: name: read_float 64; CHECK32: %[[SCRATCH:[0-9]+]]:gprc_and_gprc_nor0 = ADDItoc @f, $r2 65; CHECK32: %{{[0-9]+}}:f4rc = LFS 0, killed %[[SCRATCH]] :: (dereferenceable load (s32) from @f) 66 67; TEST32: .read_float: 68; TEST32: la 3, f[TD](2) 69; TEST32-NEXT: lfs 1, 0(3) 70 71; CHECK64: name: read_float 72; CHECK64: %[[SCRATCH:[0-9]+]]:g8rc_and_g8rc_nox0 = ADDItoc8 @f, $x2 73; CHECK64: %{{[0-9]+}}:f4rc = LFS 0, killed %[[SCRATCH]] :: (dereferenceable load (s32) from @f) 74 75; TEST64: .read_float: 76; TEST64: la 3, f[TD](2) 77; TEST64-NEXT: lfs 1, 0(3) 78 79 80define dso_local void @write_double(double %in) { 81 entry: 82 store double %in, double* @d, align 8 83 ret void 84} 85; CHECK32: name: write_double 86; CHECK32: LWZtoc @d, $r2 :: (load (s32) from got) 87 88; TEST32: .write_double 89; TEST32: lwz 3, L..C1(2) 90; TEST32-NEXT: stfd 1, 0(3) 91 92; CHECK64: name: write_double 93; CHECK64: LDtoc @d, $x2 :: (load (s64) from got) 94 95; TEST64: .write_double 96; TEST64: ld 3, L..C1(2) 97; TEST64-NEXT: stfd 1, 0(3) 98 99 100define dso_local nonnull i32* @addr() { 101 entry: 102 ret i32* @i 103} 104; CHECK32: name: addr 105; CHECK32: %[[SCRATCH:[0-9]+]]:gprc = ADDItoc @i, $r2 106; CHECK32-NEXT: $r3 = COPY %[[SCRATCH]] 107 108; TEST32: .addr 109; TEST32: la 3, i[TD](2) 110 111; CHECK64: name: addr 112; CHECK64: %[[SCRATCH:[0-9]+]]:g8rc = ADDItoc8 @i, $x2 113; CHECK64-NEXT: $x3 = COPY %[[SCRATCH]] 114 115; TEST64: .addr 116; TEST64: la 3, i[TD](2) 117 118; TEST32: .toc 119; TEST32: .tc ll[TC],ll[RW] 120; TEST32-NOT: .csect ll[TD] 121; TEST32: .tc d[TC],d[RW] 122; TEST32-NOT: .csect d[TD],2 123; TEST32: .csect i[TD],2 124; TEST32-NEXT: .globl i[TD] 125; TEST32-NEXT: .align 2 126; TEST32-NOT: .tc i[TC],i[RW] 127; TEST32: .csect f[TD],2 128; TEST32-NEXT: .globl f[TD] 129; TEST32-NOT: .tc f[TD],f[RW] 130 131; TEST64: .toc 132; TEST64: .tc ll[TC],ll[RW] 133; TEST64-NOT: .csect ll[TD] 134; TEST64: .tc d[TC],d[RW] 135; TEST64-NOT: .csect d[TD],2 136; TEST64: .csect i[TD],2 137; TEST64-NEXT: .globl i[TD] 138; TEST64-NEXT: .align 2 139; TEST64-NOT: .tc i[TC],i[RW] 140; TEST64: .csect f[TD],2 141; TEST64-NEXT: .globl f[TD] 142; TEST64-NOT: .tc f[TD],f[RW] 143 144attributes #0 = { "toc-data" } 145