diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-06-16 21:03:24 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-06-16 21:03:24 +0000 | 
| commit | 7c7aba6e5fef47a01a136be655b0a92cfd7090f6 (patch) | |
| tree | 99ec531924f6078534b100ab9d7696abce848099 /lib/CodeGen/GlobalISel/MachineIRBuilder.cpp | |
| parent | 7ab83427af0f77b59941ceba41d509d7d097b065 (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/GlobalISel/MachineIRBuilder.cpp')
| -rw-r--r-- | lib/CodeGen/GlobalISel/MachineIRBuilder.cpp | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp index 54ef7e5c5a1b1..79d312fb52ca4 100644 --- a/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp +++ b/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp @@ -191,6 +191,24 @@ MachineInstrBuilder MachineIRBuilder::buildGEP(unsigned Res, unsigned Op0,        .addUse(Op1);  } +Optional<MachineInstrBuilder> +MachineIRBuilder::materializeGEP(unsigned &Res, unsigned Op0, +                                 const LLT &ValueTy, uint64_t Value) { +  assert(Res == 0 && "Res is a result argument"); +  assert(ValueTy.isScalar()  && "invalid offset type"); + +  if (Value == 0) { +    Res = Op0; +    return None; +  } + +  Res = MRI->createGenericVirtualRegister(MRI->getType(Op0)); +  unsigned TmpReg = MRI->createGenericVirtualRegister(ValueTy); + +  buildConstant(TmpReg, Value); +  return buildGEP(Res, Op0, TmpReg); +} +  MachineInstrBuilder MachineIRBuilder::buildPtrMask(unsigned Res, unsigned Op0,                                                     uint32_t NumBits) {    assert(MRI->getType(Res).isPointer() &&  | 
