llvm/test/CodeGen/SystemZ/args-06.ll
Richard Sandiford 219d2b8695 [SystemZ] Improve extload handling
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
2013-09-16 09:03:10 +00:00

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
}