LLVM: lib/CodeGen/LoopTraversal.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

12

13using namespace llvm;

14

17 assert(MBBNumber < MBBInfos.size() && "Unexpected basic block number.");

18 return MBBInfos[MBBNumber].PrimaryCompleted &&

19 MBBInfos[MBBNumber].IncomingCompleted ==

20 MBBInfos[MBBNumber].PrimaryIncoming &&

21 MBBInfos[MBBNumber].IncomingProcessed == MBB->pred_size();

22}

23

25

27

33

34

35 unsigned MBBNumber = MBB->getNumber();

36 assert(MBBNumber < MBBInfos.size() && "Unexpected basic block number.");

37 MBBInfos[MBBNumber].PrimaryCompleted = true;

38 MBBInfos[MBBNumber].PrimaryIncoming = MBBInfos[MBBNumber].IncomingProcessed;

39 bool Primary = true;

41 while (!Workqueue.empty()) {

43 bool Done = isBlockDone(ActiveMBB);

46 unsigned SuccNumber = Succ->getNumber();

47 assert(SuccNumber < MBBInfos.size() &&

48 "Unexpected basic block number.");

49 if (!isBlockDone(Succ)) {

50 if (Primary)

51 MBBInfos[SuccNumber].IncomingProcessed++;

53 MBBInfos[SuccNumber].IncomingCompleted++;

54 if (isBlockDone(Succ))

56 }

57 }

58 Primary = false;

59 }

60 }

61

62

63

64

66 if (!isBlockDone(MBB))

68

69

70 }

71

73

74 return MBBTraversalOrder;

75}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

This file builds on the ADT/GraphTraits.h file to build a generic graph post order iterator.

TraversalOrder traverse(MachineFunction &MF)

Definition LoopTraversal.cpp:24

SmallVector< TraversedMBBInfo, 4 > TraversalOrder

Identifies basic blocks that are part of loops and should to be visited twice and returns efficient t...

unsigned pred_size() const

int getNumber() const

MachineBasicBlocks are uniquely numbered at the function level, unless they're not in a MachineFuncti...

iterator_range< succ_iterator > successors()

unsigned getNumBlockIDs() const

getNumBlockIDs - Return the number of MBB ID's allocated.

void assign(size_type NumElts, ValueParamT Elt)

void push_back(const T &Elt)

This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.

This is an optimization pass for GlobalISel generic memory operations.