forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 14
Home
Jake Goulding edited this page Apr 28, 2017
·
9 revisions
cargo build --release --target=./arduino.json --verbose
# grab the `rustc ...` invocation
# add `--emit=llvm-ir`
# Look for `target/arduino/release/deps/foo.0.ll`
Basically, recreate what the build system does
cmake \
-D CMAKE_BUILD_TYPE=Debug \
-D LLVM_ENABLE_ASSERTIONS=ON \
-D LLVM_TARGETS_TO_BUILD="X86" \
-D LLVM_EXPERIMENTAL_TARGETS_TO_BUILD="AVR" \
-D LLVM_INCLUDE_EXAMPLES=OFF \
-D LLVM_INCLUDE_TESTS=OFF \
-D LLVM_INCLUDE_DOCS=OFF \
-D LLVM_ENABLE_ZLIB=OFF \
-D WITH_POLLY=OFF \
-D LLVM_ENABLE_TERMINFO=OFF \
-D LLVM_ENABLE_LIBEDIT=OFF \
..
Create the two supporting files, then run it against your LLVM IR (./bugpoint.sh myfile.ll
). This will produce a bugpoint-reduced-simplified.bc
, which you can convert back to IR with llvm-dis
.
#!/bin/bash
export PATH=../debug/bin/:$PATH
bugpoint $1 -compile-custom -compile-command ./repro.sh -safe-tool-args='-march=avr -mcpu=atmega328p -filetype=obj'
Edit this file to look for your error
#!/bin/bash
set -eux
! llc -march=avr -mcpu=atmega328p -filetype=obj $1 2>&1 | grep 'No instruction defining live value'