blob: a007fc1aa6319a1d89a8d5702c2ddf049844a056 [file] [log] [blame]
Hal Finkeld4338382014-12-03 23:40:13 +00001; RUN: llc -mcpu=pwr7 < %s | FileCheck %s
2target datalayout = "e-m:e-i64:64-n32:64"
3target triple = "powerpc64le-unknown-linux-gnu"
4
5; Make sure that we don't generate a std r, 0(0) -- the memory address cannot
6; be stored in r0.
7; CHECK-LABEL: @test1
8; CHECK-NOT: std {{[0-9]+}}, 0(0)
9; CHECK: blr
10
11define void @test1({ i8*, void (i8*, i8*)* } %fn_arg) {
12 %fn = alloca { i8*, void (i8*, i8*)* }
13 %sp = alloca i8*, align 8
14 %regs = alloca [18 x i64], align 8
15 store { i8*, void (i8*, i8*)* } %fn_arg, { i8*, void (i8*, i8*)* }* %fn
16 %1 = bitcast [18 x i64]* %regs to i64*
17 call void asm sideeffect "std 14, $0", "=*m"(i64* %1)
18 %2 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000019 %3 = getelementptr i8, i8* %2, i32 8
Hal Finkeld4338382014-12-03 23:40:13 +000020 %4 = bitcast i8* %3 to i64*
21 call void asm sideeffect "std 15, $0", "=*m"(i64* %4)
22 %5 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000023 %6 = getelementptr i8, i8* %5, i32 16
Hal Finkeld4338382014-12-03 23:40:13 +000024 %7 = bitcast i8* %6 to i64*
25 call void asm sideeffect "std 16, $0", "=*m"(i64* %7)
26 %8 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000027 %9 = getelementptr i8, i8* %8, i32 24
Hal Finkeld4338382014-12-03 23:40:13 +000028 %10 = bitcast i8* %9 to i64*
29 call void asm sideeffect "std 17, $0", "=*m"(i64* %10)
30 %11 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000031 %12 = getelementptr i8, i8* %11, i32 32
Hal Finkeld4338382014-12-03 23:40:13 +000032 %13 = bitcast i8* %12 to i64*
33 call void asm sideeffect "std 18, $0", "=*m"(i64* %13)
34 %14 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000035 %15 = getelementptr i8, i8* %14, i32 40
Hal Finkeld4338382014-12-03 23:40:13 +000036 %16 = bitcast i8* %15 to i64*
37 call void asm sideeffect "std 19, $0", "=*m"(i64* %16)
38 %17 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000039 %18 = getelementptr i8, i8* %17, i32 48
Hal Finkeld4338382014-12-03 23:40:13 +000040 %19 = bitcast i8* %18 to i64*
41 call void asm sideeffect "std 20, $0", "=*m"(i64* %19)
42 %20 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000043 %21 = getelementptr i8, i8* %20, i32 56
Hal Finkeld4338382014-12-03 23:40:13 +000044 %22 = bitcast i8* %21 to i64*
45 call void asm sideeffect "std 21, $0", "=*m"(i64* %22)
46 %23 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000047 %24 = getelementptr i8, i8* %23, i32 64
Hal Finkeld4338382014-12-03 23:40:13 +000048 %25 = bitcast i8* %24 to i64*
49 call void asm sideeffect "std 22, $0", "=*m"(i64* %25)
50 %26 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000051 %27 = getelementptr i8, i8* %26, i32 72
Hal Finkeld4338382014-12-03 23:40:13 +000052 %28 = bitcast i8* %27 to i64*
53 call void asm sideeffect "std 23, $0", "=*m"(i64* %28)
54 %29 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000055 %30 = getelementptr i8, i8* %29, i32 80
Hal Finkeld4338382014-12-03 23:40:13 +000056 %31 = bitcast i8* %30 to i64*
57 call void asm sideeffect "std 24, $0", "=*m"(i64* %31)
58 %32 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000059 %33 = getelementptr i8, i8* %32, i32 88
Hal Finkeld4338382014-12-03 23:40:13 +000060 %34 = bitcast i8* %33 to i64*
61 call void asm sideeffect "std 25, $0", "=*m"(i64* %34)
62 %35 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000063 %36 = getelementptr i8, i8* %35, i32 96
Hal Finkeld4338382014-12-03 23:40:13 +000064 %37 = bitcast i8* %36 to i64*
65 call void asm sideeffect "std 26, $0", "=*m"(i64* %37)
66 %38 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000067 %39 = getelementptr i8, i8* %38, i32 104
Hal Finkeld4338382014-12-03 23:40:13 +000068 %40 = bitcast i8* %39 to i64*
69 call void asm sideeffect "std 27, $0", "=*m"(i64* %40)
70 %41 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000071 %42 = getelementptr i8, i8* %41, i32 112
Hal Finkeld4338382014-12-03 23:40:13 +000072 %43 = bitcast i8* %42 to i64*
73 call void asm sideeffect "std 28, $0", "=*m"(i64* %43)
74 %44 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000075 %45 = getelementptr i8, i8* %44, i32 120
Hal Finkeld4338382014-12-03 23:40:13 +000076 %46 = bitcast i8* %45 to i64*
77 call void asm sideeffect "std 29, $0", "=*m"(i64* %46)
78 %47 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000079 %48 = getelementptr i8, i8* %47, i32 128
Hal Finkeld4338382014-12-03 23:40:13 +000080 %49 = bitcast i8* %48 to i64*
81 call void asm sideeffect "std 30, $0", "=*m"(i64* %49)
82 %50 = bitcast [18 x i64]* %regs to i8*
David Blaikie79e6c742015-02-27 19:29:02 +000083 %51 = getelementptr i8, i8* %50, i32 136
Hal Finkeld4338382014-12-03 23:40:13 +000084 %52 = bitcast i8* %51 to i64*
85 call void asm sideeffect "std 31, $0", "=*m"(i64* %52)
David Blaikie79e6c742015-02-27 19:29:02 +000086 %53 = getelementptr { i8*, void (i8*, i8*)* }, { i8*, void (i8*, i8*)* }* %fn, i32 0, i32 1
David Blaikiea79ac142015-02-27 21:17:42 +000087 %.funcptr = load void (i8*, i8*)*, void (i8*, i8*)** %53
David Blaikie79e6c742015-02-27 19:29:02 +000088 %54 = getelementptr { i8*, void (i8*, i8*)* }, { i8*, void (i8*, i8*)* }* %fn, i32 0, i32 0
David Blaikiea79ac142015-02-27 21:17:42 +000089 %.ptr = load i8*, i8** %54
90 %55 = load i8*, i8** %sp
Hal Finkeld4338382014-12-03 23:40:13 +000091 call void %.funcptr(i8* %.ptr, i8* %55)
92 ret void
93}
94