Enable cross register class coalescing.
[oota-llvm.git] / test / CodeGen / SystemZ / 05-MemRegStores.ll
1 ; RUN: llvm-as < %s | llc | not grep aghi
2 ; RUN: llvm-as < %s | llc | grep stg  | count 1
3 ; RUN: llvm-as < %s | llc | grep st   | count 8
4 ; RUN: llvm-as < %s | llc | grep sth  | count 2
5 ; RUN: llvm-as < %s | llc | grep stc  | count 2
6
7 target datalayout = "E-p:64:64:64-i1:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128"
8 target triple = "s390x-unknown-linux-gnu"
9
10 define void @foo1(i64* nocapture %a, i64 %idx, i64 %val) nounwind {
11 entry:
12         %add.ptr.sum = add i64 %idx, 1          ; <i64> [#uses=1]
13         %add.ptr2 = getelementptr i64* %a, i64 %add.ptr.sum             ; <i64*> [#uses=1]
14         store i64 %val, i64* %add.ptr2
15         ret void
16 }
17
18 define void @foo2(i32* nocapture %a, i64 %idx, i32 %val) nounwind {
19 entry:
20         %add.ptr.sum = add i64 %idx, 1          ; <i64> [#uses=1]
21         %add.ptr2 = getelementptr i32* %a, i64 %add.ptr.sum             ; <i32*> [#uses=1]
22         store i32 %val, i32* %add.ptr2
23         ret void
24 }
25
26 define void @foo3(i16* nocapture %a, i64 %idx, i16 zeroext %val) nounwind {
27 entry:
28         %add.ptr.sum = add i64 %idx, 1          ; <i64> [#uses=1]
29         %add.ptr2 = getelementptr i16* %a, i64 %add.ptr.sum             ; <i16*> [#uses=1]
30         store i16 %val, i16* %add.ptr2
31         ret void
32 }
33
34 define void @foo4(i8* nocapture %a, i64 %idx, i8 zeroext %val) nounwind {
35 entry:
36         %add.ptr.sum = add i64 %idx, 1          ; <i64> [#uses=1]
37         %add.ptr2 = getelementptr i8* %a, i64 %add.ptr.sum              ; <i8*> [#uses=1]
38         store i8 %val, i8* %add.ptr2
39         ret void
40 }
41
42 define void @foo5(i8* nocapture %a, i64 %idx, i64 %val) nounwind {
43 entry:
44         %add.ptr.sum = add i64 %idx, 1          ; <i64> [#uses=1]
45         %add.ptr2 = getelementptr i8* %a, i64 %add.ptr.sum              ; <i8*> [#uses=1]
46         %conv = trunc i64 %val to i8            ; <i8> [#uses=1]
47         store i8 %conv, i8* %add.ptr2
48         ret void
49 }
50
51 define void @foo6(i16* nocapture %a, i64 %idx, i64 %val) nounwind {
52 entry:
53         %add.ptr.sum = add i64 %idx, 1          ; <i64> [#uses=1]
54         %add.ptr2 = getelementptr i16* %a, i64 %add.ptr.sum             ; <i16*> [#uses=1]
55         %conv = trunc i64 %val to i16           ; <i16> [#uses=1]
56         store i16 %conv, i16* %add.ptr2
57         ret void
58 }
59
60 define void @foo7(i32* nocapture %a, i64 %idx, i64 %val) nounwind {
61 entry:
62         %add.ptr.sum = add i64 %idx, 1          ; <i64> [#uses=1]
63         %add.ptr2 = getelementptr i32* %a, i64 %add.ptr.sum             ; <i32*> [#uses=1]
64         %conv = trunc i64 %val to i32           ; <i32> [#uses=1]
65         store i32 %conv, i32* %add.ptr2
66         ret void
67 }