blob: a4060580ffc45b137fe38b4a45189cf88a878aee [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
Alex Bradburydc31c612017-12-11 12:49:02 +000011; RV32I-NEXT: lw a0, 0(a0)
Alex Bradbury59136ff2017-12-15 09:47:01 +000012; RV32I-NEXT: ret
Alex Bradburydc31c612017-12-11 12:49:02 +000013entry:
14 %0 = getelementptr inbounds %struct.Foo, %struct.Foo* %f, i32 0, i32 0
15 %1 = load i32, i32* %0, align 4
16 ret i32 %1
17}
18
19
20define void @caller() nounwind {
21; RV32I-LABEL: caller:
22; RV32I: # %bb.0: # %entry
23; RV32I-NEXT: addi sp, sp, -32
24; RV32I-NEXT: sw ra, 28(sp)
Alex Bradburydc31c612017-12-11 12:49:02 +000025; RV32I-NEXT: lui a0, %hi(foo+12)
26; RV32I-NEXT: addi a0, a0, %lo(foo+12)
27; RV32I-NEXT: lw a0, 0(a0)
Alex Bradbury7d6aa1f2018-01-18 11:34:02 +000028; RV32I-NEXT: sw a0, 24(sp)
Alex Bradburydc31c612017-12-11 12:49:02 +000029; RV32I-NEXT: lui a0, %hi(foo+8)
30; RV32I-NEXT: addi a0, a0, %lo(foo+8)
31; RV32I-NEXT: lw a0, 0(a0)
Alex Bradbury7d6aa1f2018-01-18 11:34:02 +000032; RV32I-NEXT: sw a0, 20(sp)
Alex Bradburydc31c612017-12-11 12:49:02 +000033; RV32I-NEXT: lui a0, %hi(foo+4)
34; RV32I-NEXT: addi a0, a0, %lo(foo+4)
35; RV32I-NEXT: lw a0, 0(a0)
Alex Bradbury7d6aa1f2018-01-18 11:34:02 +000036; RV32I-NEXT: sw a0, 16(sp)
Alex Bradburydc31c612017-12-11 12:49:02 +000037; RV32I-NEXT: lui a0, %hi(foo)
38; RV32I-NEXT: addi a0, a0, %lo(foo)
39; RV32I-NEXT: lw a0, 0(a0)
Alex Bradbury7d6aa1f2018-01-18 11:34:02 +000040; RV32I-NEXT: sw a0, 12(sp)
Alex Bradburydc31c612017-12-11 12:49:02 +000041; RV32I-NEXT: lui a0, %hi(callee)
42; RV32I-NEXT: addi a1, a0, %lo(callee)
Alex Bradbury7d6aa1f2018-01-18 11:34:02 +000043; RV32I-NEXT: addi a0, sp, 12
Alex Bradbury59136ff2017-12-15 09:47:01 +000044; RV32I-NEXT: jalr a1
Alex Bradburydc31c612017-12-11 12:49:02 +000045; RV32I-NEXT: lw ra, 28(sp)
46; RV32I-NEXT: addi sp, sp, 32
Alex Bradbury59136ff2017-12-15 09:47:01 +000047; RV32I-NEXT: ret
Alex Bradburydc31c612017-12-11 12:49:02 +000048entry:
49 %call = call i32 @callee(%struct.Foo* byval @foo)
50 ret void
51}