blob: c2760e981b71187803ea68bea0ae1909ad7b3749 [file] [log] [blame]
Alex Bradburydc31c612017-12-11 12:49:02 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3; RUN: | FileCheck -check-prefix=RV32I %s
4
5%struct.Foo = type { i32, i32, i32, i16, i8 }
6@foo = global %struct.Foo { i32 1, i32 2, i32 3, i16 4, i8 5 }, align 4
7
8define i32 @callee(%struct.Foo* byval %f) nounwind {
9; RV32I-LABEL: callee:
10; RV32I: # %bb.0: # %entry
11; RV32I-NEXT: addi sp, sp, -16
12; RV32I-NEXT: sw ra, 12(sp)
13; RV32I-NEXT: sw s0, 8(sp)
14; RV32I-NEXT: addi s0, sp, 16
15; RV32I-NEXT: lw a0, 0(a0)
16; RV32I-NEXT: lw s0, 8(sp)
17; RV32I-NEXT: lw ra, 12(sp)
18; RV32I-NEXT: addi sp, sp, 16
Alex Bradbury59136ff2017-12-15 09:47:01 +000019; RV32I-NEXT: ret
Alex Bradburydc31c612017-12-11 12:49:02 +000020entry:
21 %0 = getelementptr inbounds %struct.Foo, %struct.Foo* %f, i32 0, i32 0
22 %1 = load i32, i32* %0, align 4
23 ret i32 %1
24}
25
26
27define void @caller() nounwind {
28; RV32I-LABEL: caller:
29; RV32I: # %bb.0: # %entry
30; RV32I-NEXT: addi sp, sp, -32
31; RV32I-NEXT: sw ra, 28(sp)
32; RV32I-NEXT: sw s0, 24(sp)
33; RV32I-NEXT: addi s0, sp, 32
34; RV32I-NEXT: lui a0, %hi(foo+12)
35; RV32I-NEXT: addi a0, a0, %lo(foo+12)
36; RV32I-NEXT: lw a0, 0(a0)
37; RV32I-NEXT: sw a0, -12(s0)
38; RV32I-NEXT: lui a0, %hi(foo+8)
39; RV32I-NEXT: addi a0, a0, %lo(foo+8)
40; RV32I-NEXT: lw a0, 0(a0)
41; RV32I-NEXT: sw a0, -16(s0)
42; RV32I-NEXT: lui a0, %hi(foo+4)
43; RV32I-NEXT: addi a0, a0, %lo(foo+4)
44; RV32I-NEXT: lw a0, 0(a0)
45; RV32I-NEXT: sw a0, -20(s0)
46; RV32I-NEXT: lui a0, %hi(foo)
47; RV32I-NEXT: addi a0, a0, %lo(foo)
48; RV32I-NEXT: lw a0, 0(a0)
49; RV32I-NEXT: sw a0, -24(s0)
50; RV32I-NEXT: lui a0, %hi(callee)
51; RV32I-NEXT: addi a1, a0, %lo(callee)
52; RV32I-NEXT: addi a0, s0, -24
Alex Bradbury59136ff2017-12-15 09:47:01 +000053; RV32I-NEXT: jalr a1
Alex Bradburydc31c612017-12-11 12:49:02 +000054; RV32I-NEXT: lw s0, 24(sp)
55; RV32I-NEXT: lw ra, 28(sp)
56; RV32I-NEXT: addi sp, sp, 32
Alex Bradbury59136ff2017-12-15 09:47:01 +000057; RV32I-NEXT: ret
Alex Bradburydc31c612017-12-11 12:49:02 +000058entry:
59 %call = call i32 @callee(%struct.Foo* byval @foo)
60 ret void
61}