[LLVM][Alignment] Make functions using log of alignment explicit
[llvm-complete.git] / test / CodeGen / PowerPC / ia-mem-r0.ll
blob6928667c6db79164c27c43ec03be470fb22531a6
1 ; RUN: llc -verify-machineinstrs -mcpu=pwr7 < %s | FileCheck %s
2 target datalayout = "e-m:e-i64:64-n32:64"
3 target triple = "powerpc64le-unknown-linux-gnu"
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
11 define 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*
19   %3 = getelementptr i8, i8* %2, i32 8
20   %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*
23   %6 = getelementptr i8, i8* %5, i32 16
24   %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*
27   %9 = getelementptr i8, i8* %8, i32 24
28   %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*
31   %12 = getelementptr i8, i8* %11, i32 32
32   %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*
35   %15 = getelementptr i8, i8* %14, i32 40
36   %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*
39   %18 = getelementptr i8, i8* %17, i32 48
40   %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*
43   %21 = getelementptr i8, i8* %20, i32 56
44   %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*
47   %24 = getelementptr i8, i8* %23, i32 64
48   %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*
51   %27 = getelementptr i8, i8* %26, i32 72
52   %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*
55   %30 = getelementptr i8, i8* %29, i32 80
56   %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*
59   %33 = getelementptr i8, i8* %32, i32 88
60   %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*
63   %36 = getelementptr i8, i8* %35, i32 96
64   %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*
67   %39 = getelementptr i8, i8* %38, i32 104
68   %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*
71   %42 = getelementptr i8, i8* %41, i32 112
72   %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*
75   %45 = getelementptr i8, i8* %44, i32 120
76   %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*
79   %48 = getelementptr i8, i8* %47, i32 128
80   %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*
83   %51 = getelementptr i8, i8* %50, i32 136
84   %52 = bitcast i8* %51 to i64*
85   call void asm sideeffect "std  31, $0", "=*m"(i64* %52)
86   %53 = getelementptr { i8*, void (i8*, i8*)* }, { i8*, void (i8*, i8*)* }* %fn, i32 0, i32 1
87   %.funcptr = load void (i8*, i8*)*, void (i8*, i8*)** %53
88   %54 = getelementptr { i8*, void (i8*, i8*)* }, { i8*, void (i8*, i8*)* }* %fn, i32 0, i32 0
89   %.ptr = load i8*, i8** %54
90   %55 = load i8*, i8** %sp
91   call void %.funcptr(i8* %.ptr, i8* %55)
92   ret void