<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -9,6 +9,8 @@ extern &quot;C&quot; {
 #define LAST_INSTRUCTION_NUM 100
 VALUE gInstructionClasses[LAST_INSTRUCTION_NUM];
 
+#define DATA_GET_INSTRUCTION Instruction *i; Data_Get_Struct(self, Instruction, i);
+
 VALUE
 llvm_instruction_wrap(Instruction* i) {
    return Data_Wrap_Struct(gInstructionClasses[i-&gt;getOpcode()], NULL, NULL, i);
@@ -29,6 +31,42 @@ llvm_instruction_get_opcode_name(VALUE self) {
   return rb_str_new2(name.c_str());
 }
 
+VALUE 
+llvm_instruction_may_read_from_memory(VALUE self) {
+  DATA_GET_INSTRUCTION
+  return i-&gt;mayReadFromMemory() ? Qtrue : Qfalse;
+}
+
+VALUE 
+llvm_instruction_may_write_to_memory(VALUE self) {
+  DATA_GET_INSTRUCTION
+  return i-&gt;mayWriteToMemory() ? Qtrue : Qfalse;
+}
+
+VALUE
+llvm_instruction_is_identical_to(VALUE self, VALUE ri2) {
+  DATA_GET_INSTRUCTION
+  CHECK_TYPE(ri2, cLLVMInstruction);
+  Instruction *i2 = LLVM_INSTRUCTION(ri2);
+  return i-&gt;isIdenticalTo(i2) ? Qtrue : Qfalse;
+}
+
+VALUE 
+llvm_instruction_is_same_operation_as(VALUE self, VALUE ri2) {
+  DATA_GET_INSTRUCTION
+  CHECK_TYPE(ri2, cLLVMInstruction);
+  Instruction *i2 = LLVM_INSTRUCTION(ri2);
+  return i-&gt;isSameOperationAs(i2) ? Qtrue : Qfalse;
+}
+
+VALUE
+llvm_instruction_is_used_outside_of_block(VALUE self, VALUE rbb) {
+  DATA_GET_INSTRUCTION
+  CHECK_TYPE(rbb, cLLVMBasicBlock);
+  BasicBlock *bb = LLVM_BASIC_BLOCK(rbb);
+  return i-&gt;isUsedOutsideOfBlock(bb) ? Qtrue: Qfalse;
+}
+
 #define DATA_GET_TERMINATOR_INST TerminatorInst *ti; Data_Get_Struct(self, TerminatorInst, ti);
 
 VALUE</diff>
      <filename>ext/llvm_instruction.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -63,6 +63,11 @@ VALUE llvm_basic_block_get_instruction_list(VALUE);
 
 VALUE llvm_instruction_inspect(VALUE);
 VALUE llvm_instruction_get_opcode_name(VALUE);
+VALUE llvm_instruction_may_read_from_memory(VALUE);
+VALUE llvm_instruction_may_write_to_memory(VALUE);
+VALUE llvm_instruction_is_identical_to(VALUE, VALUE);
+VALUE llvm_instruction_is_same_operation_as(VALUE, VALUE);
+VALUE llvm_instruction_is_used_outside_of_block(VALUE, VALUE);
 
 VALUE llvm_terminator_inst_num_successors(VALUE);
 VALUE llvm_terminator_inst_get_successor(VALUE, VALUE);
@@ -206,7 +211,12 @@ void Init_llvmruby() {
 
   rb_define_method(cLLVMInstruction, &quot;inspect&quot;, llvm_instruction_inspect, 0);
   rb_define_method(cLLVMInstruction, &quot;get_opcode_name&quot;, llvm_instruction_get_opcode_name, 0);
-
+  rb_define_method(cLLVMInstruction, &quot;may_read_from_memory?&quot;, llvm_instruction_may_read_from_memory, 0);
+  rb_define_method(cLLVMInstruction, &quot;may_write_to_memory?&quot;, llvm_instruction_may_write_to_memory, 0);
+  rb_define_method(cLLVMInstruction, &quot;identical_to?&quot;, llvm_instruction_is_identical_to, 1);
+  rb_define_method(cLLVMInstruction, &quot;same_operation_as?&quot;, llvm_instruction_is_same_operation_as, 1);
+  rb_define_method(cLLVMInstruction, &quot;used_outside_of_block?&quot;, llvm_instruction_is_used_outside_of_block, 1);
+  
   rb_define_method(cLLVMTerminatorInst, &quot;num_successors&quot;, llvm_terminator_inst_num_successors, 0);
   rb_define_method(cLLVMTerminatorInst, &quot;get_successor&quot;, llvm_terminator_inst_get_successor, 1);
   rb_define_method(cLLVMTerminatorInst, &quot;set_successor&quot;, llvm_terminator_inst_set_successor, 2);</diff>
      <filename>ext/llvmruby.c</filename>
    </modified>
    <modified>
      <diff>@@ -44,6 +44,15 @@ class InstructionTests &lt; Test::Unit::TestCase
     
     assert_kind_of(BinaryOperator, ins.first)
     assert_kind_of(ReturnInst, ins.last)
+ 
+    f1, f2 = ins[0], ins[1]
+    assert(!f1.may_read_from_memory?)
+    assert(!f1.may_write_to_memory?)
+    assert(!f1.identical_to?(f2))
+    assert(f1.identical_to?(f1))
+    assert(f1.same_operation_as?(f2))
+    assert(f1.same_operation_as?(f1))
+    assert(!f1.used_outside_of_block?(b))
   end
 
   def test_instruction_classes</diff>
      <filename>test/test_instructions.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>6746bcc66b86538abce38da8a60e1448e26cf6fb</id>
    </parent>
  </parents>
  <author>
    <name>Tom Bagby</name>
    <email>tomatobagby@gmail.com</email>
  </author>
  <url>http://github.com/tombagby/llvmruby/commit/d30b2a76e2141244a4d0cf4915171b7a75d043dc</url>
  <id>d30b2a76e2141244a4d0cf4915171b7a75d043dc</id>
  <committed-date>2008-10-19T19:06:48-07:00</committed-date>
  <authored-date>2008-10-19T19:06:48-07:00</authored-date>
  <message>more methods on Instruction</message>
  <tree>6b61a9299c94ee4af2070a83cfbadaaa5e733ffa</tree>
  <committer>
    <name>Tom Bagby</name>
    <email>tomatobagby@gmail.com</email>
  </committer>
</commit>
