MachineInstrBuilder.h revision a65aa0f0bba1ef2322d63d05c074a92168684c63
1f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner//===-- CodeGen/MachineInstBuilder.h - Simplify creation of MIs -*- C++ -*-===// 2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// 36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// The LLVM Compiler Infrastructure 46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// 57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source 67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details. 7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// 86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//===----------------------------------------------------------------------===// 9f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 10f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// This file exposes a function named BuildMI, which is useful for dramatically 11ceb408f6a263e319683209ae5c6f8d1e3e4d9b69Chris Lattner// simplifying how MachineInstr's are created. It allows use of code like this: 12f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 139ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner// M = BuildMI(X86::ADDrr8, 2).addReg(argVal1).addReg(argVal2); 14f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner// 15f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner//===----------------------------------------------------------------------===// 16f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 17f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner#ifndef LLVM_CODEGEN_MACHINEINSTRBUILDER_H 18f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner#define LLVM_CODEGEN_MACHINEINSTRBUILDER_H 19f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 207ce45783531cfa81bfd7be561ea7e4738e8c6ca8Evan Cheng#include "llvm/CodeGen/MachineFunction.h" 21f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm { 23d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 24749c6f6b5ed301c84aac562e414486549d7b98ebChris Lattnerclass TargetInstrDesc; 255f72a5ebc84a1935878b5b2d3166a505c520cdfcDale Johannesenclass MDNode; 26c0f64ffab93d11fb27a3b8a0707b77400918a20eEvan Cheng 27587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendlingnamespace RegState { 28587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling enum { 29587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling Define = 0x2, 30587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling Implicit = 0x4, 31587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling Kill = 0x8, 32587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling Dead = 0x10, 334784f1fc73abf6005b7b7262d395af71b57b1255Evan Cheng Undef = 0x20, 344784f1fc73abf6005b7b7262d395af71b57b1255Evan Cheng EarlyClobber = 0x40, 35a65aa0f0bba1ef2322d63d05c074a92168684c63Dale Johannesen Debug = 0x80, 36587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling ImplicitDefine = Implicit | Define, 37587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling ImplicitKill = Implicit | Kill 38587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling }; 39587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling} 40587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling 419d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattnerclass MachineInstrBuilder { 42f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner MachineInstr *MI; 439d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattnerpublic: 44f9dc699c42a11a60ec299970c8fb0093d51e993bChris Lattner MachineInstrBuilder() : MI(0) {} 45423c2260f95883f7c84ac962e58ac66c3a11efacDan Gohman explicit MachineInstrBuilder(MachineInstr *mi) : MI(mi) {} 46f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 47f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// Allow automatic conversion to the machine instruction we are working on. 48f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// 49f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner operator MachineInstr*() const { return MI; } 50024e91f6f6b9c65d767efe507df213c5c53744c7Chris Lattner operator MachineBasicBlock::iterator() const { return MI; } 51f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 529ed63ee0fcaa6730eb1df8c1ddbf5f46d8c81329Chris Lattner /// addReg - Add a new virtual register operand... 53f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner /// 547ce45783531cfa81bfd7be561ea7e4738e8c6ca8Evan Cheng const 55587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling MachineInstrBuilder &addReg(unsigned RegNo, unsigned flags = 0, 56587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling unsigned SubReg = 0) const { 57587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling assert((flags & 0x1) == 0 && 58587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling "Passing in 'true' to addReg is forbidden! Use enums instead."); 59587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling MI->addOperand(MachineOperand::CreateReg(RegNo, 60587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling flags & RegState::Define, 61587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling flags & RegState::Implicit, 62587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling flags & RegState::Kill, 63587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling flags & RegState::Dead, 644784f1fc73abf6005b7b7262d395af71b57b1255Evan Cheng flags & RegState::Undef, 654784f1fc73abf6005b7b7262d395af71b57b1255Evan Cheng flags & RegState::EarlyClobber, 66a65aa0f0bba1ef2322d63d05c074a92168684c63Dale Johannesen SubReg, 67a65aa0f0bba1ef2322d63d05c074a92168684c63Dale Johannesen flags & RegState::Debug)); 68f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner return *this; 69f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner } 70f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 716a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner /// addImm - Add a new immediate operand. 726a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner /// 732d90ac7ca6117d3b160dde8a4f322c1079a6ffceChris Lattner const MachineInstrBuilder &addImm(int64_t Val) const { 74c8313f1d7957843d6032170573716cf8e6aeb93cChris Lattner MI->addOperand(MachineOperand::CreateImm(Val)); 756a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner return *this; 766a8a9b4413cd595c8322e7ebb7d42cbb04ca6933Chris Lattner } 77f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 784fbd796a1251a27e6590765a0a34876f436a0af9Dan Gohman const MachineInstrBuilder &addFPImm(const ConstantFP *Val) const { 794b6e7069c3ac98179e8cdc0a896f5f434670dafcDan Gohman MI->addOperand(MachineOperand::CreateFPImm(Val)); 804b6e7069c3ac98179e8cdc0a896f5f434670dafcDan Gohman return *this; 814b6e7069c3ac98179e8cdc0a896f5f434670dafcDan Gohman } 824b6e7069c3ac98179e8cdc0a896f5f434670dafcDan Gohman 839a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner const MachineInstrBuilder &addMBB(MachineBasicBlock *MBB, 849a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner unsigned char TargetFlags = 0) const { 859a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner MI->addOperand(MachineOperand::CreateMBB(MBB, TargetFlags)); 868cbfc75d17ee1c274116dc1aca3bc8e8ed2326c9Chris Lattner return *this; 878cbfc75d17ee1c274116dc1aca3bc8e8ed2326c9Chris Lattner } 88aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner 89aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner const MachineInstrBuilder &addFrameIndex(unsigned Idx) const { 9039697a83b5ebb857263fc8b9a83ea1834e9d7fe4Chris Lattner MI->addOperand(MachineOperand::CreateFI(Idx)); 91aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner return *this; 92aa0e277f310fab67df6a8bd8dfb45b6f2730c17eChris Lattner } 939d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner 94404cb4f9fa2df50eac4d84b8a77c84a92188c6d5Evan Cheng const MachineInstrBuilder &addConstantPoolIndex(unsigned Idx, 959a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner int Offset = 0, 969a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner unsigned char TargetFlags = 0) const { 979a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner MI->addOperand(MachineOperand::CreateCPI(Idx, Offset, TargetFlags)); 989d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner return *this; 999d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner } 1009d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner 1019a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner const MachineInstrBuilder &addJumpTableIndex(unsigned Idx, 1029a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner unsigned char TargetFlags = 0) const { 1039a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner MI->addOperand(MachineOperand::CreateJTI(Idx, TargetFlags)); 104ccdcdf3e2e5e9e30e0e2a99e40ac7199afcd9025Evan Cheng return *this; 105ccdcdf3e2e5e9e30e0e2a99e40ac7199afcd9025Evan Cheng } 106ccdcdf3e2e5e9e30e0e2a99e40ac7199afcd9025Evan Cheng 1079d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner const MachineInstrBuilder &addGlobalAddress(GlobalValue *GV, 1089a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner int64_t Offset = 0, 1099a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner unsigned char TargetFlags = 0) const { 1109a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner MI->addOperand(MachineOperand::CreateGA(GV, Offset, TargetFlags)); 1119d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner return *this; 1129d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner } 1139d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner 1146520e20e4fb31f2e65e25c38b372b19d33a83df4Dan Gohman const MachineInstrBuilder &addExternalSymbol(const char *FnName, 1159a96c425db72bc6e879e8445e3a3bf1f1e556b56Chris Lattner unsigned char TargetFlags = 0) const { 11631e2c7b4c13c2f31774614b1124533628958d0cdDaniel Dunbar MI->addOperand(MachineOperand::CreateES(FnName, TargetFlags)); 1179d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner return *this; 1189d4f9b990222ed46959cd0a1aef07c0923d346e6Chris Lattner } 1198cf77137533f1d83f9ea0085b5ca6d241f4bab9aDan Gohman 120c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman const MachineInstrBuilder &addMemOperand(MachineMemOperand *MMO) const { 1218cf77137533f1d83f9ea0085b5ca6d241f4bab9aDan Gohman MI->addMemOperand(*MI->getParent()->getParent(), MMO); 1228cf77137533f1d83f9ea0085b5ca6d241f4bab9aDan Gohman return *this; 1238cf77137533f1d83f9ea0085b5ca6d241f4bab9aDan Gohman } 12497357614b5957cc167c261d3be54713802715d9aDan Gohman 12597357614b5957cc167c261d3be54713802715d9aDan Gohman const MachineInstrBuilder &addOperand(const MachineOperand &MO) const { 126b1fb84dee9c3797ec2f2bfd2c9cf8e6ee0436487Chris Lattner MI->addOperand(MO); 12797357614b5957cc167c261d3be54713802715d9aDan Gohman return *this; 12897357614b5957cc167c261d3be54713802715d9aDan Gohman } 1295f72a5ebc84a1935878b5b2d3166a505c520cdfcDale Johannesen 1305f72a5ebc84a1935878b5b2d3166a505c520cdfcDale Johannesen const MachineInstrBuilder &addMetadata(MDNode *MD) const { 1315f72a5ebc84a1935878b5b2d3166a505c520cdfcDale Johannesen MI->addOperand(MachineOperand::CreateMetadata(MD)); 1325f72a5ebc84a1935878b5b2d3166a505c520cdfcDale Johannesen return *this; 1335f72a5ebc84a1935878b5b2d3166a505c520cdfcDale Johannesen } 134f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner}; 135f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 136f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner/// BuildMI - Builder interface. Specify how to create the initial instruction 137c0f64ffab93d11fb27a3b8a0707b77400918a20eEvan Cheng/// itself. 138f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner/// 1398e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohmaninline MachineInstrBuilder BuildMI(MachineFunction &MF, 1409bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling DebugLoc DL, 1419bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling const TargetInstrDesc &TID) { 1429bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling return MachineInstrBuilder(MF.CreateMachineInstr(TID, DL)); 143f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner} 144f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner 14591ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder sets up the first operand as a 146c0f64ffab93d11fb27a3b8a0707b77400918a20eEvan Cheng/// destination virtual register. 147367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner/// 1489bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendlinginline MachineInstrBuilder BuildMI(MachineFunction &MF, 1499bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling DebugLoc DL, 1509bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling const TargetInstrDesc &TID, 1519bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling unsigned DestReg) { 1529bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling return MachineInstrBuilder(MF.CreateMachineInstr(TID, DL)) 153587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling .addReg(DestReg, RegState::Define); 154367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner} 155367ccab06e77247eb38b0e666425913e39b82cf0Chris Lattner 15691ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 15791ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction before the given position in the given MachineBasicBlock, and 15891ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// sets up the first operand as a destination virtual register. 15991ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// 160c3c106ca59e44032041414c72ce584451f1d885fChris Lattnerinline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, 161c3c106ca59e44032041414c72ce584451f1d885fChris Lattner MachineBasicBlock::iterator I, 1629bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling DebugLoc DL, 1639bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling const TargetInstrDesc &TID, 1649bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling unsigned DestReg) { 1659bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling MachineInstr *MI = BB.getParent()->CreateMachineInstr(TID, DL); 166c3c106ca59e44032041414c72ce584451f1d885fChris Lattner BB.insert(I, MI); 167587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling return MachineInstrBuilder(MI).addReg(DestReg, RegState::Define); 168c3c106ca59e44032041414c72ce584451f1d885fChris Lattner} 169c3c106ca59e44032041414c72ce584451f1d885fChris Lattner 17091ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 17191ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction before the given position in the given MachineBasicBlock, and 17291ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// does NOT take a destination register. 17391ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// 174c3c106ca59e44032041414c72ce584451f1d885fChris Lattnerinline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, 175c3c106ca59e44032041414c72ce584451f1d885fChris Lattner MachineBasicBlock::iterator I, 1769bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling DebugLoc DL, 1779bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling const TargetInstrDesc &TID) { 1789bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling MachineInstr *MI = BB.getParent()->CreateMachineInstr(TID, DL); 179c3c106ca59e44032041414c72ce584451f1d885fChris Lattner BB.insert(I, MI); 180c3c106ca59e44032041414c72ce584451f1d885fChris Lattner return MachineInstrBuilder(MI); 181c3c106ca59e44032041414c72ce584451f1d885fChris Lattner} 182c3c106ca59e44032041414c72ce584451f1d885fChris Lattner 18391ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 18491ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction at the end of the given MachineBasicBlock, and does NOT take a 18591ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// destination register. 1869cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner/// 187c0f64ffab93d11fb27a3b8a0707b77400918a20eEvan Chenginline MachineInstrBuilder BuildMI(MachineBasicBlock *BB, 1889bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling DebugLoc DL, 1899bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling const TargetInstrDesc &TID) { 1909bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling return BuildMI(*BB, BB->end(), DL, TID); 1919bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling} 1927db458fb0768059f050d3a0f1a26818fa8e22712Chris Lattner 19391ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// BuildMI - This version of the builder inserts the newly-built 19491ad59d75e46eafbea63fe7d4807cc1d22fac565Brian Gaeke/// instruction at the end of the given MachineBasicBlock, and sets up the first 19565b660743ccce5393f70d3667ac4e2b0b76e5236Daniel Dunbar/// operand as a destination virtual register. 1969cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner/// 197c0f64ffab93d11fb27a3b8a0707b77400918a20eEvan Chenginline MachineInstrBuilder BuildMI(MachineBasicBlock *BB, 1989bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling DebugLoc DL, 1999bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling const TargetInstrDesc &TID, 2009bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling unsigned DestReg) { 2019bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling return BuildMI(*BB, BB->end(), DL, TID, DestReg); 2029bc96a57206cbebaa9b0ba9979f949eb10c1592cBill Wendling} 2039cc361579b6a0aad9a71dc617eedd4d909d48acfChris Lattner 204587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendlinginline unsigned getDefRegState(bool B) { 205587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling return B ? RegState::Define : 0; 206587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling} 207587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendlinginline unsigned getImplRegState(bool B) { 208587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling return B ? RegState::Implicit : 0; 209587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling} 210587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendlinginline unsigned getKillRegState(bool B) { 211587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling return B ? RegState::Kill : 0; 212587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling} 213587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendlinginline unsigned getDeadRegState(bool B) { 214587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling return B ? RegState::Dead : 0; 215587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling} 2164784f1fc73abf6005b7b7262d395af71b57b1255Evan Chenginline unsigned getUndefRegState(bool B) { 2174784f1fc73abf6005b7b7262d395af71b57b1255Evan Cheng return B ? RegState::Undef : 0; 2184784f1fc73abf6005b7b7262d395af71b57b1255Evan Cheng} 219587daedce2d6c2b2d380b6a5843a6f8b6cfc79e4Bill Wendling 220d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace 221d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 222f0136b376e2ff9b816ab4cbd4ac82df87b5c52b4Chris Lattner#endif 223