mirror of
https://github.com/RPCS3/llvm.git
synced 2026-08-28 05:10:05 -04:00
ff43d39338
This patch switches the default for -riscv-no-aliases to false and updates all affected MC and CodeGen tests. As recommended in D41071, MC tests use the canonical instructions and the CodeGen tests use the aliases. Additionally, for the f and d instructions with rounding mode, the tests for the aliased versions are moved and tightened such that they can actually detect if alias emission is enabled. (see D40902 for context) Differential Revision: https://reviews.llvm.org/D41225 Patch by Mario Werner. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320797 91177308-0d34-0410-b5e6-96231b3b80d8
62 lines
1.9 KiB
LLVM
62 lines
1.9 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
|
|
; RUN: | FileCheck -check-prefix=RV32I %s
|
|
|
|
%struct.Foo = type { i32, i32, i32, i16, i8 }
|
|
@foo = global %struct.Foo { i32 1, i32 2, i32 3, i16 4, i8 5 }, align 4
|
|
|
|
define i32 @callee(%struct.Foo* byval %f) nounwind {
|
|
; RV32I-LABEL: callee:
|
|
; RV32I: # %bb.0: # %entry
|
|
; RV32I-NEXT: addi sp, sp, -16
|
|
; RV32I-NEXT: sw ra, 12(sp)
|
|
; RV32I-NEXT: sw s0, 8(sp)
|
|
; RV32I-NEXT: addi s0, sp, 16
|
|
; RV32I-NEXT: lw a0, 0(a0)
|
|
; RV32I-NEXT: lw s0, 8(sp)
|
|
; RV32I-NEXT: lw ra, 12(sp)
|
|
; RV32I-NEXT: addi sp, sp, 16
|
|
; RV32I-NEXT: ret
|
|
entry:
|
|
%0 = getelementptr inbounds %struct.Foo, %struct.Foo* %f, i32 0, i32 0
|
|
%1 = load i32, i32* %0, align 4
|
|
ret i32 %1
|
|
}
|
|
|
|
|
|
define void @caller() nounwind {
|
|
; RV32I-LABEL: caller:
|
|
; RV32I: # %bb.0: # %entry
|
|
; RV32I-NEXT: addi sp, sp, -32
|
|
; RV32I-NEXT: sw ra, 28(sp)
|
|
; RV32I-NEXT: sw s0, 24(sp)
|
|
; RV32I-NEXT: addi s0, sp, 32
|
|
; RV32I-NEXT: lui a0, %hi(foo+12)
|
|
; RV32I-NEXT: addi a0, a0, %lo(foo+12)
|
|
; RV32I-NEXT: lw a0, 0(a0)
|
|
; RV32I-NEXT: sw a0, -12(s0)
|
|
; RV32I-NEXT: lui a0, %hi(foo+8)
|
|
; RV32I-NEXT: addi a0, a0, %lo(foo+8)
|
|
; RV32I-NEXT: lw a0, 0(a0)
|
|
; RV32I-NEXT: sw a0, -16(s0)
|
|
; RV32I-NEXT: lui a0, %hi(foo+4)
|
|
; RV32I-NEXT: addi a0, a0, %lo(foo+4)
|
|
; RV32I-NEXT: lw a0, 0(a0)
|
|
; RV32I-NEXT: sw a0, -20(s0)
|
|
; RV32I-NEXT: lui a0, %hi(foo)
|
|
; RV32I-NEXT: addi a0, a0, %lo(foo)
|
|
; RV32I-NEXT: lw a0, 0(a0)
|
|
; RV32I-NEXT: sw a0, -24(s0)
|
|
; RV32I-NEXT: lui a0, %hi(callee)
|
|
; RV32I-NEXT: addi a1, a0, %lo(callee)
|
|
; RV32I-NEXT: addi a0, s0, -24
|
|
; RV32I-NEXT: jalr a1
|
|
; RV32I-NEXT: lw s0, 24(sp)
|
|
; RV32I-NEXT: lw ra, 28(sp)
|
|
; RV32I-NEXT: addi sp, sp, 32
|
|
; RV32I-NEXT: ret
|
|
entry:
|
|
%call = call i32 @callee(%struct.Foo* byval @foo)
|
|
ret void
|
|
}
|