Skip to content

Commit 8358eee

Browse files
committed
LLVM 3.9+: enable the NVPTX LLVM back-end, and add patches fixing bugs.
Use of the NVPTX back-end is only tested on LLVM 3.9, in combination with the CUDAnative.jl package.
1 parent 7851f77 commit 8358eee

File tree

4 files changed

+1424
-3
lines changed

4 files changed

+1424
-3
lines changed

deps/llvm.mk

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,34 @@ LLVM_LIBCXX_TAR:=$(SRCDIR)/srccache/libcxx-$(LLVM_TAR_EXT)
7373
endif
7474
endif # LLVM_VER != svn
7575

76+
# Figure out which targets to build (hardcode this to "host;NVPTX" when on 3.9+ only)
77+
LLVM_TARGETS := host
78+
ifeq ($(LLVM_VER_SHORT),$(filter $(LLVM_VER_SHORT),3.9 svn))
79+
LLVM_TARGETS += NVPTX
80+
endif
81+
EMPTY :=
82+
SPACE := $(EMPTY) $(EMPTY)
83+
ifeq ($(LLVM_USE_CMAKE),1)
84+
LLVM_TARGET_STRING := $(subst $(SPACE),;,$(LLVM_TARGETS))
85+
else
86+
COMMA := ,
87+
LLVM_TARGET_STRING := $(subst $(SPACE),$(COMMA),$(LLVM_TARGETS))
88+
endif
89+
7690
# Allow adding LLVM specific flags
7791
LLVM_CFLAGS += $(CFLAGS)
7892
LLVM_CXXFLAGS += $(CXXFLAGS)
7993
LLVM_CPPFLAGS += $(CPPFLAGS)
8094
LLVM_LDFLAGS += $(LDFLAGS)
81-
LLVM_TARGETS := host
82-
LLVM_TARGET_FLAGS := --enable-targets=$(LLVM_TARGETS)
95+
ifeq ($(LLVM_USE_CMAKE),1)
96+
LLVM_TARGETS := host;NVPTX
97+
else
98+
LLVM_TARGETS := host,nvptx
99+
endif
83100
LLVM_CMAKE += -DLLVM_TARGETS_TO_BUILD:STRING="$(LLVM_TARGETS)" -DCMAKE_BUILD_TYPE="$(LLVM_CMAKE_BUILDTYPE)"
84101
LLVM_CMAKE += -DLLVM_TOOLS_INSTALL_DIR=$(shell $(JULIAHOME)/contrib/relative_path.sh $(build_prefix) $(build_depsbindir))
85102
LLVM_CMAKE += -DLLVM_BINDINGS_LIST="" -DLLVM_INCLUDE_DOCS=Off -DLLVM_ENABLE_TERMINFO=Off -DHAVE_HISTEDIT_H=Off -DHAVE_LIBEDIT=Off
86-
LLVM_FLAGS += --disable-profiling --enable-static $(LLVM_TARGET_FLAGS)
103+
LLVM_FLAGS += --disable-profiling --enable-static --enable-targets=$(LLVM_TARGET_STRING)
87104
LLVM_FLAGS += --disable-bindings --disable-docs --disable-libedit --disable-terminfo
88105
# LLVM has weird install prefixes (see llvm-$(LLVM_VER)/build_$(LLVM_BUILDTYPE)/Makefile.config for the full list)
89106
# We map them here to the "normal" ones, which means just prefixing "PROJ_" to the variable name.
@@ -491,6 +508,10 @@ $(eval $(call LLVM_PATCH,llvm-3.9.0_win64-reloc-dwarf))
491508
$(eval $(call LLVM_PATCH,llvm-3.9.0_D27296-libssp))
492509
$(eval $(call LLVM_PATCH,llvm-D27609-AArch64-UABS_G3))
493510
$(eval $(call LLVM_PATCH,llvm-D27629-AArch64-large_model))
511+
# patches for NVPTX
512+
$(eval $(call LLVM_PATCH,llvm-D9168_argument_alignment)) # Remove for 4.0
513+
$(eval $(call LLVM_PATCH,llvm-D23597_sdag_names)) # Dep for D24300, remove for 4.0
514+
$(eval $(call LLVM_PATCH,llvm-D24300_ptx_intrinsics)) # Remove for 4.0
494515
endif # LLVM_VER
495516

496517
ifeq ($(LLVM_VER),3.7.1)

0 commit comments

Comments
 (0)