Lines Matching full:cfstack
33 struct CFStack {
49 CFStack(const R600Subtarget *st, CallingConv::ID cc) : ST(st),
55 bool branchStackContains(CFStack::StackItem);
57 unsigned getSubEntrySize(CFStack::StackItem Item);
65 unsigned CFStack::getLoopDepth() {
69 bool CFStack::branchStackContains(CFStack::StackItem Item) {
70 for (std::vector<CFStack::StackItem>::const_iterator I = BranchStack.begin(),
78 bool CFStack::requiresWorkAroundForInst(unsigned Opcode) {
116 unsigned CFStack::getSubEntrySize(CFStack::StackItem Item) {
120 case CFStack::FIRST_NON_WQM_PUSH:
134 case CFStack::FIRST_NON_WQM_PUSH_W_FULL_ENTRY:
139 case CFStack::SUB_ENTRY:
144 void CFStack::updateMaxStackSize() {
150 void CFStack::pushBranch(unsigned Opcode, bool isWQM) {
151 CFStack::StackItem Item = CFStack::ENTRY;
157 !branchStackContains(CFStack::FIRST_NON_WQM_PUSH))
158 Item = CFStack::FIRST_NON_WQM_PUSH; // May not be required on Evergreen/NI
160 // CFStack::getSubEntrySize()
164 !branchStackContains(CFStack::FIRST_NON_WQM_PUSH_W_FULL_ENTRY))
165 Item = CFStack::FIRST_NON_WQM_PUSH_W_FULL_ENTRY;
167 Item = CFStack::SUB_ENTRY;
169 Item = CFStack::ENTRY;
173 if (Item == CFStack::ENTRY)
180 void CFStack::pushLoop() {
181 LoopStack.push_back(CFStack::ENTRY);
186 void CFStack::popBranch() {
187 CFStack::StackItem Top = BranchStack.back();
188 if (Top == CFStack::ENTRY)
195 void CFStack::popLoop() {
502 CFStack CFStack(ST, MF.getFunction()->getCallingConv());
535 CFStack.requiresWorkAroundForInst(MI->getOpcode());
545 CFStack.pushBranch(AMDGPU::CF_PUSH_EG);
547 CFStack.pushBranch(AMDGPU::CF_ALU_PUSH_BEFORE);
556 CFStack.pushLoop();
569 CFStack.popLoop();
607 CFStack.popBranch();
683 MFI->StackSize = CFStack.MaxStackSize;