The following llvm bytecode file causes llc to eat up all memory on my machine then die. To reproduce, run as follows: llc exp_attr.bc This is not x86 specific, since llc -march=ppc32 exp_attr.bc also uses up vast (maybe infinite) amounts of memory. However the C backend works ok. I'll attach the bytecode file in a second.
Created attachment 655 [details] bytecode obtained by compiling gcc/ada/exp_attr.adb
Created attachment 656 [details] bugpoint reduced bytecode The reduced test-case consists of nothing more than a switch statement! Yet the code generators continue to use up all memory and die.
Created attachment 657 [details] Same attachment as assembly
testing a patch
Fixed. Testcase here: test/CodeGen/Generic/switch-lower.ll Patch here: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070212/044404.html -Chris
switch lowering is still broken somehow. Consider the folowing code: define i32 @main(i32 %argc, i8** %argv) { old_entry1: br label %cond_next cond_next: %not.tmp14 = icmp slt i32 %argc, 11 %hvar2 = zext i1 %not.tmp14 to i32 switch i32 %hvar2, label %old_entry [ i32 -2, label %cond_true i32 -1, label %cond_next i32 0, label %cond_true15 i32 1, label %cond_next22 ] cond_true15: ret i32 1 cond_true: ret i32 2 cond_next22: ret i32 3 old_entry: ret i32 4 } (Yes, I know, that cases -1 and -2 are really dead). Resulting binary will always produce result code 4. Commenting out "-1" and "-2" cases will fix the problem.
Moving new bug to a new bugzilla: Bug 1219. The original issue is fixed. -Chris