[LLVMdev] piping into lli broken on darwin

Jack Howarth howarth at bromo.med.uc.edu
Wed Oct 31 15:43:13 PDT 2012


On Wed, Oct 31, 2012 at 11:43:44AM -0400, Jack Howarth wrote:
>   While testing llvm/polly svn on x86_64-apple-darwin10/11/12, I noticed that three darwin
> specific polly-test regressions exist. At least part of these failures appear to be due
> to lli on darwin not accepting piped input such that the test...
> 
> opt -load /sw/src/fink.build/llvm32-3.2-0/llvm-3.2/build/lib/LLVMPolly.so 
> -basicaa -polly-prepare -polly-region-simplify -O3
> /sw/src/fink.build/llvm32-3.2-0/llvm-3.2/tools/polly/test/CodeGen/single_do_loop_int_max_iterations.ll
> | lli
> 
> produces the error...
> 
> LLVM ERROR: Could not resolve external global address: stdout
> 
> I am able to break this test up into sections with...
> 
> % opt -load /sw/src/fink.build/llvm32-3.2-0/llvm-3.2/build/lib/LLVMPolly.so 
> -basicaa -polly-prepare -polly-region-simplify -O3
> /sw/src/fink.build/llvm32-3.2-0/llvm-3.2/tools/polly/test/CodeGen/single_do_loop_int_max_iterations.ll
> > tempfile
> 
> which produces a file that fails to pipe into lli on darwin...
> 
> % cat tempfile | lli 
> LLVM ERROR: Could not resolve external global address: stdout
> 
> but works fine with lli built on x86_64 Fedora 15...
> 
> $ cat tempfile | ~/llvm_build/bin/lli 
> Output 2147483646
> 
> The tempfile test file is attached to the original PR I opened for the darwin specific polly testsuite failures...
> 
> http://llvm.org/bugs/show_bug.cgi?id=14142
> 
> Any idea how to fix this issue? Also should I open a unique PR for this issue or just leave it
> as part of PR14142? Thanks in advance.
>        Jack

  The same error occurs if the tempfile is passed as an argument to lli on darwin but not linux.
Running this command on darwin under bugpoint, I see...

% bugpoint --run-custom  --exec-command=lli tempfile
Read input file      : 'tempfile'
*** All input ok
Initializing execution environment: Found command in: /sw/opt/llvm-3.2/bin/lli
Running the code generator to test for a crash: 
Generating reference output from raw program: <llc><gcc>
Error running tool:
  /usr/bin/gcc -x assembler bugpoint-test-program.bc.llc.s -x none -o bugpoint-test-program.bc.llc.s.gcc.exe -lm -O2
bugpoint-test-program.bc:4:Alignment too large: 15. assumed.
bugpoint-test-program.bc:5:Unknown pseudo-op: .type
bugpoint-test-program.bc:5:Rest of line ignored. 1st junk character valued 115 (s).
bugpoint-test-program.bc:14:Unknown pseudo-op: .size
bugpoint-test-program.bc:14:Rest of line ignored. 1st junk character valued 115 (s).
bugpoint-test-program.bc:17:Alignment too large: 15. assumed.
bugpoint-test-program.bc:18:Unknown pseudo-op: .type
bugpoint-test-program.bc:18:Rest of line ignored. 1st junk character valued 109 (m).
bugpoint-test-program.bc:32:junk `@PLT' after expression
bugpoint-test-program.bc:39:Unknown pseudo-op: .size
bugpoint-test-program.bc:39:Rest of line ignored. 1st junk character valued 109 (m).
bugpoint-test-program.bc:41:Unknown pseudo-op: .type
bugpoint-test-program.bc:41:Rest of line ignored. 1st junk character valued 65 (A).
bugpoint-test-program.bc:43:Unknown pseudo-op: .type
bugpoint-test-program.bc:43:Rest of line ignored. 1st junk character valued 46 (.).
bugpoint-test-program.bc:44:unknown section type: @progbits
bugpoint-test-program.bc:44:Rest of line ignored. 1st junk character valued 46 (.).
bugpoint-test-program.bc:46:Unknown pseudo-op: .size
bugpoint-test-program.bc:46:Rest of line ignored. 1st junk character valued 46 (.).
bugpoint-test-program.bc:49:segment-name: ".note.GNU-stack" too long (maximum 16 characters)
bugpoint-test-program.bc:49:Rest of line ignored. 1st junk character valued 64 (@).
*** There is a bug running the "safe" backend.  Either debug it (for example with the -run-jit bugpoint option, if JIT is being used as the "safe" backend), or fix the error some other way.
*** Debugging code generator crash!

Checking to see if we can delete global inits: 
  - Removing all global inits hides problem!

*** Attempting to reduce the number of global variables in the testcase
Checking for crash with only these global variables:  A .str: 

*** Attempting to reduce the number of functions in the testcase
Checking for crash with only these functions:  single_do_loop_int_max_iterations main: 
Checking for crash with only these blocks: entry entry: 
Checking for crash with only 13 instructions: 

*** Attempting to reduce testcase by deleting instructions: Simplification Level #1
Checking instruction:   fence seq_cst
Checking instruction:   store i32 2147483646, i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   fence seq_cst
Checking instruction:   store i32 0, i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   fence seq_cst
Checking instruction:   store i32 2147483646, i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   fence seq_cst
Checking instruction:   %tmp = load %struct._IO_FILE** @stdout, align 8
Checking instruction:   %tmp1 = load i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   %call = tail call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %tmp, i8* getelementptr inbounds ([11 x i8]* @.str, i64 0, i64 0), i32 %tmp1) nounwind
Checking instruction:   %tmp2 = load i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   %not.cmp = icmp ne i32 %tmp2, 2147483646
Checking instruction:   %. = zext i1 %not.cmp to i32

*** Attempting to reduce testcase by deleting instructions: Simplification Level #0
Checking instruction:   fence seq_cst
Checking instruction:   store i32 2147483646, i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   fence seq_cst
Checking instruction:   store i32 0, i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   fence seq_cst
Checking instruction:   store i32 2147483646, i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   fence seq_cst
Checking instruction:   %tmp = load %struct._IO_FILE** @stdout, align 8
Checking instruction:   %tmp1 = load i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   %call = tail call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %tmp, i8* getelementptr inbounds ([11 x i8]* @.str, i64 0, i64 0), i32 %tmp1) nounwind
Checking instruction:   %tmp2 = load i32* getelementptr inbounds ([20 x i32]* @A, i64 0, i64 0), align 4
Checking instruction:   %not.cmp = icmp ne i32 %tmp2, 2147483646
Checking instruction:   %. = zext i1 %not.cmp to i32

*** Attempting to perform final cleanups: 
Emitted bitcode to 'bugpoint-reduced-simplified.bc'


> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev



More information about the llvm-dev mailing list