Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 51 additions & 21 deletions lib/clamp-device.in
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ KMOPTLLC="${KMOPTLLC:="-O2"}"
# enable LLVM hijacking
KMHACKLLVM="${KMHACKLLVM:=0}"

# enable ISA hijacking
KMHACKISA="${KMHACKISA:=0}"

# enable ThinLTO
KMTHINLTO="${KMTHINLTO:=0}"

Expand Down Expand Up @@ -68,6 +71,7 @@ LLC=$BINDIR/llc
LINK=$BINDIR/llvm-link
LIB=$BINDIR/../lib
LLD=$BINDIR/ld.lld
MC=$BINDIR/llvm-mc


################
Expand Down Expand Up @@ -128,6 +132,10 @@ do
KMDUMPDIR="${ARG#*=}"
continue
;;
--input-filename=*)
INPUT_FILENAME="${ARG#*=}"
continue
;;
esac
done

Expand Down Expand Up @@ -230,34 +238,56 @@ if [ $KMDUMPLLVM == "1" ]; then
cp $2.opt.bc ${KMDUMPDIR}/dump-$AMDGPU_TARGET.opt.bc
fi


# Disable code object v3, generate code object v2 for now
CODE_OBJECT_FORMAT="-mattr=-code-object-v3"

if [ $KMTHINLTO == "1" ]; then
$LLC -mtriple amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
$KMOPTLLC -amdgpu-function-calls=$AMDGPU_FUNC_CALLS -filetype=obj -o $2 $2.opt.bc
else
$LLC -mtriple amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
$KMOPTLLC -amdgpu-function-calls=$AMDGPU_FUNC_CALLS -filetype=obj -o $2.isabin $2.opt.bc
fi

# error handling for llc
RETVAL=$?
if [ $RETVAL != 0 ]; then
echo "Generating AMD GCN kernel failed in llc for target: $AMDGPU_TARGET"
exit $RETVAL
fi
if [[ $KMHACKISA == "1" && -e ./hack-$INPUT_FILENAME-$AMDGPU_TARGET.isa ]]; then
# hijack ISA
if [ $KMTHINLTO == "1" ]; then
echo "Use ./hack-$INPUT_FILENAME-$AMDGPU_TARGET.isa to hijack $2"
$MC --triple=amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
-filetype=obj -o $2 ./hack-$INPUT_FILENAME-$AMDGPU_TARGET.isa
else
echo "Use ./hack-$INPUT_FILENAME-$AMDGPU_TARGET.isa to hijack $2.isabin"
$MC --triple=amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
-filetype=obj -o $2.isabin ./hack-$INPUT_FILENAME-$AMDGPU_TARGET.isa
fi

if [ $KMDUMPISA == "1" ]; then
if [ $KMDUMPISA == "1" ]; then
if [ $KMTHINLTO == "1" ]; then
cp $2 ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isabin
else
cp $2.isabin ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isabin
fi
cp ./hack-$INPUT_FILENAME-$AMDGPU_TARGET.isa ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isa
fi
else
if [ $KMTHINLTO == "1" ]; then
cp $2 ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isabin
$LLC -mtriple amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
$KMOPTLLC -amdgpu-function-calls=$AMDGPU_FUNC_CALLS -filetype=obj -o $2 $2.opt.bc
else
cp $2.isabin ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isabin
$LLC -mtriple amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
$KMOPTLLC -amdgpu-function-calls=$AMDGPU_FUNC_CALLS -filetype=obj -o $2.isabin $2.opt.bc
fi

# error handling for llc
RETVAL=$?
if [ $RETVAL != 0 ]; then
echo "Generating AMD GCN kernel failed in llc for target: $AMDGPU_TARGET"
exit $RETVAL
fi

if [ $KMDUMPISA == "1" ]; then
if [ $KMTHINLTO == "1" ]; then
cp $2 ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isabin
else
cp $2.isabin ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isabin
fi

$LLC -mtriple amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
$KMOPTLLC -amdgpu-function-calls=$AMDGPU_FUNC_CALLS -filetype=asm -o $2.isa $2.opt.bc
mv $2.isa ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isa
fi
$LLC -mtriple amdgcn-amd-amdhsa -mcpu=$AMDGPU_TARGET $CODE_OBJECT_FORMAT \
$KMOPTLLC -amdgpu-function-calls=$AMDGPU_FUNC_CALLS -filetype=asm -o $2.isa $2.opt.bc
mv $2.isa ${KMDUMPDIR}/dump-$AMDGPU_TARGET.isa
fi

# ThinLTO does not performs LLD here inside clamp-device.in.
Expand Down
4 changes: 2 additions & 2 deletions lib/hc-kernel-assemble.in
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,9 @@ if [ $AMDGPU_OBJ_CODEGEN == 1 ]; then
# for each GPU target, lower to GCN ISA in HSACO format
for AMDGPU_TARGET in ${AMDGPU_TARGET_ARRAY[@]}; do
if [ $AMDGPU_FUNC_CALLS == "1" ]; then
{ $CLAMP_DEVICE "$KERNEL_INPUT" "$TEMP_DIR/kernel-$AMDGPU_TARGET.hsaco" --amdgpu-target=$AMDGPU_TARGET --early-finalize --amdgpu-func-calls; } &
{ $CLAMP_DEVICE "$KERNEL_INPUT" "$TEMP_DIR/kernel-$AMDGPU_TARGET.hsaco" --amdgpu-target=$AMDGPU_TARGET --early-finalize --amdgpu-func-calls --input-filename=`basename -s .o $2`; } &
else
{ $CLAMP_DEVICE "$KERNEL_INPUT" "$TEMP_DIR/kernel-$AMDGPU_TARGET.hsaco" --amdgpu-target=$AMDGPU_TARGET --early-finalize ; } &
{ $CLAMP_DEVICE "$KERNEL_INPUT" "$TEMP_DIR/kernel-$AMDGPU_TARGET.hsaco" --amdgpu-target=$AMDGPU_TARGET --early-finalize --input-filename=`basename -s .o $2`; } &
fi

# error handling
Expand Down