[PATCH] D58656: [WebAssembly] Properly align fp128 arguments in outgoing varargs arguments
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 25 21:19:45 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL354846: [WebAssembly] Properly align fp128 arguments in outgoing varargs arguments (authored by djg, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D58656?vs=188276&id=188306#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D58656/new/
https://reviews.llvm.org/D58656
Files:
llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
llvm/trunk/test/CodeGen/WebAssembly/varargs.ll
Index: llvm/trunk/test/CodeGen/WebAssembly/varargs.ll
===================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/varargs.ll
+++ llvm/trunk/test/CodeGen/WebAssembly/varargs.ll
@@ -163,6 +163,32 @@
ret void
}
+; Test that an fp128 argument is properly aligned and allocated
+; within a vararg buffer.
+
+; CHECK-LABEL: call_fp128_alignment:
+; CHECK: global.get $push7=, __stack_pointer
+; CHECK-NEXT: i32.const $push8=, 32
+; CHECK-NEXT: i32.sub $push12=, $pop7, $pop8
+; CHECK-NEXT: local.tee $push11=, $1=, $pop12
+; CHECK-NEXT: global.set __stack_pointer, $pop11
+; CHECK-NEXT: i32.const $push0=, 24
+; CHECK-NEXT: i32.add $push1=, $1, $pop0
+; CHECK-NEXT: i64.const $push2=, -9223372036854775808
+; CHECK-NEXT: i64.store 0($pop1), $pop2
+; CHECK-NEXT: i32.const $push3=, 16
+; CHECK-NEXT: i32.add $push4=, $1, $pop3
+; CHECK-NEXT: i64.const $push5=, 1
+; CHECK-NEXT: i64.store 0($pop4), $pop5
+; CHECK-NEXT: i32.const $push6=, 7
+; CHECK-NEXT: i32.store 0($1), $pop6
+; CHECK-NEXT: call callee, $1
+define void @call_fp128_alignment(i8* %p) {
+entry:
+ call void (...) @callee(i8 7, fp128 0xL00000000000000018000000000000000)
+ ret void
+}
+
declare void @llvm.va_start(i8*)
declare void @llvm.va_end(i8*)
declare void @llvm.va_copy(i8*, i8*)
Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
===================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
@@ -674,13 +674,16 @@
if (IsVarArg) {
// Outgoing non-fixed arguments are placed in a buffer. First
// compute their offsets and the total amount of buffer space needed.
- for (SDValue Arg :
- make_range(OutVals.begin() + NumFixedArgs, OutVals.end())) {
+ for (unsigned I = NumFixedArgs; I < Outs.size(); ++I) {
+ const ISD::OutputArg &Out = Outs[I];
+ SDValue &Arg = OutVals[I];
EVT VT = Arg.getValueType();
assert(VT != MVT::iPTR && "Legalized args should be concrete");
Type *Ty = VT.getTypeForEVT(*DAG.getContext());
+ unsigned Align = std::max(Out.Flags.getOrigAlign(),
+ Layout.getABITypeAlignment(Ty));
unsigned Offset = CCInfo.AllocateStack(Layout.getTypeAllocSize(Ty),
- Layout.getABITypeAlignment(Ty));
+ Align);
CCInfo.addLoc(CCValAssign::getMem(ArgLocs.size(), VT.getSimpleVT(),
Offset, VT.getSimpleVT(),
CCValAssign::Full));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58656.188306.patch
Type: text/x-patch
Size: 2801 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190226/036f395a/attachment.bin>
More information about the llvm-commits
mailing list