diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-08 17:12:57 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-08 17:12:57 +0000 | 
| commit | c46e6a5940c50058e00c0c5f9123fd82e338d29a (patch) | |
| tree | 89a719d723035c54a190b1f81d329834f1f93336 /lib/CodeGen/SelectionDAG/FastISel.cpp | |
| parent | 148779df305667b6942fee7e758fdf81a6498f38 (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/SelectionDAG/FastISel.cpp')
| -rw-r--r-- | lib/CodeGen/SelectionDAG/FastISel.cpp | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index 6fb26fc3b73d5..8c98e3740f6d0 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -861,6 +861,25 @@ bool FastISel::selectPatchpoint(const CallInst *I) {    return true;  } +bool FastISel::selectXRayCustomEvent(const CallInst *I) { +  const auto &Triple = TM.getTargetTriple(); +  if (Triple.getArch() != Triple::x86_64 || !Triple.isOSLinux()) +    return true; // don't do anything to this instruction. +  SmallVector<MachineOperand, 8> Ops; +  Ops.push_back(MachineOperand::CreateReg(getRegForValue(I->getArgOperand(0)), +                                          /*IsDef=*/false)); +  Ops.push_back(MachineOperand::CreateReg(getRegForValue(I->getArgOperand(1)), +                                          /*IsDef=*/false)); +  MachineInstrBuilder MIB = +      BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, +              TII.get(TargetOpcode::PATCHABLE_EVENT_CALL)); +  for (auto &MO : Ops) +    MIB.add(MO); +  // Insert the Patchable Event Call instruction, that gets lowered properly. +  return true; +} + +  /// Returns an AttributeList representing the attributes applied to the return  /// value of the given call.  static AttributeList getReturnAttrs(FastISel::CallLoweringInfo &CLI) { @@ -1252,6 +1271,9 @@ bool FastISel::selectIntrinsicCall(const IntrinsicInst *II) {    case Intrinsic::experimental_patchpoint_void:    case Intrinsic::experimental_patchpoint_i64:      return selectPatchpoint(II); + +  case Intrinsic::xray_customevent: +    return selectXRayCustomEvent(II);    }    return fastLowerIntrinsicCall(II);  | 
