Index: src/IceTargetLoweringX86Base.h |
diff --git a/src/IceTargetLoweringX86Base.h b/src/IceTargetLoweringX86Base.h |
index f84c6df1d492b72c4230c6b26a26662e9ad5b915..71b824f7ad3e4bcdbdb2fa0f70c69647d389edb3 100644 |
--- a/src/IceTargetLoweringX86Base.h |
+++ b/src/IceTargetLoweringX86Base.h |
@@ -801,6 +801,10 @@ protected: |
AutoMemorySandboxer<> _(this, &Dest, &Src0); |
Context.insert<typename Traits::Insts::Por>(Dest, Src0); |
} |
+ void _punpckl(Variable *Dest, Operand *Src0) { |
+ AutoMemorySandboxer<> _(this, &Dest, &Src0); |
+ Context.insert<typename Traits::Insts::Punpckl>(Dest, Src0); |
+ } |
void _pshufd(Variable *Dest, Operand *Src0, Operand *Src1) { |
AutoMemorySandboxer<> _(this, &Dest, &Src0, &Src1); |
Context.insert<typename Traits::Insts::Pshufd>(Dest, Src0, Src1); |
@@ -1082,6 +1086,23 @@ private: |
BoolFolding<Traits> FoldingInfo; |
+ /// Helpers for lowering ShuffleVector |
+ /// @{ |
+ Variable *lowerShuffleVector_AllFromSameSrc(Variable *Src, SizeT Index0, |
+ SizeT Index1, SizeT Index2, |
+ SizeT Index3); |
+ static constexpr SizeT IGNORE_INDEX = 0x80000000u; |
+ Variable *lowerShuffleVector_TwoFromSameSrc(Variable *Src0, SizeT Index0, |
+ SizeT Index1, Variable *Src1, |
+ SizeT Index2, SizeT Index3); |
+ static constexpr SizeT UNIFIED_INDEX_0 = 0; |
+ static constexpr SizeT UNIFIED_INDEX_1 = 2; |
+ Variable *lowerShuffleVector_UnifyFromDifferentSrcs(Variable *Src0, |
+ SizeT Index0, |
+ Variable *Src1, |
+ SizeT Index1); |
+ /// @} |
+ |
static FixupKind PcRelFixup; |
static FixupKind AbsFixup; |
}; |