-template <> inline bool isa<BasicBlock, const Value*>(const Value *Val) {
- return Val->getValueType() == Value::BasicBlockVal;
-}
-template <> inline bool isa<BasicBlock, Value*>(Value *Val) {
- return Val->getValueType() == Value::BasicBlockVal;
-}
-template <> inline bool isa<Function, const Value*>(const Value *Val) {
- return Val->getValueType() == Value::FunctionVal;
-}
-template <> inline bool isa<Function, Value*>(Value *Val) {
- return Val->getValueType() == Value::FunctionVal;
-}
-template <> inline bool isa<GlobalVariable, const Value*>(const Value *Val) {
- return Val->getValueType() == Value::GlobalVariableVal;
-}
-template <> inline bool isa<GlobalVariable, Value*>(Value *Val) {
- return Val->getValueType() == Value::GlobalVariableVal;
-}
-template <> inline bool isa<GlobalValue, const Value*>(const Value *Val) {
- return isa<GlobalVariable>(Val) || isa<Function>(Val);
+template <> inline bool isa_impl<GlobalVariable, Value>(const Value &Val) {
+ return Val.getValueType() == Value::GlobalVariableVal;