summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-12-23 06:24:04 +0000
committerChris Lattner <sabre@nondot.org>2005-12-23 06:24:04 +0000
commit5ee896aad9ea0d0f2b5f9431f59ed905f2ec27cf (patch)
tree898bdfdba93f26225d1ce7340be1cbec03b54c3a /llvm
parent6e6d5a1fa12ff0ceab806f7aa245d2ec05141c6b (diff)
downloadbcm5719-llvm-5ee896aad9ea0d0f2b5f9431f59ed905f2ec27cf.tar.gz
bcm5719-llvm-5ee896aad9ea0d0f2b5f9431f59ed905f2ec27cf.zip
implement vastart. The dag isel compiles this:
void test3(va_list Y); void test2(int F, ...) { va_list X; va_start(X, F); test3(X); } into this: test2: save -104, %o6, %o6 st %i5, [%i6+88] st %i4, [%i6+84] st %i3, [%i6+80] st %i2, [%i6+76] st %i1, [%i6+72] add %i6, 72, %o0 st %o0, [%i6+-4] call test3 nop restore %g0, %g0, %g0 retl nop The simple isel emits: test2: save -96, %o6, %o6 st %i0, [%i6+68] st %i1, [%i6+72] st %i2, [%i6+76] st %i3, [%i6+80] st %i4, [%i6+84] st %i5, [%i6+88] or %g0, 1, %l0 or %g0, 4, %l1 umul %l0, %l1, %l0 add %l0, 7, %l0 and %l0, -8, %l0 sub %o6, %l0, %o6 add %o6, 96, %l0 add %i6, 72, %l1 st %l1, [%l0] ld [%l0], %o0 call test3 nop restore %g0, %g0, %g0 retl nop llvm-svn: 24985
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp b/llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp
index ea434ea8f71..e88ad2d2058 100644
--- a/llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp
@@ -568,8 +568,11 @@ SDOperand SparcV8TargetLowering::
LowerVAStart(SDOperand Chain, SDOperand VAListP, Value *VAListV,
SelectionDAG &DAG) {
- assert(0 && "Unimp");
- abort();
+ SDOperand Offset = DAG.getNode(ISD::ADD, MVT::i32,
+ DAG.getRegister(V8::I6, MVT::i32),
+ DAG.getConstant(VarArgsFrameOffset, MVT::i32));
+ return DAG.getNode(ISD::STORE, MVT::Other, Chain, Offset,
+ VAListP, DAG.getSrcValue(VAListV));
}
std::pair<SDOperand,SDOperand> SparcV8TargetLowering::
OpenPOWER on IntegriCloud