1
0
OpenShadingLanguage/1420.diff

208 lines
7.6 KiB
Diff
Raw Normal View History

Index: b/INSTALL.md
===================================================================
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -16,7 +16,7 @@ NEW or CHANGED dependencies since the la
* A suitable C++11 compiler to build OSL itself, which may be any of:
- GCC 4.8.5 or newer (tested through gcc 11)
- - Clang 3.4 or newer (tested through clang 12)
+ - Clang 3.4 or newer (tested through clang 13)
- Microsoft Visual Studio 2015 or newer
- Intel C++ compiler icc version 13 (?) or newer
@@ -43,7 +43,7 @@ NEW or CHANGED dependencies since the la
DYLD_LIBRARY_PATH on OS X) and then OSL's build scripts will be able
to find it.
-* **[LLVM](http://www.llvm.org) 7, 8, 9, 10, 11, or 12**, including
+* **[LLVM](http://www.llvm.org) 7, 8, 9, 10, 11, 12, or 13**, including clang
clang libraries.
Note that LLVM 10+ is not compatible with C++11, and requires C++14 or
@@ -73,13 +73,13 @@ Build process
Here are the steps to check out, build, and test the OSL distribution:
-0. Install and build dependencies.
+1. Install and build dependencies.
-1. Check out a copy of the source code from the Git repository:
+2. Check out a copy of the source code from the Git repository:
git clone https://github.com/AcademySoftwareFoundation/OpenShadingLanguage.git osl
-2. Change to the distribution directory and 'make'
+3. Change to the distribution directory and 'make'
cd osl
make
@@ -95,7 +95,7 @@ Here are the steps to check out, build,
"make STOP_ON_WARNING=0", that create a build that will only stop for
full errors, not warnings.
-3. After compilation, you'll end up with a full OSL distribution in
+4. After compilation, you'll end up with a full OSL distribution in
dist/ARCH, where ARCH is the architecture you are building on, one of
"linux", "linux64", "macosx", "windows", or "windows64".
@@ -103,14 +103,14 @@ Here are the steps to check out, build,
instead type 'make debug' at the top level, you will end up with
a debug build (no optimization, full symbols) in "dist/ARCH.debug".
-4. Add the "dist/ARCH/bin" to your $PATH, and "dist/ARCH/lib" to your
+5. Add the "dist/ARCH/bin" to your $PATH, and "dist/ARCH/lib" to your
$LD_LIBRAY_PATH (or $DYLD_LIBRARY_PATH on OS X), or copy the contents
of those files to appropriate directories. Public include files
(those needed when building applications that incorporate OSL)
can be found in "dist/ARCH/include", and documentation can be found
in "dist/ARCH/share/doc".
-5. After building (and setting your library path), you can run the
+6. After building (and setting your library path), you can run the
test suite with:
make test
Index: b/src/include/OSL/llvm_util.h
===================================================================
--- a/src/include/OSL/llvm_util.h
+++ b/src/include/OSL/llvm_util.h
@@ -577,6 +577,9 @@ public:
llvm::Value *src, int srcalign, int len);
/// Dereference a pointer: return *ptr
+ /// type is the type of the thing being pointed to.
+ llvm::Value *op_load (llvm::Type* type, llvm::Value *ptr);
+ // Blind pointer version that's deprecated as of LLVM13:
llvm::Value *op_load (llvm::Value *ptr);
/// Store to a dereferenced pointer: *ptr = val
@@ -589,17 +592,25 @@ public:
/// Generate a GEP (get element pointer) where the element index is an
/// llvm::Value, which can be generated from either a constant or a
- /// runtime-computed integer element index.
+ /// runtime-computed integer element index. `type` is the type of the data
+ /// we're retrieving.
+ llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, llvm::Value *elem);
+ // Blind pointer version that's deprecated as of LLVM13:
llvm::Value *GEP (llvm::Value *ptr, llvm::Value *elem);
/// Generate a GEP (get element pointer) with an integer element
- /// offset.
+ /// offset. `type` is the type of the data we're retrieving.
+ llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, int elem);
+ // Blind pointer version that's deprecated as of LLVM13:
llvm::Value *GEP (llvm::Value *ptr, int elem);
/// Generate a GEP (get element pointer) with two integer element
/// offsets. This is just a special (and common) case of GEP where
/// we have a 2-level hierarchy and we have fixed element indices
- /// that are known at compile time.
+ /// that are known at compile time. `type` is the type of the data we're
+ /// retrieving.
+ llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, int elem1, int elem2);
+ // Blind pointer version that's deprecated as of LLVM13:
llvm::Value *GEP (llvm::Value *ptr, int elem1, int elem2);
// Arithmetic ops. It auto-detects the type (int vs float).
Index: b/src/liboslexec/llvm_util.cpp
===================================================================
--- a/src/liboslexec/llvm_util.cpp
+++ b/src/liboslexec/llvm_util.cpp
@@ -2592,9 +2592,17 @@ LLVM_Util::op_memcpy (llvm::Value *dst,
llvm::Value *
+LLVM_Util::op_load (llvm::Type* type, llvm::Value* ptr)
+{
+ return builder().CreateLoad (type, ptr);
+}
+
+
+
+llvm::Value *
LLVM_Util::op_load (llvm::Value *ptr)
{
- return builder().CreateLoad (ptr);
+ return op_load(ptr->getType()->getPointerElementType(), ptr);
}
@@ -2608,9 +2616,26 @@ LLVM_Util::op_store (llvm::Value *val, l
llvm::Value *
+LLVM_Util::GEP (llvm::Type* type, llvm::Value* ptr, llvm::Value* elem)
+{
+ return builder().CreateGEP(type, ptr, elem);
+}
+
+
+
+llvm::Value *
LLVM_Util::GEP (llvm::Value *ptr, llvm::Value *elem)
{
- return builder().CreateGEP (ptr, elem);
+ return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
+ elem);
+}
+
+
+
+llvm::Value *
+LLVM_Util::GEP (llvm::Type* type, llvm::Value* ptr, int elem)
+{
+ return builder().CreateConstGEP1_32(type, ptr, elem);
}
@@ -2618,7 +2643,16 @@ LLVM_Util::GEP (llvm::Value *ptr, llvm::
llvm::Value *
LLVM_Util::GEP (llvm::Value *ptr, int elem)
{
- return builder().CreateConstGEP1_32 (ptr, elem);
+ return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
+ elem);
+}
+
+
+
+llvm::Value *
+LLVM_Util::GEP(llvm::Type* type, llvm::Value* ptr, int elem1, int elem2)
+{
+ return builder().CreateConstGEP2_32 (type, ptr, elem1, elem2);
}
@@ -2626,7 +2660,8 @@ LLVM_Util::GEP (llvm::Value *ptr, int el
llvm::Value *
LLVM_Util::GEP (llvm::Value *ptr, int elem1, int elem2)
{
- return builder().CreateConstGEP2_32 (nullptr, ptr, elem1, elem2);
+ return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
+ elem1, elem2);
}
Index: b/src/liboslexec/runtimeoptimize.cpp
===================================================================
--- a/src/liboslexec/runtimeoptimize.cpp
+++ b/src/liboslexec/runtimeoptimize.cpp
@@ -2301,7 +2301,6 @@ RuntimeOptimizer::optimize_instance ()
// passes, but we have a hard cutoff just to be sure we don't
// ever get into an infinite loop from an unforseen cycle where we
// end up inadvertently transforming A => B => A => etc.
- int totalchanged = 0;
int reallydone = 0; // Force a few passes after we think we're done
int npasses = shadingsys().opt_passes();
for (m_pass = 0; m_pass < npasses; ++m_pass) {
@@ -2362,7 +2361,6 @@ RuntimeOptimizer::optimize_instance ()
// If nothing changed, we're done optimizing. But wait, it may be
// that after re-tracking variable lifetimes, we can notice new
// optimizations! So force another pass, then we're really done.
- totalchanged += changed;
if (changed < 1) {
if (++reallydone > 3)
break;