diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/IR/AutoUpgrade.cpp | 28 | 
1 files changed, 27 insertions, 1 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp index a8145b66913..e9f6566d6d0 100644 --- a/llvm/lib/IR/AutoUpgrade.cpp +++ b/llvm/lib/IR/AutoUpgrade.cpp @@ -148,7 +148,31 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {      }      break;    } - +  case 'i': { +    if (Name.startswith("invariant.start")) { +      auto Args = F->getFunctionType()->params(); +      Type* ObjectPtr = Args[1]; +      if (F->getName() != +          Intrinsic::getName(Intrinsic::invariant_start, ObjectPtr)) { +        F->setName(Name + ".old"); +        NewFn = Intrinsic::getDeclaration( +            F->getParent(), Intrinsic::invariant_start, ObjectPtr); +        return true; +      } +    } +    if (Name.startswith("invariant.end")) { +      auto Args = F->getFunctionType()->params(); +      Type* ObjectPtr = Args[2]; +      if (F->getName() != +          Intrinsic::getName(Intrinsic::invariant_end, ObjectPtr)) { +        F->setName(Name + ".old"); +        NewFn = Intrinsic::getDeclaration(F->getParent(), +                                          Intrinsic::invariant_end, ObjectPtr); +        return true; +      } +    } +    break; +  }    case 'm': {      if (Name.startswith("masked.load.")) {        Type *Tys[] = { F->getReturnType(), F->arg_begin()->getType() }; @@ -1339,6 +1363,8 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {      return;    } +  case Intrinsic::invariant_start: +  case Intrinsic::invariant_end:    case Intrinsic::masked_load:    case Intrinsic::masked_store: {      SmallVector<Value *, 4> Args(CI->arg_operands().begin(),  | 

