Get struct names only for non-literal structs

Bug 19545955

While marking loads as invariant, test that a struct parameter is
not a literal struct before comparing/testing its name.

Change-Id: I92fb234b42306859ecad87c83321f9a8fe1a210b
diff --git a/lib/Renderscript/RSInvariant.cpp b/lib/Renderscript/RSInvariant.cpp
index 1119a7a..94b5faf 100644
--- a/lib/Renderscript/RSInvariant.cpp
+++ b/lib/Renderscript/RSInvariant.cpp
@@ -78,10 +78,12 @@
       const llvm::Type *ArgType = Arg.getType();
       if (ArgType->isPointerTy()) {
         const llvm::Type *ArgPtrDomainType =  ArgType->getPointerElementType();
-        if (ArgPtrDomainType->isStructTy()) {
-          const llvm::StringRef StructName = ArgPtrDomainType->getStructName();
-          if (StructName.equals("struct.rs_kernel_context_t") || StructName.equals("RsExpandKernelDriverInfoPfx")) {
-            Changed |= markInvariantUserLoads(&Arg);
+        if (auto ArgPtrDomainStructType = llvm::dyn_cast<llvm::StructType>(ArgPtrDomainType)) {
+          if (ArgPtrDomainStructType->isLiteral()) {
+            const llvm::StringRef StructName = ArgPtrDomainStructType->getName();
+            if (StructName.equals("struct.rs_kernel_context_t") || StructName.equals("RsExpandKernelDriverInfoPfx")) {
+              Changed |= markInvariantUserLoads(&Arg);
+            }
           }
         }
       }