Subzero: Try to fix warnings and errors in the Windows build. Quiet some unused-variable warnings when their only use is in an assert(). Forward-declare partial template specializations when the template method already has a default implementation, to avoid ODR violations and link errors. BUG= https://codereview.chromium.org/296053008/ R=wala@chromium.org Review URL: https://codereview.chromium.org/429993002
diff --git a/src/IceInstX8632.cpp b/src/IceInstX8632.cpp index be84554..14e9503 100644 --- a/src/IceInstX8632.cpp +++ b/src/IceInstX8632.cpp
@@ -640,6 +640,7 @@ if (getDest()->getType() == IceType_i8) { // The 8-bit version of imul only allows the form "imul r/m8". Variable *Src0 = llvm::dyn_cast<Variable>(getSrc(0)); + (void)Src0; assert(Src0 && Src0->getRegNum() == TargetX8632::Reg_eax); Str << "\timul\t"; getSrc(1)->emit(Func); @@ -686,6 +687,7 @@ getSrc(1)->emit(Func); Str << ", "; if (Variable *ShiftReg = llvm::dyn_cast<Variable>(getSrc(2))) { + (void)ShiftReg; assert(ShiftReg->getRegNum() == TargetX8632::Reg_ecx); Str << "cl"; } else { @@ -711,6 +713,7 @@ getSrc(1)->emit(Func); Str << ", "; if (Variable *ShiftReg = llvm::dyn_cast<Variable>(getSrc(2))) { + (void)ShiftReg; assert(ShiftReg->getRegNum() == TargetX8632::Reg_ecx); Str << "cl"; } else {
diff --git a/src/IceInstX8632.h b/src/IceInstX8632.h index fb57b75..18f0dde 100644 --- a/src/IceInstX8632.h +++ b/src/IceInstX8632.h
@@ -1190,6 +1190,31 @@ virtual ~InstX8632Xchg() {} }; +// Declare partial template specializations of emit() methods that +// already have default implementations. Without this, there is the +// possibility of ODR violations and link errors. +template <> void InstX8632Addss::emit(const Cfg *Func) const; +template <> void InstX8632Blendvps::emit(const Cfg *Func) const; +template <> void InstX8632Div::emit(const Cfg *Func) const; +template <> void InstX8632Divss::emit(const Cfg *Func) const; +template <> void InstX8632Idiv::emit(const Cfg *Func) const; +template <> void InstX8632Imul::emit(const Cfg *Func) const; +template <> void InstX8632Lea::emit(const Cfg *Func) const; +template <> void InstX8632Mulss::emit(const Cfg *Func) const; +template <> void InstX8632Padd::emit(const Cfg *Func) const; +template <> void InstX8632Pblendvb::emit(const Cfg *Func) const; +template <> void InstX8632Pcmpeq::emit(const Cfg *Func) const; +template <> void InstX8632Pcmpgt::emit(const Cfg *Func) const; +template <> void InstX8632Pextr::emit(const Cfg *Func) const; +template <> void InstX8632Pinsr::emit(const Cfg *Func) const; +template <> void InstX8632Pmull::emit(const Cfg *Func) const; +template <> void InstX8632Pmuludq::emit(const Cfg *Func) const; +template <> void InstX8632Psll::emit(const Cfg *Func) const; +template <> void InstX8632Psra::emit(const Cfg *Func) const; +template <> void InstX8632Psub::emit(const Cfg *Func) const; +template <> void InstX8632Sqrtss::emit(const Cfg *Func) const; +template <> void InstX8632Subss::emit(const Cfg *Func) const; + } // end of namespace Ice #endif // SUBZERO_SRC_ICEINSTX8632_H
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp index cc6f222..72e9a05 100644 --- a/src/IceTargetLoweringX8632.cpp +++ b/src/IceTargetLoweringX8632.cpp
@@ -115,6 +115,7 @@ Type getInVectorElementType(Type Ty) { assert(isVectorType(Ty)); size_t Index = static_cast<size_t>(Ty); + (void)Index; assert(Index < TableTypeX8632AttributesSize); return TableTypeX8632Attributes[Ty].InVectorElementType; } @@ -2051,6 +2052,7 @@ Operand *Src0RM = legalize(Src0, Legal_Reg | Legal_Mem); Type DestType = Dest->getType(); Type SrcType = Src0RM->getType(); + (void)DestType; assert((DestType == IceType_i32 && SrcType == IceType_f32) || (DestType == IceType_f32 && SrcType == IceType_i32)); // a.i32 = bitcast b.f32 ==> @@ -2751,8 +2753,8 @@ // Make sure the atomic load isn't elided when unused, by adding a FakeUse. // Since lowerLoad may fuse the load w/ an arithmetic instruction, // insert the FakeUse on the last-inserted instruction's dest. - Context.insert(InstFakeUse::create(Func, - Context.getLastInserted()->getDest())); + Context.insert( + InstFakeUse::create(Func, Context.getLastInserted()->getDest())); return; } case Intrinsics::AtomicRMW: @@ -3144,6 +3146,7 @@ return; } // Otherwise, we need a cmpxchg loop. + (void)NeedsCmpxchg; assert(NeedsCmpxchg); expandAtomicRMWAsCmpxchg(Op_Lo, Op_Hi, Dest, Ptr, Val); }