unsigned AMDGPURegisterBankInfo::copyCost(const RegisterBank &Dst, const RegisterBank &Src, unsigned Size) const { if (Dst.getID() == AMDGPU::SGPRRegBankID && Src.getID() == AMDGPU::VGPRRegBankID) return std::numeric_limits<unsigned>::max(); // SGPRRegBank with size 1 is actually vcc or another 64-bit sgpr written by // the valu. if (Size == 1 && Dst.getID() == AMDGPU::SCCRegBankID && Src.getID() == AMDGPU::SGPRRegBankID) return std::numeric_limits<unsigned>::max(); return RegisterBankInfo::copyCost(Dst, Src, Size); }
bool RegisterBank::operator==(const RegisterBank &OtherRB) const { // There must be only one instance of a given register bank alive // for the whole compilation. // The RegisterBankInfo is supposed to enforce that. assert((OtherRB.getID() != getID() || &OtherRB == this) && "ID does not uniquely identify a RegisterBank"); return &OtherRB == this; }
void main(int argc, char* argv[]) { Lexer* lexer = new Lexer(argc, argv); Parser* parser = new Parser(lexer); char* mytemp; SymbolTable* symtable; char* output_target = DEFAULT_OUTPUT_TARGET; Machine* platform; if(lexer->getInputStruct()) { int success = parser->parse(); int sem_success; if(success) { if(PARSER_MESSAGE) cout<<"Parsing: success"<<endl; symtable = new SymbolTable(); RegisterBank* regbank = new RegisterBank(DEFAULT_REGISTERS, NUMBER_OF_DEFAULT_REGISTERS, LOCAL); regbank->setGlobalPointer(new Register(GLOBAL_POINTER, GLOBAL,GLOBAL_POINTER_ADDR)); regbank->setStackPointer(new Register(STACK_POINTER, STACK,STACK_POINTER_ADDR)); regbank->setFramePointer(new Register(FRAME_POINTER, FRAME,FRAME_POINTER_ADDR)); RegisterBank* outputregs = new RegisterBank(OUTPUT_REGISTERS, NUMBER_OF_OUTPUT_REGISTERS, OUTPUT); RegisterBank* inputregs = new RegisterBank(INPUT_REGISTERS, NUMBER_OF_INPUT_REGISTERS, INPUT); platform = new Sparc(regbank,outputregs,inputregs); Machine::setCurrentMachine(platform); codegen = new CodeGenerator(platform, output_target); platform->setOutput(codegen->getOutputStream()); codegen->beginCodeGen(); semchecker = new SemanticChecker(symtable, ASTree, codegen); sem_success = semchecker->check(); codegen->endCodeGen(); } else if(PARSER_MESSAGE) cout<<"Parsing: failure"<<endl; if(sem_success && SEMANTIC_MESSAGE) cout<<"Semantic success."<<endl; else cout<<"Semantic failure."<<endl; } delete lexer; delete parser; }
void RegisterBankInfo::InstructionMapping::setOperandMapping( unsigned OpIdx, unsigned MaskSize, const RegisterBank &RegBank) { // Build the value mapping. assert(MaskSize <= RegBank.getSize() && "Register bank is too small"); APInt Mask(MaskSize, 0); // The value is represented by all the bits. Mask.flipAllBits(); // Create the mapping object. getOperandMapping(OpIdx).BreakDown.push_back(PartialMapping(Mask, RegBank)); }