From 7816fae3311b4ed33113426ec5edb151a75f9dfd Mon Sep 17 00:00:00 2001 From: Vsevolod Livinskiy Date: Fri, 30 Jan 2015 16:26:18 +0300 Subject: [PATCH] Fix for __vec16_i64 element extracting --- cbackend.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cbackend.cpp b/cbackend.cpp index 5262a2d3..be324934 100644 --- a/cbackend.cpp +++ b/cbackend.cpp @@ -4418,10 +4418,16 @@ void CWriter::visitShuffleVectorInst(llvm::ShuffleVectorInst &SVI) { } else { // Do an extractelement of this value from the appropriate input. - Out << "(("; - printType(Out, llvm::PointerType::getUnqual(EltTy)); - Out << ")(&" << GetValueName(Op) - << "))[" << SrcVal << "]"; + if (OpElts != 1) { // all __vec16_* have overloaded operator [] + Out << "(" << GetValueName(Op) + << ")[" << SrcVal << "]"; + } + else { // but __vec1_* don't have it + Out << "(("; + printType(Out, llvm::PointerType::getUnqual(EltTy)); + Out << ")(&" << GetValueName(Op) + << "))[" << SrcVal << "]"; + } } } }