1 ; RUN: llc < %s -march=sparcv9 | FileCheck %s
4 ; CHECK: or %g0, %i1, %i0
5 define i64 @ret2(i64 %a, i64 %b) {
10 ; CHECK: sllx %i0, 7, %i0
11 define i64 @shl_imm(i64 %a) {
17 ; CHECK: srax %i0, %i1, %i0
18 define i64 @sra_reg(i64 %a, i64 %b) {
23 ; Immediate materialization. Many of these patterns could actually be merged
24 ; into the restore instruction:
26 ; restore %g0, %g0, %o0
29 ; CHECK: or %g0, %g0, %i0
30 define i64 @ret_imm0() {
35 ; CHECK: or %g0, -4096, %i0
36 define i64 @ret_simm13() {
44 define i64 @ret_sethi() {
49 ; CHECK: sethi 4, [[R:%[goli][0-7]]]
50 ; CHECK: or [[R]], 1, %i0
51 define i64 @ret_sethi_or() {
56 ; CHECK: sethi 4, [[R:%[goli][0-7]]]
57 ; CHECK: xor [[R]], -4, %i0
58 define i64 @ret_nimm33() {
65 define i64 @ret_bigimm() {
66 ret i64 6800754272627607872
70 ; CHECK: add %i0, %i1, [[R0:%[goli][0-7]]]
71 ; CHECK: sub [[R0]], %i2, [[R1:%[goli][0-7]]]
72 ; CHECK: andn [[R1]], %i0, %i0
73 define i64 @reg_reg_alu(i64 %x, i64 %y, i64 %z) {
82 ; CHECK: add %i0, -5, [[R0:%[goli][0-7]]]
83 ; CHECK: xor [[R0]], 2, %i0
84 define i64 @reg_imm_alu(i64 %x, i64 %y, i64 %z) {
99 define i64 @loads(i64* %p, i32* %q, i32* %r, i16* %s) {
102 store i64 %ai, i64* %p
104 %b2 = zext i32 %b to i64
105 %bi = trunc i64 %ai to i32
106 store i32 %bi, i32* %q
108 %c2 = sext i32 %c to i64
109 store i64 %ai, i64* %p
111 %d2 = sext i16 %d to i64
112 %di = trunc i64 %ai to i16
113 store i16 %di, i16* %s
115 %x1 = add i64 %a, %b2
116 %x2 = add i64 %c2, %d2
117 %x3 = add i64 %x1, %x2
122 ; CHECK: ldx [%i0+8], [[R:%[goli][0-7]]]
123 ; CHECK: stx [[R]], [%i0+16]
124 ; CHECK: st [[R]], [%i1+-8]
125 ; CHECK: sth [[R]], [%i2+40]
126 ; CHECK: stb [[R]], [%i3+-20]
127 define void @stores(i64* %p, i32* %q, i16* %r, i8* %s) {
128 %p1 = getelementptr i64* %p, i64 1
129 %p2 = getelementptr i64* %p, i64 2
131 store i64 %pv, i64* %p2
133 %q2 = getelementptr i32* %q, i32 -2
134 %qv = trunc i64 %pv to i32
135 store i32 %qv, i32* %q2
137 %r2 = getelementptr i16* %r, i16 20
138 %rv = trunc i64 %pv to i16
139 store i16 %rv, i16* %r2
141 %s2 = getelementptr i8* %s, i8 -20
142 %sv = trunc i64 %pv to i8
143 store i8 %sv, i8* %s2