<div class="gmail_quote">On Thu, Jul 14, 2011 at 8:20 PM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com">chandlerc@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5"><div class="gmail_quote">On Thu, Jul 14, 2011 at 5:41 PM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="gmail_quote">On Thu, Jul 14, 2011 at 5:29 PM, Evan Cheng <span dir="ltr"><<a href="mailto:evan.cheng@apple.com" target="_blank">evan.cheng@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Sorry and thanks!</blockquote></div><br><div>In with r135234.</div>
</blockquote></div><br></div></div><div>Evan, we're now seeing cyclic dependencies between X86CodeGen and X86Desc... I'm really not sure why though.</div><div><br>I can only reproduce this using a Debug+Asserts build with GCC. Self hosted builds don't seem to suffer from the problem (???).</div>

<div><br></div><div>I'm still trying to track down what the actual cycle is...</div>
</blockquote></div><br><div>I think I found it:</div><div><br></div><div><div>% nm lib/libLLVMX86Desc.a | grep '  *U' | c++filt | grep llvm::X86::</div><div>                 U llvm::X86::CCRRegClass</div><div>                 U llvm::X86::GR8RegClass</div>
<div>                 U llvm::X86::RSTRegClass</div><div>                 U llvm::X86::FR32RegClass</div><div>                 U llvm::X86::FR64RegClass</div><div>                 U llvm::X86::GR16RegClass</div><div>                 U llvm::X86::GR32RegClass</div>
<div>                 U llvm::X86::GR64RegClass</div><div>                 U llvm::X86::VR64RegClass</div><div>                 U llvm::X86::RFP32RegClass</div><div>                 U llvm::X86::RFP64RegClass</div><div>                 U llvm::X86::RFP80RegClass</div>
<div>                 U llvm::X86::VR128RegClass</div><div>                 U llvm::X86::VR256RegClass</div><div>                 U llvm::X86::GR32_ADRegClass</div><div>                 U llvm::X86::GR32_TCRegClass</div><div>
                 U llvm::X86::GR64_TCRegClass</div><div>                 U llvm::X86::DEBUG_REGRegClass</div><div>                 U llvm::X86::GR16_ABCDRegClass</div><div>                 U llvm::X86::GR32_ABCDRegClass</div>
<div>                 U llvm::X86::GR32_NOSPRegClass</div><div>                 U llvm::X86::GR64_ABCDRegClass</div><div>                 U llvm::X86::GR64_NOSPRegClass</div><div>                 U llvm::X86::GR8_NOREXRegClass</div>
<div>                 U llvm::X86::GR16_NOREXRegClass</div><div>                 U llvm::X86::GR32_NOREXRegClass</div><div>                 U llvm::X86::GR64_NOREXRegClass</div><div>                 U llvm::X86::GR64_TCW64RegClass</div>
<div>                 U llvm::X86::GR8_ABCD_HRegClass</div><div>                 U llvm::X86::GR8_ABCD_LRegClass</div><div>                 U llvm::X86::CONTROL_REGRegClass</div><div>                 U llvm::X86::SEGMENT_REGRegClass</div>
<div>                 U llvm::X86::GR32_NOREX_NOSPRegClass</div><div>                 U llvm::X86::GR64_NOREX_NOSPRegClass</div></div><div><br></div><div>And then looking at X86CodeGen:</div><div><div>% nm lib/libLLVMX86CodeGen.a | grep -v '  *U' | c++filt | grep 'llvm::X86::\w*RegClass'</div>
<div>0000000000000000 B llvm::X86::CCRRegClass</div><div>0000000000000b00 B llvm::X86::GR8RegClass</div><div>0000000000000e80 B llvm::X86::RSTRegClass</div><div>0000000000000180 B llvm::X86::FR32RegClass</div><div>0000000000000200 B llvm::X86::FR64RegClass</div>
<div>0000000000000280 B llvm::X86::GR16RegClass</div><div>0000000000000400 B llvm::X86::GR32RegClass</div><div>0000000000000780 B llvm::X86::GR64RegClass</div><div>0000000000001080 B llvm::X86::VR64RegClass</div><div>0000000000000d00 B llvm::X86::RFP32RegClass</div>
<div>0000000000000d80 B llvm::X86::RFP64RegClass</div><div>0000000000000e00 B llvm::X86::RFP80RegClass</div><div>0000000000000f80 B llvm::X86::VR128RegClass</div><div>0000000000001000 B llvm::X86::VR256RegClass</div><div>
0000000000000500 B llvm::X86::GR32_ADRegClass</div><div>0000000000000700 B llvm::X86::GR32_TCRegClass</div><div>0000000000000a00 B llvm::X86::GR64_TCRegClass</div><div>0000000000000100 B llvm::X86::DEBUG_REGRegClass</div>
<div>0000000000000300 B llvm::X86::GR16_ABCDRegClass</div><div>0000000000000480 B llvm::X86::GR32_ABCDRegClass</div><div>0000000000000680 B llvm::X86::GR32_NOSPRegClass</div><div>0000000000000800 B llvm::X86::GR64_ABCDRegClass</div>
<div>0000000000000980 B llvm::X86::GR64_NOSPRegClass</div><div>0000000000000c80 B llvm::X86::GR8_NOREXRegClass</div><div>0000000000000380 B llvm::X86::GR16_NOREXRegClass</div><div>0000000000000580 B llvm::X86::GR32_NOREXRegClass</div>
<div>0000000000000880 B llvm::X86::GR64_NOREXRegClass</div><div>0000000000000a80 B llvm::X86::GR64_TCW64RegClass</div><div>0000000000000b80 B llvm::X86::GR8_ABCD_HRegClass</div><div>0000000000000c00 B llvm::X86::GR8_ABCD_LRegClass</div>
<div>0000000000000080 B llvm::X86::CONTROL_REGRegClass</div><div>0000000000000f00 B llvm::X86::SEGMENT_REGRegClass</div><div>0000000000000600 B llvm::X86::GR32_NOREX_NOSPRegClass</div><div>0000000000000900 B llvm::X86::GR64_NOREX_NOSPRegClass</div>
<div>0000000000003540 r llvm::X86::CCRSubRegClasses</div><div>00000000000036c0 r llvm::X86::GR8SubRegClasses</div><div>0000000000003880 r llvm::X86::RSTSubRegClasses</div><div>0000000000003600 r llvm::X86::FR32SubRegClasses</div>
<div>0000000000003640 r llvm::X86::FR64SubRegClasses</div><div>00000000000002e0 d llvm::X86::GR16SubRegClasses</div><div>00000000000003a0 d llvm::X86::GR32SubRegClasses</div><div>0000000000000560 d llvm::X86::GR64SubRegClasses</div>
<div>0000000000003900 r llvm::X86::VR64SubRegClasses</div><div>0000000000003938 r llvm::X86::CCRSuperRegClasses</div><div>00000000000008a0 d llvm::X86::GR8SuperRegClasses</div><div>00000000000037c0 r llvm::X86::RFP32SubRegClasses</div>
<div>0000000000003800 r llvm::X86::RFP64SubRegClasses</div><div>0000000000003840 r llvm::X86::RFP80SubRegClasses</div><div>00000000000039a8 r llvm::X86::RSTSuperRegClasses</div><div>00000000000006e0 d llvm::X86::VR128SubRegClasses</div>
<div>0000000000000720 d llvm::X86::VR256SubRegClasses</div><div>0000000000000760 d llvm::X86::FR32SuperRegClasses</div><div>0000000000000780 d llvm::X86::FR64SuperRegClasses</div><div>00000000000007a0 d llvm::X86::GR16SuperRegClasses</div>
<div>0000000000000830 d llvm::X86::GR32SuperRegClasses</div><div>0000000000003958 r llvm::X86::GR64SuperRegClasses</div><div>00000000000039c0 r llvm::X86::VR64SuperRegClasses</div><div>0000000000000420 d llvm::X86::GR32_ADSubRegClasses</div>
<div>0000000000000520 d llvm::X86::GR32_TCSubRegClasses</div><div>00000000000006a0 d llvm::X86::GR64_TCSubRegClasses</div><div>0000000000003990 r llvm::X86::RFP32SuperRegClasses</div><div>0000000000003998 r llvm::X86::RFP64SuperRegClasses</div>
<div>00000000000039a0 r llvm::X86::RFP80SuperRegClasses</div><div>0000000000000990 d llvm::X86::VR128SuperRegClasses</div><div>00000000000039b8 r llvm::X86::VR256SuperRegClasses</div><div>00000000000035c0 r llvm::X86::DEBUG_REGSubRegClasses</div>
<div>0000000000000320 d llvm::X86::GR16_ABCDSubRegClasses</div><div>00000000000003e0 d llvm::X86::GR32_ABCDSubRegClasses</div><div>0000000000003950 r llvm::X86::GR32_ADSuperRegClasses</div><div>00000000000004e0 d llvm::X86::GR32_NOSPSubRegClasses</div>
<div>0000000000000880 d llvm::X86::GR32_TCSuperRegClasses</div><div>00000000000005a0 d llvm::X86::GR64_ABCDSubRegClasses</div><div>0000000000000660 d llvm::X86::GR64_NOSPSubRegClasses</div><div>0000000000003980 r llvm::X86::GR64_TCSuperRegClasses</div>
<div>0000000000003780 r llvm::X86::GR8_NOREXSubRegClasses</div><div>0000000000000360 d llvm::X86::GR16_NOREXSubRegClasses</div><div>0000000000000460 d llvm::X86::GR32_NOREXSubRegClasses</div><div>00000000000005e0 d llvm::X86::GR64_NOREXSubRegClasses</div>
<div>0000000000003680 r llvm::X86::GR64_TCW64SubRegClasses</div><div>0000000000003700 r llvm::X86::GR8_ABCD_HSubRegClasses</div><div>0000000000003740 r llvm::X86::GR8_ABCD_LSubRegClasses</div><div>0000000000003580 r llvm::X86::CONTROL_REGSubRegClasses</div>
<div>0000000000003948 r llvm::X86::DEBUG_REGSuperRegClasses</div><div>00000000000007e0 d llvm::X86::GR16_ABCDSuperRegClasses</div><div>0000000000000840 d llvm::X86::GR32_ABCDSuperRegClasses</div><div>0000000000000870 d llvm::X86::GR32_NOSPSuperRegClasses</div>
<div>0000000000003960 r llvm::X86::GR64_ABCDSuperRegClasses</div><div>0000000000003978 r llvm::X86::GR64_NOSPSuperRegClasses</div><div>0000000000000960 d llvm::X86::GR8_NOREXSuperRegClasses</div><div>00000000000038c0 r llvm::X86::SEGMENT_REGSubRegClasses</div>
<div>0000000000000800 d llvm::X86::GR16_NOREXSuperRegClasses</div><div>0000000000000850 d llvm::X86::GR32_NOREXSuperRegClasses</div><div>0000000000003968 r llvm::X86::GR64_NOREXSuperRegClasses</div><div>0000000000003988 r llvm::X86::GR64_TCW64SuperRegClasses</div>
<div>00000000000008e0 d llvm::X86::GR8_ABCD_HSuperRegClasses</div><div>0000000000000920 d llvm::X86::GR8_ABCD_LSuperRegClasses</div><div>0000000000003940 r llvm::X86::CONTROL_REGSuperRegClasses</div><div>00000000000039b0 r llvm::X86::SEGMENT_REGSuperRegClasses</div>
<div>00000000000004a0 d llvm::X86::GR32_NOREX_NOSPSubRegClasses</div><div>0000000000000620 d llvm::X86::GR64_NOREX_NOSPSubRegClasses</div><div>0000000000000860 d llvm::X86::GR32_NOREX_NOSPSuperRegClasses</div><div>0000000000003970 r llvm::X86::GR64_NOREX_NOSPSuperRegClasses</div>
</div>