Commit 6e992147 by Jim Stichnoth

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
parent 1e889586
...@@ -640,6 +640,7 @@ template <> void InstX8632Imul::emit(const Cfg *Func) const { ...@@ -640,6 +640,7 @@ template <> void InstX8632Imul::emit(const Cfg *Func) const {
if (getDest()->getType() == IceType_i8) { if (getDest()->getType() == IceType_i8) {
// The 8-bit version of imul only allows the form "imul r/m8". // The 8-bit version of imul only allows the form "imul r/m8".
Variable *Src0 = llvm::dyn_cast<Variable>(getSrc(0)); Variable *Src0 = llvm::dyn_cast<Variable>(getSrc(0));
(void)Src0;
assert(Src0 && Src0->getRegNum() == TargetX8632::Reg_eax); assert(Src0 && Src0->getRegNum() == TargetX8632::Reg_eax);
Str << "\timul\t"; Str << "\timul\t";
getSrc(1)->emit(Func); getSrc(1)->emit(Func);
...@@ -686,6 +687,7 @@ void InstX8632Shld::emit(const Cfg *Func) const { ...@@ -686,6 +687,7 @@ void InstX8632Shld::emit(const Cfg *Func) const {
getSrc(1)->emit(Func); getSrc(1)->emit(Func);
Str << ", "; Str << ", ";
if (Variable *ShiftReg = llvm::dyn_cast<Variable>(getSrc(2))) { if (Variable *ShiftReg = llvm::dyn_cast<Variable>(getSrc(2))) {
(void)ShiftReg;
assert(ShiftReg->getRegNum() == TargetX8632::Reg_ecx); assert(ShiftReg->getRegNum() == TargetX8632::Reg_ecx);
Str << "cl"; Str << "cl";
} else { } else {
...@@ -711,6 +713,7 @@ void InstX8632Shrd::emit(const Cfg *Func) const { ...@@ -711,6 +713,7 @@ void InstX8632Shrd::emit(const Cfg *Func) const {
getSrc(1)->emit(Func); getSrc(1)->emit(Func);
Str << ", "; Str << ", ";
if (Variable *ShiftReg = llvm::dyn_cast<Variable>(getSrc(2))) { if (Variable *ShiftReg = llvm::dyn_cast<Variable>(getSrc(2))) {
(void)ShiftReg;
assert(ShiftReg->getRegNum() == TargetX8632::Reg_ecx); assert(ShiftReg->getRegNum() == TargetX8632::Reg_ecx);
Str << "cl"; Str << "cl";
} else { } else {
......
...@@ -1190,6 +1190,31 @@ private: ...@@ -1190,6 +1190,31 @@ private:
virtual ~InstX8632Xchg() {} 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 } // end of namespace Ice
#endif // SUBZERO_SRC_ICEINSTX8632_H #endif // SUBZERO_SRC_ICEINSTX8632_H
...@@ -115,6 +115,7 @@ const size_t TableTypeX8632AttributesSize = ...@@ -115,6 +115,7 @@ const size_t TableTypeX8632AttributesSize =
Type getInVectorElementType(Type Ty) { Type getInVectorElementType(Type Ty) {
assert(isVectorType(Ty)); assert(isVectorType(Ty));
size_t Index = static_cast<size_t>(Ty); size_t Index = static_cast<size_t>(Ty);
(void)Index;
assert(Index < TableTypeX8632AttributesSize); assert(Index < TableTypeX8632AttributesSize);
return TableTypeX8632Attributes[Ty].InVectorElementType; return TableTypeX8632Attributes[Ty].InVectorElementType;
} }
...@@ -2051,6 +2052,7 @@ void TargetX8632::lowerCast(const InstCast *Inst) { ...@@ -2051,6 +2052,7 @@ void TargetX8632::lowerCast(const InstCast *Inst) {
Operand *Src0RM = legalize(Src0, Legal_Reg | Legal_Mem); Operand *Src0RM = legalize(Src0, Legal_Reg | Legal_Mem);
Type DestType = Dest->getType(); Type DestType = Dest->getType();
Type SrcType = Src0RM->getType(); Type SrcType = Src0RM->getType();
(void)DestType;
assert((DestType == IceType_i32 && SrcType == IceType_f32) || assert((DestType == IceType_i32 && SrcType == IceType_f32) ||
(DestType == IceType_f32 && SrcType == IceType_i32)); (DestType == IceType_f32 && SrcType == IceType_i32));
// a.i32 = bitcast b.f32 ==> // a.i32 = bitcast b.f32 ==>
...@@ -2751,8 +2753,8 @@ void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { ...@@ -2751,8 +2753,8 @@ void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) {
// Make sure the atomic load isn't elided when unused, by adding a FakeUse. // Make sure the atomic load isn't elided when unused, by adding a FakeUse.
// Since lowerLoad may fuse the load w/ an arithmetic instruction, // Since lowerLoad may fuse the load w/ an arithmetic instruction,
// insert the FakeUse on the last-inserted instruction's dest. // insert the FakeUse on the last-inserted instruction's dest.
Context.insert(InstFakeUse::create(Func, Context.insert(
Context.getLastInserted()->getDest())); InstFakeUse::create(Func, Context.getLastInserted()->getDest()));
return; return;
} }
case Intrinsics::AtomicRMW: case Intrinsics::AtomicRMW:
...@@ -3144,6 +3146,7 @@ void TargetX8632::lowerAtomicRMW(Variable *Dest, uint32_t Operation, ...@@ -3144,6 +3146,7 @@ void TargetX8632::lowerAtomicRMW(Variable *Dest, uint32_t Operation,
return; return;
} }
// Otherwise, we need a cmpxchg loop. // Otherwise, we need a cmpxchg loop.
(void)NeedsCmpxchg;
assert(NeedsCmpxchg); assert(NeedsCmpxchg);
expandAtomicRMWAsCmpxchg(Op_Lo, Op_Hi, Dest, Ptr, Val); expandAtomicRMWAsCmpxchg(Op_Lo, Op_Hi, Dest, Ptr, Val);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment