/JIT/opcodes/loop.h

http://unladen-swallow.googlecode.com/ · C Header · 48 lines · 31 code · 14 blank · 3 comment · 0 complexity · 7d5e77a47e4611bacc3efb7d792df6f3 MD5 · raw file

  1. // -*- C++ -*-
  2. #ifndef OPCODE_LOOP_H_
  3. #define OPCODE_LOOP_H_
  4. #ifndef __cplusplus
  5. #error This header expects to be included only in C++ source
  6. #endif
  7. #include "llvm/Support/IRBuilder.h"
  8. #include "llvm/Support/TargetFolder.h"
  9. namespace llvm {
  10. class BasicBlock;
  11. }
  12. namespace py {
  13. class LlvmFunctionBuilder;
  14. class LlvmFunctionState;
  15. // This class contains most loop related opcodes.
  16. // SETUP_LOOP can be found in OpcodeBlock.
  17. class OpcodeLoop
  18. {
  19. public:
  20. OpcodeLoop(LlvmFunctionBuilder *fbuilder);
  21. void GET_ITER();
  22. void FOR_ITER(llvm::BasicBlock *target, llvm::BasicBlock *fallthrough);
  23. void CONTINUE_LOOP(llvm::BasicBlock *target,
  24. int target_opindex,
  25. llvm::BasicBlock *fallthrough);
  26. void BREAK_LOOP();
  27. private:
  28. typedef llvm::IRBuilder<true, llvm::TargetFolder> BuilderT;
  29. LlvmFunctionBuilder *fbuilder_;
  30. LlvmFunctionState *state_;
  31. BuilderT &builder_;
  32. };
  33. }
  34. #endif /* OPCODE_LOOP_H_ */