LLVM: lib/CodeGen/LiveRangeUtils.h Source File (original) (raw)

Go to the documentation of this file.

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_LIB_CODEGEN_LIVERANGEUTILS_H

14#define LLVM_LIB_CODEGEN_LIVERANGEUTILS_H

15

17

18namespace llvm {

19

20

21

22

23

24

25template<typename LiveRangeT, typename EqClassesT>

26static void DistributeRange(LiveRangeT &LR, LiveRangeT *SplitLRs[],

27 EqClassesT VNIClasses) {

28

29 typename LiveRangeT::iterator J = LR.begin(), E = LR.end();

30 while (J != E && VNIClasses[J->valno->id] == 0)

31 ++J;

32 for (typename LiveRangeT::iterator I = J; I != E; ++I) {

33 if (unsigned eq = VNIClasses[I->valno->id]) {

34 assert((SplitLRs[eq-1]->empty() || SplitLRs[eq-1]->expiredAt(I->start)) &&

35 "New intervals should be empty");

36 SplitLRs[eq-1]->segments.push_back(*I);

37 } else

38 *J++ = *I;

39 }

40 LR.segments.erase(J, E);

41

42

43 unsigned j = 0, e = LR.getNumValNums();

44 while (j != e && VNIClasses[j] == 0)

45 ++j;

46 for (unsigned i = j; i != e; ++i) {

47 VNInfo *VNI = LR.getValNumInfo(i);

48 if (unsigned eq = VNIClasses[i]) {

49 VNI->id = SplitLRs[eq-1]->getNumValNums();

50 SplitLRs[eq-1]->valnos.push_back(VNI);

51 } else {

52 VNI->id = j;

53 LR.valnos[j++] = VNI;

54 }

55 }

56 LR.valnos.resize(j);

57}

58

59}

60

61#endif

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

static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")

VNInfo - Value Number Information.

unsigned id

The ID number of this value.

This is an optimization pass for GlobalISel generic memory operations.

static void DistributeRange(LiveRangeT &LR, LiveRangeT *SplitLRs[], EqClassesT VNIClasses)

Helper function that distributes live range value numbers and the corresponding segments of a primary...

Definition LiveRangeUtils.h:26