xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/ia-mem-r0.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-n32:64"
3*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64le-unknown-linux-gnu"
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Make sure that we don't generate a std r, 0(0) -- the memory address cannot
6*9880d681SAndroid Build Coastguard Worker; be stored in r0.
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1
8*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: std {{[0-9]+}}, 0(0)
9*9880d681SAndroid Build Coastguard Worker; CHECK: blr
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine void @test1({ i8*, void (i8*, i8*)* } %fn_arg) {
12*9880d681SAndroid Build Coastguard Worker  %fn = alloca { i8*, void (i8*, i8*)* }
13*9880d681SAndroid Build Coastguard Worker  %sp = alloca i8*, align 8
14*9880d681SAndroid Build Coastguard Worker  %regs = alloca [18 x i64], align 8
15*9880d681SAndroid Build Coastguard Worker  store { i8*, void (i8*, i8*)* } %fn_arg, { i8*, void (i8*, i8*)* }* %fn
16*9880d681SAndroid Build Coastguard Worker  %1 = bitcast [18 x i64]* %regs to i64*
17*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  14, $0", "=*m"(i64* %1)
18*9880d681SAndroid Build Coastguard Worker  %2 = bitcast [18 x i64]* %regs to i8*
19*9880d681SAndroid Build Coastguard Worker  %3 = getelementptr i8, i8* %2, i32 8
20*9880d681SAndroid Build Coastguard Worker  %4 = bitcast i8* %3 to i64*
21*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  15, $0", "=*m"(i64* %4)
22*9880d681SAndroid Build Coastguard Worker  %5 = bitcast [18 x i64]* %regs to i8*
23*9880d681SAndroid Build Coastguard Worker  %6 = getelementptr i8, i8* %5, i32 16
24*9880d681SAndroid Build Coastguard Worker  %7 = bitcast i8* %6 to i64*
25*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  16, $0", "=*m"(i64* %7)
26*9880d681SAndroid Build Coastguard Worker  %8 = bitcast [18 x i64]* %regs to i8*
27*9880d681SAndroid Build Coastguard Worker  %9 = getelementptr i8, i8* %8, i32 24
28*9880d681SAndroid Build Coastguard Worker  %10 = bitcast i8* %9 to i64*
29*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  17, $0", "=*m"(i64* %10)
30*9880d681SAndroid Build Coastguard Worker  %11 = bitcast [18 x i64]* %regs to i8*
31*9880d681SAndroid Build Coastguard Worker  %12 = getelementptr i8, i8* %11, i32 32
32*9880d681SAndroid Build Coastguard Worker  %13 = bitcast i8* %12 to i64*
33*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  18, $0", "=*m"(i64* %13)
34*9880d681SAndroid Build Coastguard Worker  %14 = bitcast [18 x i64]* %regs to i8*
35*9880d681SAndroid Build Coastguard Worker  %15 = getelementptr i8, i8* %14, i32 40
36*9880d681SAndroid Build Coastguard Worker  %16 = bitcast i8* %15 to i64*
37*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  19, $0", "=*m"(i64* %16)
38*9880d681SAndroid Build Coastguard Worker  %17 = bitcast [18 x i64]* %regs to i8*
39*9880d681SAndroid Build Coastguard Worker  %18 = getelementptr i8, i8* %17, i32 48
40*9880d681SAndroid Build Coastguard Worker  %19 = bitcast i8* %18 to i64*
41*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  20, $0", "=*m"(i64* %19)
42*9880d681SAndroid Build Coastguard Worker  %20 = bitcast [18 x i64]* %regs to i8*
43*9880d681SAndroid Build Coastguard Worker  %21 = getelementptr i8, i8* %20, i32 56
44*9880d681SAndroid Build Coastguard Worker  %22 = bitcast i8* %21 to i64*
45*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  21, $0", "=*m"(i64* %22)
46*9880d681SAndroid Build Coastguard Worker  %23 = bitcast [18 x i64]* %regs to i8*
47*9880d681SAndroid Build Coastguard Worker  %24 = getelementptr i8, i8* %23, i32 64
48*9880d681SAndroid Build Coastguard Worker  %25 = bitcast i8* %24 to i64*
49*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  22, $0", "=*m"(i64* %25)
50*9880d681SAndroid Build Coastguard Worker  %26 = bitcast [18 x i64]* %regs to i8*
51*9880d681SAndroid Build Coastguard Worker  %27 = getelementptr i8, i8* %26, i32 72
52*9880d681SAndroid Build Coastguard Worker  %28 = bitcast i8* %27 to i64*
53*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  23, $0", "=*m"(i64* %28)
54*9880d681SAndroid Build Coastguard Worker  %29 = bitcast [18 x i64]* %regs to i8*
55*9880d681SAndroid Build Coastguard Worker  %30 = getelementptr i8, i8* %29, i32 80
56*9880d681SAndroid Build Coastguard Worker  %31 = bitcast i8* %30 to i64*
57*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  24, $0", "=*m"(i64* %31)
58*9880d681SAndroid Build Coastguard Worker  %32 = bitcast [18 x i64]* %regs to i8*
59*9880d681SAndroid Build Coastguard Worker  %33 = getelementptr i8, i8* %32, i32 88
60*9880d681SAndroid Build Coastguard Worker  %34 = bitcast i8* %33 to i64*
61*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  25, $0", "=*m"(i64* %34)
62*9880d681SAndroid Build Coastguard Worker  %35 = bitcast [18 x i64]* %regs to i8*
63*9880d681SAndroid Build Coastguard Worker  %36 = getelementptr i8, i8* %35, i32 96
64*9880d681SAndroid Build Coastguard Worker  %37 = bitcast i8* %36 to i64*
65*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  26, $0", "=*m"(i64* %37)
66*9880d681SAndroid Build Coastguard Worker  %38 = bitcast [18 x i64]* %regs to i8*
67*9880d681SAndroid Build Coastguard Worker  %39 = getelementptr i8, i8* %38, i32 104
68*9880d681SAndroid Build Coastguard Worker  %40 = bitcast i8* %39 to i64*
69*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  27, $0", "=*m"(i64* %40)
70*9880d681SAndroid Build Coastguard Worker  %41 = bitcast [18 x i64]* %regs to i8*
71*9880d681SAndroid Build Coastguard Worker  %42 = getelementptr i8, i8* %41, i32 112
72*9880d681SAndroid Build Coastguard Worker  %43 = bitcast i8* %42 to i64*
73*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  28, $0", "=*m"(i64* %43)
74*9880d681SAndroid Build Coastguard Worker  %44 = bitcast [18 x i64]* %regs to i8*
75*9880d681SAndroid Build Coastguard Worker  %45 = getelementptr i8, i8* %44, i32 120
76*9880d681SAndroid Build Coastguard Worker  %46 = bitcast i8* %45 to i64*
77*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  29, $0", "=*m"(i64* %46)
78*9880d681SAndroid Build Coastguard Worker  %47 = bitcast [18 x i64]* %regs to i8*
79*9880d681SAndroid Build Coastguard Worker  %48 = getelementptr i8, i8* %47, i32 128
80*9880d681SAndroid Build Coastguard Worker  %49 = bitcast i8* %48 to i64*
81*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  30, $0", "=*m"(i64* %49)
82*9880d681SAndroid Build Coastguard Worker  %50 = bitcast [18 x i64]* %regs to i8*
83*9880d681SAndroid Build Coastguard Worker  %51 = getelementptr i8, i8* %50, i32 136
84*9880d681SAndroid Build Coastguard Worker  %52 = bitcast i8* %51 to i64*
85*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "std  31, $0", "=*m"(i64* %52)
86*9880d681SAndroid Build Coastguard Worker  %53 = getelementptr { i8*, void (i8*, i8*)* }, { i8*, void (i8*, i8*)* }* %fn, i32 0, i32 1
87*9880d681SAndroid Build Coastguard Worker  %.funcptr = load void (i8*, i8*)*, void (i8*, i8*)** %53
88*9880d681SAndroid Build Coastguard Worker  %54 = getelementptr { i8*, void (i8*, i8*)* }, { i8*, void (i8*, i8*)* }* %fn, i32 0, i32 0
89*9880d681SAndroid Build Coastguard Worker  %.ptr = load i8*, i8** %54
90*9880d681SAndroid Build Coastguard Worker  %55 = load i8*, i8** %sp
91*9880d681SAndroid Build Coastguard Worker  call void %.funcptr(i8* %.ptr, i8* %55)
92*9880d681SAndroid Build Coastguard Worker  ret void
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95