[OpenACC] Enable 'attach' clause for combined constructs
[llvm-project.git] / llvm / test / CodeGen / Mips / mips64intldst.ll
blob89e13247da014dd8e95bf761ee8da0c52b631b0f
1 ; RUN: llc  < %s -march=mips64el -mcpu=mips4 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N64
2 ; RUN: llc  < %s -march=mips64el -mcpu=mips4 -target-abi n32 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N32
3 ; RUN: llc  < %s -march=mips64el -mcpu=mips64 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N64
4 ; RUN: llc  < %s -march=mips64el -mcpu=mips64 -target-abi n32 -relocation-model=pic | FileCheck %s -check-prefix=CHECK-N32
6 @c = common global i8 0, align 4
7 @s = common global i16 0, align 4
8 @i = common global i32 0, align 4
9 @l = common global i64 0, align 8
10 @uc = common global i8 0, align 4
11 @us = common global i16 0, align 4
12 @ui = common global i32 0, align 4
13 @l1 = common global i64 0, align 8
15 define i64 @func1() nounwind readonly {
16 entry:
17 ; CHECK-N64: func1
18 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(c)
19 ; CHECK-N64: lb ${{[0-9]+}}, 0($[[R0]])
20 ; CHECK-N32: func1
21 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(c)
22 ; CHECK-N32: lb ${{[0-9]+}}, 0($[[R0]])
23   %0 = load i8, ptr @c, align 4
24   %conv = sext i8 %0 to i64
25   ret i64 %conv
28 define i64 @func2() nounwind readonly {
29 entry:
30 ; CHECK-N64: func2
31 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(s)
32 ; CHECK-N64: lh ${{[0-9]+}}, 0($[[R0]])
33 ; CHECK-N32: func2
34 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(s)
35 ; CHECK-N32: lh ${{[0-9]+}}, 0($[[R0]])
36   %0 = load i16, ptr @s, align 4
37   %conv = sext i16 %0 to i64
38   ret i64 %conv
41 define i64 @func3() nounwind readonly {
42 entry:
43 ; CHECK-N64: func3
44 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(i)
45 ; CHECK-N64: lw ${{[0-9]+}}, 0($[[R0]])
46 ; CHECK-N32: func3
47 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(i)
48 ; CHECK-N32: lw ${{[0-9]+}}, 0($[[R0]])
49   %0 = load i32, ptr @i, align 4
50   %conv = sext i32 %0 to i64
51   ret i64 %conv
54 define i64 @func4() nounwind readonly {
55 entry:
56 ; CHECK-N64: func4
57 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(l)
58 ; CHECK-N64: ld ${{[0-9]+}}, 0($[[R0]])
59 ; CHECK-N32: func4
60 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(l)
61 ; CHECK-N32: ld ${{[0-9]+}}, 0($[[R0]])
62   %0 = load i64, ptr @l, align 8
63   ret i64 %0
66 define i64 @ufunc1() nounwind readonly {
67 entry:
68 ; CHECK-N64: ufunc1
69 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(uc)
70 ; CHECK-N64: lbu ${{[0-9]+}}, 0($[[R0]])
71 ; CHECK-N32: ufunc1
72 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(uc)
73 ; CHECK-N32: lbu ${{[0-9]+}}, 0($[[R0]])
74   %0 = load i8, ptr @uc, align 4
75   %conv = zext i8 %0 to i64
76   ret i64 %conv
79 define i64 @ufunc2() nounwind readonly {
80 entry:
81 ; CHECK-N64: ufunc2
82 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(us)
83 ; CHECK-N64: lhu ${{[0-9]+}}, 0($[[R0]])
84 ; CHECK-N32: ufunc2
85 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(us)
86 ; CHECK-N32: lhu ${{[0-9]+}}, 0($[[R0]])
87   %0 = load i16, ptr @us, align 4
88   %conv = zext i16 %0 to i64
89   ret i64 %conv
92 define i64 @ufunc3() nounwind readonly {
93 entry:
94 ; CHECK-N64: ufunc3
95 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(ui)
96 ; CHECK-N64: lwu ${{[0-9]+}}, 0($[[R0]])
97 ; CHECK-N32: ufunc3
98 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(ui)
99 ; CHECK-N32: lwu ${{[0-9]+}}, 0($[[R0]])
100   %0 = load i32, ptr @ui, align 4
101   %conv = zext i32 %0 to i64
102   ret i64 %conv
105 define void @sfunc1() nounwind {
106 entry:
107 ; CHECK-N64: sfunc1
108 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(c)
109 ; CHECK-N64: sb ${{[0-9]+}}, 0($[[R0]])
110 ; CHECK-N32: sfunc1
111 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(c)
112 ; CHECK-N32: sb ${{[0-9]+}}, 0($[[R0]])
113   %0 = load i64, ptr @l1, align 8
114   %conv = trunc i64 %0 to i8
115   store i8 %conv, ptr @c, align 4
116   ret void
119 define void @sfunc2() nounwind {
120 entry:
121 ; CHECK-N64: sfunc2
122 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(s)
123 ; CHECK-N64: sh ${{[0-9]+}}, 0($[[R0]])
124 ; CHECK-N32: sfunc2
125 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(s)
126 ; CHECK-N32: sh ${{[0-9]+}}, 0($[[R0]])
127   %0 = load i64, ptr @l1, align 8
128   %conv = trunc i64 %0 to i16
129   store i16 %conv, ptr @s, align 4
130   ret void
133 define void @sfunc3() nounwind {
134 entry:
135 ; CHECK-N64: sfunc3
136 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(i)
137 ; CHECK-N64: sw ${{[0-9]+}}, 0($[[R0]])
138 ; CHECK-N32: sfunc3
139 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(i)
140 ; CHECK-N32: sw ${{[0-9]+}}, 0($[[R0]])
141   %0 = load i64, ptr @l1, align 8
142   %conv = trunc i64 %0 to i32
143   store i32 %conv, ptr @i, align 4
144   ret void
147 define void @sfunc4() nounwind {
148 entry:
149 ; CHECK-N64: sfunc4
150 ; CHECK-N64: ld $[[R0:[0-9]+]], %got_disp(l)
151 ; CHECK-N64: sd ${{[0-9]+}}, 0($[[R0]])
152 ; CHECK-N32: sfunc4
153 ; CHECK-N32: lw $[[R0:[0-9]+]], %got_disp(l)
154 ; CHECK-N32: sd ${{[0-9]+}}, 0($[[R0]])
155   %0 = load i64, ptr @l1, align 8
156   store i64 %0, ptr @l, align 8
157   ret void