diff --git a/llvm-gcc-toolfile.spec b/llvm-gcc-toolfile.spec
index 12f05b8f290..0f7029932b3 100644
--- a/llvm-gcc-toolfile.spec
+++ b/llvm-gcc-toolfile.spec
@@ -51,7 +51,6 @@ cat << \EOF_TOOLFILE >%i/etc/scram.d/llvm-cxxcompiler.xml
-
diff --git a/llvm.spec b/llvm.spec
index 774bfabe1dd..c11ed6dee87 100644
--- a/llvm.spec
+++ b/llvm.spec
@@ -1,4 +1,4 @@
-### RPM external llvm 10.0.0
+### RPM external llvm 11.1.0
## INITENV +PATH LD_LIBRARY_PATH %{i}/lib64
## INITENV +PATH PYTHON27PATH %{i}/lib64/python`echo $PYTHON_VERSION | cut -d. -f 1,2`/site-packages
## INITENV +PATH PYTHON3PATH %{i}/lib64/python`echo $PYTHON3_VERSION | cut -d. -f 1,2`/site-packages
@@ -8,10 +8,10 @@ Requires: gcc zlib python python3
Requires: cuda
AutoReq: no
-%define llvmCommit 4b3acf7d70558fefca729efe381e3900da4591dd
-%define llvmBranch cms/release/10.x/92d5c1b
-%define iwyuCommit a5a6f27dabeb7fbc59b06ea949a312201c2fbdcf
-%define iwyuBranch master
+%define llvmCommit 9ac43ce9cfea653af380f1ac550c1171dab9a7cf
+%define llvmBranch cms/release/11.x/1fdec59
+%define iwyuCommit 5db414ac448004fe019871c977905cb7c2cff23f
+%define iwyuBranch clang_11
Source0: git+https://github.com/cms-externals/llvm-project.git?obj=%{llvmBranch}/%{llvmCommit}&export=llvm-%{realversion}-%{llvmCommit}&module=llvm-%{realversion}-%{llvmCommit}&output=/llvm-%{realversion}-%{llvmCommit}.tgz
Source1: git+https://github.com/include-what-you-use/include-what-you-use.git?obj=%{iwyuBranch}/%{iwyuCommit}&export=iwyu-%{realversion}-%{iwyuCommit}&module=iwyu-%{realversion}-%{iwyuCommit}&output=/iwyu-%{realversion}-%{iwyuCommit}.tgz
diff --git a/pip/llvmlite.file b/pip/llvmlite.file
index 496f3123ec4..75cb4a1d94f 100644
--- a/pip/llvmlite.file
+++ b/pip/llvmlite.file
@@ -1,6 +1,7 @@
Requires: llvm py2-wheel py2-enum34
Patch0: py2-llvmlite-fpic-flag
Patch1: py2-llvmlite-llvm9
+Patch2: py2-llvmlite-removeduplicate
-%define source0 git+https://github.com/numba/llvmlite?obj=master/0be433f000ddad39a43a7469ce19e0692a8b73de&export=llvmlite-%{realversion}&output=/source.tar.gz
+%define source0 git+https://github.com/numba/llvmlite?obj=release0.35/v0.35.0&export=llvmlite-%{realversion}&output=/source.tar.gz
%define PipPreBuild export LLVM_CONFIG=${LLVM_ROOT}/bin/llvm-config
diff --git a/pip/py3-numba.file b/pip/py3-numba.file
index 187d97b4c65..6b874380150 100644
--- a/pip/py3-numba.file
+++ b/pip/py3-numba.file
@@ -1,2 +1,2 @@
-Requires: py2-funcsigs py2-six py2-singledispatch py2-llvmlite py3-numpy python3
+Requires: py2-funcsigs py2-six py2-singledispatch py3-llvmlite py3-numpy python3
%define RelocatePython %{i}/bin/*
diff --git a/pip/requirements.txt b/pip/requirements.txt
index 9cefa415d89..490f4d8cbcc 100644
--- a/pip/requirements.txt
+++ b/pip/requirements.txt
@@ -153,8 +153,8 @@ law==0.1.3
#can not go to 1.5.x in python2 due to astroid
lazy-object-proxy==1.4.3
lizard==1.17.7
-#NO_AUTO_UPDATE: Source is defined in llvmlite.file, changing version here is not going to get new sources
-llvmlite==0.33.0
+#NO_AUTO_UPDATE: Source is defined in llvmlite.file, changing version here is not going to get new sources. Still, keep the version
+llvmlite==0.35.0 ; python_version>'3.0'
lockfile==0.12.2
luigi==2.8.13 ; python_version<'3.0'
luigi==3.0.2 ; python_version>'3.0'
diff --git a/py2-llvmlite-llvm9.patch b/py2-llvmlite-llvm9.patch
index c77f99cdab7..6610ea8ed74 100644
--- a/py2-llvmlite-llvm9.patch
+++ b/py2-llvmlite-llvm9.patch
@@ -1,25 +1,13 @@
-diff -Naur a/ffi/build.py b/ffi/build.py
---- a/ffi/build.py 2020-01-10 14:51:38.000000000 +0100
-+++ b/ffi/build.py 2020-01-10 14:45:27.059843040 +0100
-@@ -110,7 +110,7 @@
- out = out.decode('latin1')
- print(out)
- if not (out.startswith('8.0.') or out.startswith('7.0.')
-- or out.startswith('7.1.')):
-+ or out.startswith('7.1.') or out.startswith('9.0.') or out.startswith('10.0.')):
- msg = (
- "Building llvmlite requires LLVM 7.0.x, 7.1.x or 8.0.x Be sure to "
- "set LLVM_CONFIG to the right executable path.\n"
-diff --git a/ffi/linker.cpp b/ffi/linker.cpp
-index 57bb80b..2cc0019 100644
---- a/ffi/linker.cpp
-+++ b/ffi/linker.cpp
-@@ -42,7 +42,7 @@ LLVMPY_LinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, const char **Err)
- auto OldDiagnosticHandler = Ctx.getDiagnosticHandler();
+diff --git a/ffi/build.py b/ffi/build.py
+index 09e95da..add3945 100755
+--- a/ffi/build.py
++++ b/ffi/build.py
+@@ -134,7 +134,7 @@ def main_posix(kind, library_ext):
+ print(warning + '\n')
+ else:
- // set the handler to a new one
-- Ctx.setDiagnosticHandler(llvm::make_unique(errstream));
-+ Ctx.setDiagnosticHandler(std::make_unique(errstream));
-
- // link
- bool failed = LLVMLinkModules2(Dest, Src);
+- if not (out.startswith('10.0.') or out.startswith('9.0')):
++ if not (out.startswith('11.1.') or out.startswith('9.0')):
+ msg = ("Building llvmlite requires LLVM 10.0.x or 9.0.x, got "
+ "{!r}. Be sure to set LLVM_CONFIG to the right executable "
+ "path.\nRead the documentation at "
diff --git a/py2-llvmlite-removeduplicate.patch b/py2-llvmlite-removeduplicate.patch
new file mode 100644
index 00000000000..7eaa4fe25f3
--- /dev/null
+++ b/py2-llvmlite-removeduplicate.patch
@@ -0,0 +1,34 @@
+diff --git a/ffi/custom_passes.cpp b/ffi/custom_passes.cpp
+index 5758aad..860df2d 100644
+--- a/ffi/custom_passes.cpp
++++ b/ffi/custom_passes.cpp
+@@ -400,7 +400,7 @@ struct RefPrunePass : public FunctionPass {
+ // LLVM 9 postdomtree.dominates takes basic blocks
+ if ( domtree.dominates(incref, decref)
+ && postdomtree.dominates(decref->getParent(), incref->getParent()) ){
+-#elif LLVM_VERSION_MAJOR == 10
++#elif LLVM_VERSION_MAJOR == 11
+ // LLVM 10 postdomtree.dominates can handle instructions
+ if ( domtree.dominates(incref, decref)
+ && postdomtree.dominates(decref, incref) ){
+diff --git a/ffi/transforms.cpp b/ffi/transforms.cpp
+index 23bfd72..2eac2e9 100644
+--- a/ffi/transforms.cpp
++++ b/ffi/transforms.cpp
+@@ -6,6 +6,7 @@
+
+ extern "C" {
+
++ /*
+ namespace llvm {
+ inline PassManagerBuilder *unwrap(LLVMPassManagerBuilderRef P) {
+ return reinterpret_cast(P);
+@@ -15,7 +16,7 @@ namespace llvm {
+ return reinterpret_cast(P);
+ }
+ }
+-
++ */
+
+ API_EXPORT(LLVMPassManagerBuilderRef)
+ LLVMPY_PassManagerBuilderCreate()
diff --git a/python_tools.spec b/python_tools.spec
index 3e31a679a5f..6fe49af6201 100644
--- a/python_tools.spec
+++ b/python_tools.spec
@@ -26,7 +26,7 @@ Requires: py2-Bottleneck
Requires: py2-downhill
Requires: py2-theanets
Requires: py2-xgboost py3-xgboost
-Requires: py2-llvmlite
+Requires: py3-llvmlite
Requires: py3-numba
Requires: py2-hep_ml
Requires: py2-rep