Accessing an empty machine function before instruction selection?

I’m trying to access the MachineFunctionInfo structure from a pre-ISel pass. In order to do this I have to get access to the MachineFunction and then call getInfo().

Currently in my pass I request it via:

void AMDILBarrierDetect::getAnalysisUsage(AnalysisUsage &AU) const

{

AU.addRequired();

FunctionPass::getAnalysisUsage(AU);

}

However, I am getting an assert:

assert(NormalCtor &&

“Cannot call createPass on PassInfo without default ctor!”);

First question, is this possible? If so, how do I get NormalCtor to not be NULL?

Second question, if I want to pass information from before Instruction selection to after instruction selection, is this the preferred way? If not how?

Thanks,

Micah

To answer my own question.

I added this to getAnalysisUsage and it seems to bypass the assert.

AU.setPreservesAll();

Anyone have an idea on why this fixes the problem?

Thanks,

Micah