It should be possible for one to call (Target)FrameLowering::determineCalleeSaves multiple times. I don't think it should have side-effects as creating stack objects and setting global MachineFunctionInfo state as it is doing today (in other back-ends as well).
This moves the creation of stack objects from determineCalleeSaves to assignCalleeSavedSpillSlots in the X86 back-end.