Commit 15c8a036 authored by nagayama15's avatar nagayama15

2項命令の両辺入れ替えを実装

parent 9ed08cc3
...@@ -8,6 +8,7 @@ CXXFLAGS := \ ...@@ -8,6 +8,7 @@ CXXFLAGS := \
-Wextra \ -Wextra \
-pedantic \ -pedantic \
-Werror \ -Werror \
-Wno-unused-parameter \
$(addprefix -I, $(shell llvm-config --includedir)) \ $(addprefix -I, $(shell llvm-config --includedir)) \
-fPIC \ -fPIC \
-fno-rtti -fno-rtti
......
#include <llvm/IR/Function.h> #include <llvm/IR/Function.h>
#include <llvm/IR/InstrTypes.h>
#include <llvm/IR/Module.h> #include <llvm/IR/Module.h>
#include <llvm/Pass.h> #include <llvm/Pass.h>
#include <llvm/Support/raw_ostream.h> #include <llvm/Support/raw_ostream.h>
...@@ -9,7 +10,7 @@ ...@@ -9,7 +10,7 @@
namespace namespace
{ {
/** /**
* @brief Watermarking pass by instruction swapping methods. * @brief Watermarking pass by instruction transform methods.
*/ */
class InstructionWatermarkPass class InstructionWatermarkPass
: public llvm::BasicBlockPass : public llvm::BasicBlockPass
...@@ -77,8 +78,36 @@ namespace ...@@ -77,8 +78,36 @@ namespace
*/ */
bool runOnBasicBlock(llvm::BasicBlock& block) override bool runOnBasicBlock(llvm::BasicBlock& block) override
{ {
llvm::errs() << block.getParent()->getName() << "," << block.size() << "," << 0 << "\n"; std::size_t num_embedded_bits = 0;
return false; bool is_changed = false;
llvm::errs() << "V-------------------------------V" << "\n";
for (auto& inst : block)
{
llvm::errs() << inst.getOpcode();
if (auto bin_op = llvm::dyn_cast<llvm::BinaryOperator>(&inst))
{
bool is_swapped = !bin_op->swapOperands();
is_changed = is_swapped || is_changed;
llvm::errs() << ", " << "binop";
}
else if (auto cmp_inst = llvm::dyn_cast<llvm::CmpInst>(&inst))
{
cmp_inst->swapOperands();
bool is_swapped = !cmp_inst->isCommutative();
is_changed = is_swapped || is_changed;
llvm::errs() << ", " << "cmpinst";
}
llvm::errs() << "\n";
}
llvm::errs() << block.getParent()->getName() << "," << block.size() << "," << num_embedded_bits << "\n";
return is_changed;
} }
private: private:
...@@ -90,6 +119,6 @@ namespace ...@@ -90,6 +119,6 @@ namespace
const llvm::RegisterPass<InstructionWatermarkPass> pass_registry = const llvm::RegisterPass<InstructionWatermarkPass> pass_registry =
{ {
"inst-wm", "inst-wm",
"Watermarking pass by instruction swapping methods", "Watermarking pass by instruction transform methods",
}; };
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment