mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-22 10:29:35 +00:00
The port originally had special patterns for extload, mapping them to the same instructions as sextload. It seemed neater to have patterns that match "an extension that is allowed to be signed" and "an extension that is allowed to be unsigned". This was originally meant to be a clean-up, but it does improve the handling of promoted integers a little, as shown by args-06.ll. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190777 91177308-0d34-0410-b5e6-96231b3b80d8
77 lines
1.8 KiB
LLVM
77 lines
1.8 KiB
LLVM
; Test the padding of unextended integer stack parameters. These are used
|
|
; to pass structures.
|
|
;
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
|
|
|
|
define i8 @f1(i8 %a, i8 %b, i8 %c, i8 %d, i8 %e, i8 %f, i8 %g) {
|
|
; CHECK-LABEL: f1:
|
|
; CHECK: ar %r2, %r3
|
|
; CHECK: ar %r2, %r4
|
|
; CHECK: ar %r2, %r5
|
|
; CHECK: ar %r2, %r6
|
|
; CHECK: lb {{%r[0-5]}}, 167(%r15)
|
|
; CHECK: lb {{%r[0-5]}}, 175(%r15)
|
|
; CHECK: br %r14
|
|
%addb = add i8 %a, %b
|
|
%addc = add i8 %addb, %c
|
|
%addd = add i8 %addc, %d
|
|
%adde = add i8 %addd, %e
|
|
%addf = add i8 %adde, %f
|
|
%addg = add i8 %addf, %g
|
|
ret i8 %addg
|
|
}
|
|
|
|
define i16 @f2(i16 %a, i16 %b, i16 %c, i16 %d, i16 %e, i16 %f, i16 %g) {
|
|
; CHECK-LABEL: f2:
|
|
; CHECK: ar %r2, %r3
|
|
; CHECK: ar %r2, %r4
|
|
; CHECK: ar %r2, %r5
|
|
; CHECK: ar %r2, %r6
|
|
; CHECK: ah %r2, 166(%r15)
|
|
; CHECK: ah %r2, 174(%r15)
|
|
; CHECK: br %r14
|
|
%addb = add i16 %a, %b
|
|
%addc = add i16 %addb, %c
|
|
%addd = add i16 %addc, %d
|
|
%adde = add i16 %addd, %e
|
|
%addf = add i16 %adde, %f
|
|
%addg = add i16 %addf, %g
|
|
ret i16 %addg
|
|
}
|
|
|
|
define i32 @f3(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g) {
|
|
; CHECK-LABEL: f3:
|
|
; CHECK: ar %r2, %r3
|
|
; CHECK: ar %r2, %r4
|
|
; CHECK: ar %r2, %r5
|
|
; CHECK: ar %r2, %r6
|
|
; CHECK: a %r2, 164(%r15)
|
|
; CHECK: a %r2, 172(%r15)
|
|
; CHECK: br %r14
|
|
%addb = add i32 %a, %b
|
|
%addc = add i32 %addb, %c
|
|
%addd = add i32 %addc, %d
|
|
%adde = add i32 %addd, %e
|
|
%addf = add i32 %adde, %f
|
|
%addg = add i32 %addf, %g
|
|
ret i32 %addg
|
|
}
|
|
|
|
define i64 @f4(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g) {
|
|
; CHECK-LABEL: f4:
|
|
; CHECK: agr %r2, %r3
|
|
; CHECK: agr %r2, %r4
|
|
; CHECK: agr %r2, %r5
|
|
; CHECK: agr %r2, %r6
|
|
; CHECK: ag %r2, 160(%r15)
|
|
; CHECK: ag %r2, 168(%r15)
|
|
; CHECK: br %r14
|
|
%addb = add i64 %a, %b
|
|
%addc = add i64 %addb, %c
|
|
%addd = add i64 %addc, %d
|
|
%adde = add i64 %addd, %e
|
|
%addf = add i64 %adde, %f
|
|
%addg = add i64 %addf, %g
|
|
ret i64 %addg
|
|
}
|