[vmkit-commits] [vmkit] r86540 - in /vmkit/trunk: include/jnjvm/JavaCompiler.h lib/JnJVM/Compiler/JavaJIT.cpp lib/JnJVM/VMCore/JnjvmClassLoader.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Nov 9 05:43:48 PST 2009


Author: geoffray
Date: Mon Nov  9 07:43:48 2009
New Revision: 86540

URL: http://llvm.org/viewvc/llvm-project?rev=86540&view=rev
Log:
Handle the JikesRVM's Inline and NoInline annotations
on code.


Modified:
    vmkit/trunk/include/jnjvm/JavaCompiler.h
    vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp

Modified: vmkit/trunk/include/jnjvm/JavaCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JavaCompiler.h?rev=86540&r1=86539&r2=86540&view=diff

==============================================================================
--- vmkit/trunk/include/jnjvm/JavaCompiler.h (original)
+++ vmkit/trunk/include/jnjvm/JavaCompiler.h Mon Nov  9 07:43:48 2009
@@ -17,6 +17,10 @@
 
 #include "mvm/GC/GC.h"
 
+namespace mvm {
+  class UTF8;
+}
+
 namespace jnjvm {
 
 class Class;
@@ -88,6 +92,9 @@
   virtual void* loadMethod(void* handle, const char* symbol) {
     return dlsym(handle, symbol);
   }
+
+  static const mvm::UTF8* InlinePragma;
+  static const mvm::UTF8* NoInlinePragma;
 };
 
 }

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=86540&r1=86539&r2=86540&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Mon Nov  9 07:43:48 2009
@@ -934,6 +934,7 @@
                     UTF8Buffer(compilingMethod->name).cString());
     abort();
   }
+  
 
   Reader reader(codeAtt, &(compilingClass->bytes));
   uint16 maxStack = reader.readU2();
@@ -1250,6 +1251,25 @@
   if (codeLen < 5 && !callsStackWalker && !TheCompiler->isStaticCompiling())
     compilingMethod->canBeInlined = true;
 #endif
+  
+  Attribut* annotationsAtt =
+    compilingMethod->lookupAttribut(Attribut::annotationsAttribut);
+  
+  if (annotationsAtt) {
+    Reader reader(annotationsAtt, &(compilingClass->bytes));
+    AnnotationReader AR(reader, compilingClass);
+    uint16 numAnnotations = reader.readU2();
+    for (uint16 i = 0; i < numAnnotations; ++i) {
+      AR.readAnnotation();
+      const UTF8* name =
+        compilingClass->ctpInfo->UTF8At(AR.AnnotationNameIndex);
+      if (name->equals(TheCompiler->InlinePragma)) {
+        llvmFunction->addFnAttr(Attribute::AlwaysInline);
+      } else if (name->equals(TheCompiler->NoInlinePragma)) {
+        llvmFunction->addFnAttr(Attribute::NoInline);
+      }
+    }
+  }
 
   return llvmFunction;
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=86540&r1=86539&r2=86540&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Mon Nov  9 07:43:48 2009
@@ -55,6 +55,10 @@
 
 typedef void (*static_init_t)(JnjvmClassLoader*);
 
+const UTF8* JavaCompiler::InlinePragma = 0;
+const UTF8* JavaCompiler::NoInlinePragma = 0;
+
+
 JnjvmBootstrapLoader::JnjvmBootstrapLoader(mvm::BumpPtrAllocator& Alloc,
                                            JavaCompiler* Comp, 
                                            bool dlLoad) : 
@@ -198,13 +202,20 @@
   // array classes.
   analyseClasspathEnv(bootClasspathEnv);
   
+  Attribut::annotationsAttribut =
+    asciizConstructUTF8("RuntimeVisibleAnnotations");
   Attribut::codeAttribut = asciizConstructUTF8("Code");
   Attribut::exceptionsAttribut = asciizConstructUTF8("Exceptions");
   Attribut::constantAttribut = asciizConstructUTF8("ConstantValue");
   Attribut::lineNumberTableAttribut = asciizConstructUTF8("LineNumberTable");
   Attribut::innerClassesAttribut = asciizConstructUTF8("InnerClasses");
   Attribut::sourceFileAttribut = asciizConstructUTF8("SourceFile");
-  
+ 
+  JavaCompiler::InlinePragma =
+    asciizConstructUTF8("Lorg/vmmagic/pragma/Inline;");
+  JavaCompiler::NoInlinePragma =
+    asciizConstructUTF8("Lorg/vmmagic/pragma/NoInline;");
+
   initName = asciizConstructUTF8("<init>");
   initExceptionSig = asciizConstructUTF8("(Ljava/lang/String;)V");
   clinitName = asciizConstructUTF8("<clinit>");





More information about the vmkit-commits mailing list