
Implementation is NOT compatible with IBM XL C 16.1 and earlier but is compatible with GCC. It handles all ByVals with greater alignment then pointer width the same way IBM XL C handles Byvals that have vector members. For overaligned objects that do not contain vectors IBM XL C does not align them properly if they are passed in the GPR argument registers. This patch was originally written by Sean Fertile @mandlebug. Previously on Phabricator https://reviews.llvm.org/D105659
17 lines
607 B
LLVM
17 lines
607 B
LLVM
; RUN: not --crash llc -mtriple powerpc-ibm-aix-xcoff < %s 2>&1 | FileCheck %s
|
|
; RUN: not --crash llc -mtriple powerpc64-ibm-aix-xcoff < %s 2>&1 | FileCheck %s
|
|
|
|
%struct.S = type { [1 x i8] }
|
|
|
|
define void @bar() {
|
|
entry:
|
|
%s1 = alloca %struct.S, align 32
|
|
%agg.tmp = alloca %struct.S, align 32
|
|
call void @foo(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, ptr byval(%struct.S) align 32 %agg.tmp)
|
|
ret void
|
|
}
|
|
|
|
declare void @foo(i32, i32, i32, i32, i32, i32, i32, i32, ptr byval(%struct.S) align 32)
|
|
|
|
; CHECK: LLVM ERROR: Pass-by-value arguments with alignment greater than 16 are not supported.
|