Workaround clang ABI change with unsed arguments (ugly fix)

This commit is contained in:
Gael Guennebaud 2014-02-24 17:12:17 +01:00
parent 6fecb6f1b6
commit 21fecd5252
2 changed files with 31 additions and 12 deletions

View File

@ -1130,6 +1130,10 @@ EIGEN_DONT_INLINE void gemm_pack_lhs<Scalar, Index, Pack1, Pack2, StorageOrder,
EIGEN_ASM_COMMENT("EIGEN PRODUCT PACK LHS"); EIGEN_ASM_COMMENT("EIGEN PRODUCT PACK LHS");
eigen_assert(((!PanelMode) && stride==0 && offset==0) || (PanelMode && stride>=depth && offset<=stride)); eigen_assert(((!PanelMode) && stride==0 && offset==0) || (PanelMode && stride>=depth && offset<=stride));
eigen_assert( (StorageOrder==RowMajor) || ((Pack1%PacketSize)==0 && Pack1<=4*PacketSize) ); eigen_assert( (StorageOrder==RowMajor) || ((Pack1%PacketSize)==0 && Pack1<=4*PacketSize) );
#ifdef __clang__
// Workaround clang ABI change with unsed arguments
if(!PanelMode) depth += stride + offset;
#endif
conj_if<NumTraits<Scalar>::IsComplex && Conjugate> cj; conj_if<NumTraits<Scalar>::IsComplex && Conjugate> cj;
const_blas_data_mapper<Scalar, Index, StorageOrder> lhs(_lhs,lhsStride); const_blas_data_mapper<Scalar, Index, StorageOrder> lhs(_lhs,lhsStride);
Index count = 0; Index count = 0;
@ -1216,6 +1220,10 @@ EIGEN_DONT_INLINE void gemm_pack_rhs<Scalar, Index, nr, ColMajor, Conjugate, Pan
{ {
EIGEN_ASM_COMMENT("EIGEN PRODUCT PACK RHS COLMAJOR"); EIGEN_ASM_COMMENT("EIGEN PRODUCT PACK RHS COLMAJOR");
eigen_assert(((!PanelMode) && stride==0 && offset==0) || (PanelMode && stride>=depth && offset<=stride)); eigen_assert(((!PanelMode) && stride==0 && offset==0) || (PanelMode && stride>=depth && offset<=stride));
#ifdef __clang__
// Workaround clang ABI change with unsed arguments
if(!PanelMode) depth += stride + offset;
#endif
conj_if<NumTraits<Scalar>::IsComplex && Conjugate> cj; conj_if<NumTraits<Scalar>::IsComplex && Conjugate> cj;
Index packet_cols = (cols/nr) * nr; Index packet_cols = (cols/nr) * nr;
Index count = 0; Index count = 0;
@ -1267,6 +1275,10 @@ EIGEN_DONT_INLINE void gemm_pack_rhs<Scalar, Index, nr, RowMajor, Conjugate, Pan
{ {
EIGEN_ASM_COMMENT("EIGEN PRODUCT PACK RHS ROWMAJOR"); EIGEN_ASM_COMMENT("EIGEN PRODUCT PACK RHS ROWMAJOR");
eigen_assert(((!PanelMode) && stride==0 && offset==0) || (PanelMode && stride>=depth && offset<=stride)); eigen_assert(((!PanelMode) && stride==0 && offset==0) || (PanelMode && stride>=depth && offset<=stride));
#ifdef __clang__
// Workaround clang ABI change with unsed arguments
if(!PanelMode) depth += stride + offset;
#endif
conj_if<NumTraits<Scalar>::IsComplex && Conjugate> cj; conj_if<NumTraits<Scalar>::IsComplex && Conjugate> cj;
Index packet_cols = (cols/nr) * nr; Index packet_cols = (cols/nr) * nr;
Index count = 0; Index count = 0;

View File

@ -80,11 +80,8 @@ EIGEN_DONT_INLINE static void run(
Index rows, Index cols, Index rows, Index cols,
const LhsScalar* lhs, Index lhsStride, const LhsScalar* lhs, Index lhsStride,
const RhsScalar* rhs, Index rhsIncr, const RhsScalar* rhs, Index rhsIncr,
ResScalar* res, Index ResScalar* res, Index resIncr,
#ifdef EIGEN_INTERNAL_DEBUGGING RhsScalar alpha);
resIncr
#endif
, RhsScalar alpha);
}; };
template<typename Index, typename LhsScalar, bool ConjugateLhs, typename RhsScalar, bool ConjugateRhs, int Version> template<typename Index, typename LhsScalar, bool ConjugateLhs, typename RhsScalar, bool ConjugateRhs, int Version>
@ -92,13 +89,17 @@ EIGEN_DONT_INLINE void general_matrix_vector_product<Index,LhsScalar,ColMajor,Co
Index rows, Index cols, Index rows, Index cols,
const LhsScalar* lhs, Index lhsStride, const LhsScalar* lhs, Index lhsStride,
const RhsScalar* rhs, Index rhsIncr, const RhsScalar* rhs, Index rhsIncr,
ResScalar* res, Index ResScalar* res, Index resIncr,
#ifdef EIGEN_INTERNAL_DEBUGGING RhsScalar alpha)
resIncr
#endif
, RhsScalar alpha)
{ {
eigen_internal_assert(resIncr==1); eigen_internal_assert(resIncr==1);
#ifdef __clang__
// Workaround clang ABI change with unsed arguments
lhsStride += resIncr - 1;
#else
EIGEN_UNUSED_VARIABLE(resIncr);
#endif
#ifdef _EIGEN_ACCUMULATE_PACKETS #ifdef _EIGEN_ACCUMULATE_PACKETS
#error _EIGEN_ACCUMULATE_PACKETS has already been defined #error _EIGEN_ACCUMULATE_PACKETS has already been defined
#endif #endif
@ -362,8 +363,14 @@ EIGEN_DONT_INLINE void general_matrix_vector_product<Index,LhsScalar,RowMajor,Co
ResScalar* res, Index resIncr, ResScalar* res, Index resIncr,
ResScalar alpha) ResScalar alpha)
{ {
EIGEN_UNUSED_VARIABLE(rhsIncr);
eigen_internal_assert(rhsIncr==1); eigen_internal_assert(rhsIncr==1);
#ifdef __clang__
// Workaround clang ABI change with unsed arguments
lhsStride += rhsIncr - 1;
#else
EIGEN_UNUSED_VARIABLE(rhsIncr);
#endif
#ifdef _EIGEN_ACCUMULATE_PACKETS #ifdef _EIGEN_ACCUMULATE_PACKETS
#error _EIGEN_ACCUMULATE_PACKETS has already been defined #error _EIGEN_ACCUMULATE_PACKETS has already been defined
#endif #endif