src/share/vm/shark/sharkBuilder.hpp

Print this page


   1 /*
   2  * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
   3  * Copyright 2008, 2009, 2010 Red Hat, Inc.
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * This code is free software; you can redistribute it and/or modify it
   7  * under the terms of the GNU General Public License version 2 only, as
   8  * published by the Free Software Foundation.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  *
  24  */
  25 















  26 class SharkBuilder : public llvm::IRBuilder<> {
  27   friend class SharkCompileInvariants;
  28 
  29  public:
  30   SharkBuilder(SharkCodeBuffer* code_buffer);
  31 
  32   // The code buffer we are building into.
  33  private:
  34   SharkCodeBuffer* _code_buffer;
  35 
  36  protected:
  37   SharkCodeBuffer* code_buffer() const {
  38     return _code_buffer;
  39   }
  40 
  41   // Helpers for accessing structures.
  42  public:
  43   llvm::Value* CreateAddressOfStructEntry(llvm::Value* base,
  44                                           ByteSize offset,
  45                                           const llvm::Type* type,


 190   // Helpers for accessing the code buffer.
 191  public:
 192   llvm::Value* code_buffer_address(int offset);
 193   llvm::Value* CreateInlineOop(jobject object, const char* name = "");
 194   llvm::Value* CreateInlineOop(ciObject* object, const char* name = "") {
 195     return CreateInlineOop(object->constant_encoding(), name);
 196   }
 197   llvm::Value* CreateInlineData(void*             data,
 198                                 size_t            size,
 199                                 const llvm::Type* type,
 200                                 const char*       name = "");
 201 
 202   // Helpers for creating basic blocks.
 203   // NB don't use unless SharkFunction::CreateBlock is unavailable.
 204   // XXX these are hacky and should be removed.
 205  public:
 206   llvm::BasicBlock* GetBlockInsertionPoint() const;
 207   llvm::BasicBlock* CreateBlock(llvm::BasicBlock* ip,
 208                                 const char*       name="") const;
 209 };


   1 /*
   2  * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
   3  * Copyright 2008, 2009, 2010 Red Hat, Inc.
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * This code is free software; you can redistribute it and/or modify it
   7  * under the terms of the GNU General Public License version 2 only, as
   8  * published by the Free Software Foundation.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  *
  24  */
  25 
  26 #ifndef SHARE_VM_SHARK_SHARKBUILDER_HPP
  27 #define SHARE_VM_SHARK_SHARKBUILDER_HPP
  28 
  29 #include "ci/ciType.hpp"
  30 #include "memory/barrierSet.hpp"
  31 #include "memory/cardTableModRefBS.hpp"
  32 #include "shark/llvmHeaders.hpp"
  33 #include "shark/llvmValue.hpp"
  34 #include "shark/sharkCodeBuffer.hpp"
  35 #include "shark/sharkEntry.hpp"
  36 #include "shark/sharkType.hpp"
  37 #include "shark/sharkValue.hpp"
  38 #include "utilities/debug.hpp"
  39 #include "utilities/sizes.hpp"
  40 
  41 class SharkBuilder : public llvm::IRBuilder<> {
  42   friend class SharkCompileInvariants;
  43 
  44  public:
  45   SharkBuilder(SharkCodeBuffer* code_buffer);
  46 
  47   // The code buffer we are building into.
  48  private:
  49   SharkCodeBuffer* _code_buffer;
  50 
  51  protected:
  52   SharkCodeBuffer* code_buffer() const {
  53     return _code_buffer;
  54   }
  55 
  56   // Helpers for accessing structures.
  57  public:
  58   llvm::Value* CreateAddressOfStructEntry(llvm::Value* base,
  59                                           ByteSize offset,
  60                                           const llvm::Type* type,


 205   // Helpers for accessing the code buffer.
 206  public:
 207   llvm::Value* code_buffer_address(int offset);
 208   llvm::Value* CreateInlineOop(jobject object, const char* name = "");
 209   llvm::Value* CreateInlineOop(ciObject* object, const char* name = "") {
 210     return CreateInlineOop(object->constant_encoding(), name);
 211   }
 212   llvm::Value* CreateInlineData(void*             data,
 213                                 size_t            size,
 214                                 const llvm::Type* type,
 215                                 const char*       name = "");
 216 
 217   // Helpers for creating basic blocks.
 218   // NB don't use unless SharkFunction::CreateBlock is unavailable.
 219   // XXX these are hacky and should be removed.
 220  public:
 221   llvm::BasicBlock* GetBlockInsertionPoint() const;
 222   llvm::BasicBlock* CreateBlock(llvm::BasicBlock* ip,
 223                                 const char*       name="") const;
 224 };
 225 
 226 #endif // SHARE_VM_SHARK_SHARKBUILDER_HPP