[llvm-commits] [llvm] r65152 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/ret-mmx.ll
Nick Lewycky
nicholas at mxc.ca
Fri Feb 20 21:26:52 PST 2009
Evan Cheng wrote:
> Author: evancheng
> Date: Fri Feb 20 14:43:02 2009
> New Revision: 65152
>
> URL: http://llvm.org/viewvc/llvm-project?rev=65152&view=rev
> Log:
> Support return of MMX values in 64-bit mode.
Evan, this is causing a failure on the linux-ppc tester. (You might be
able to reproduce this on a darwin-ppc too.) The failure is:
FAIL: /home/buildbot-llvm/1/llvm-ppc/build/test/CodeGen/X86/ret-mmx.ll
Failed with signal(SIGABRT) at line 1
while running: llvm-as <
/home/buildbot-llvm/1/llvm-ppc/build/test/CodeGen/X86/ret-mmx.ll | llc
-march=x86-64 -mattr=+mmx
0x1125fc78: v2i64,ch,flag = CopyFromReg 0x1125fb68, 0x1125fbf0,
0x1125fb68:1llc: LegalizeDAG.cpp:7523:
void<unnamed>::SelectionDAGLegalize::SplitVectorOp(llvm::SDValue,
llvm::SDValue&, llvm::SDValue&): Assertion `0 && "Unhandled operation in
SplitVectorOp!"' failed.
0 llc 0x11017c90
1 llc 0x110180f8
2 0x00100344 __kernel_sigtramp32 + 0
3 0xbfd35648 __kernel_sigtramp32 + 3217249028
4 libc.so.6 0x0fc0bca0 abort + 608
5 libc.so.6 0x0fc00fd8 __assert_fail + 216
6 llc 0x10b31368
7 llc 0x10b3804c
8 llc 0x10b193c0
9 llc 0x10b2ba60
10 llc 0x10b2fd14
11 llc 0x10b1796c
12 llc 0x10b4d028
13 llc 0x10b4d3a0
14 llc 0x10b4d568 llvm::SelectionDAG::Legalize(bool) + 72
15 llc 0x10add494 llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 2192
16 llc 0x10adfdb8
llvm::SelectionDAGISel::SelectBasicBlock(llvm::BasicBlock*,
llvm::ilist_iterator<llvm::Instruction>,
llvm::ilist_iterator<llvm::Instruction>) + 824
17 llc 0x10ae09d4
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function&,
llvm::MachineFunction&, llvm::MachineModuleInfo*, llvm::DwarfWriter*,
llvm::TargetInstrInfo const&) + 2668
18 llc 0x10ae1b74
llvm::SelectionDAGISel::runOnFunction(llvm::Function&) + 1012
19 llc 0x10f55c9c
llvm::FPPassManager::runOnFunction(llvm::Function&) + 360
20 llc 0x10f56c60
llvm::FunctionPassManagerImpl::run(llvm::Function&) + 164
21 llc 0x10f56eac llvm::FunctionPassManager::run(llvm::Function&)
+ 200
22 llc 0x103cd0d4 main + 2824
23 libc.so.6 0x0fbf1704
24 libc.so.6 0x0fbf18c0
The most likely culprit is relying on CPU auto-detection which doesn't
work when running on PPC. A distant second is some sort of endianess bug.
Nick
PS. logs url is:
http://google1.osuosl.org:8011/builders/llvm-ppc-linux/builds/931/steps/test/logs/stdio
>
> Added:
> llvm/trunk/test/CodeGen/X86/ret-mmx.ll
> Modified:
> llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=65152&r1=65151&r2=65152&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Feb 20 14:43:02 2009
> @@ -1071,9 +1071,21 @@
> CopyVT = MVT::f80;
> }
>
> - Chain = DAG.getCopyFromReg(Chain, dl, VA.getLocReg(),
> - CopyVT, InFlag).getValue(1);
> - SDValue Val = Chain.getValue(0);
> + SDValue Val;
> + if (Is64Bit && CopyVT.isVector() && CopyVT.getSizeInBits() == 64) {
> + // For x86-64, MMX values are returned in XMM0 and XMM1. Issue an
> + // extract_vector_elt to i64 and then bit_convert it to the desired type.
> + Chain = DAG.getCopyFromReg(Chain, dl, VA.getLocReg(),
> + MVT::v2i64, InFlag).getValue(1);
> + Val = Chain.getValue(0);
> + Val = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i64,
> + Val, DAG.getConstant(0, MVT::i64));
> + Val = DAG.getNode(ISD::BIT_CONVERT, dl, CopyVT, Val);
> + } else {
> + Chain = DAG.getCopyFromReg(Chain, dl, VA.getLocReg(),
> + CopyVT, InFlag).getValue(1);
> + Val = Chain.getValue(0);
> + }
> InFlag = Chain.getValue(2);
>
> if (CopyVT != VA.getValVT()) {
>
> Added: llvm/trunk/test/CodeGen/X86/ret-mmx.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/ret-mmx.ll?rev=65152&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/ret-mmx.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/ret-mmx.ll Fri Feb 20 14:43:02 2009
> @@ -0,0 +1,13 @@
> +; RUN: llvm-as < %s | llc -march=x86-64 -mattr=+mmx
> +; rdar://6602459
> +
> + at g_v1di = external global <1 x i64>
> +
> +define void @test_v1di() nounwind {
> +entry:
> + %call = call <1 x i64> @return_v1di() ; <<1 x i64>> [#uses=0]
> + store <1 x i64> %call, <1 x i64>* @g_v1di
> + ret void
> +}
> +
> +declare <1 x i64> @return_v1di()
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list