diff options
author | Emmett Neyman <eneyman@google.com> | 2018-08-06 23:11:38 +0000 |
---|---|---|
committer | Emmett Neyman <eneyman@google.com> | 2018-08-06 23:11:38 +0000 |
commit | 8c54f36429f1fd1f8c28806a31ad3789e746ec74 (patch) | |
tree | eeac64bb7fff1d28c80145ee10f86ff4e5535890 /tools/clang-fuzzer | |
parent | 2de387a495c58785c3c7a261e0d802a2cf9537a8 (diff) | |
download | clang-8c54f36429f1fd1f8c28806a31ad3789e746ec74.tar.gz |
Changed how LLVM IR was generated to increase vectorization
Summary: Changed the structure of the generated IR to make it easier to vectorize
Reviewers: morehouse, kcc
Reviewed By: morehouse
Subscribers: cfe-commits, llvm-commits
Differential Revision: https://reviews.llvm.org/D50342
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@339080 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/clang-fuzzer')
-rw-r--r-- | tools/clang-fuzzer/proto-to-llvm/loop_proto_to_llvm.cpp | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/tools/clang-fuzzer/proto-to-llvm/loop_proto_to_llvm.cpp b/tools/clang-fuzzer/proto-to-llvm/loop_proto_to_llvm.cpp index 16dbcb7b49..919b794e1b 100644 --- a/tools/clang-fuzzer/proto-to-llvm/loop_proto_to_llvm.cpp +++ b/tools/clang-fuzzer/proto-to-llvm/loop_proto_to_llvm.cpp @@ -53,7 +53,7 @@ std::string VarRefToString(std::ostream &os, const VarRef &x) { break; } std::string ptr_var = get_var(); - os << ptr_var << " = getelementptr i32, i32* " << arr << ", i64 %ct\n"; + os << ptr_var << " = getelementptr inbounds i32, i32* " << arr << ", i64 %ct\n"; return ptr_var; } std::string RvalueToString(std::ostream &os, const Rvalue &x) { @@ -122,21 +122,20 @@ std::ostream &operator<<(std::ostream &os, const StatementSeq &x) { return os; } std::ostream &operator<<(std::ostream &os, const LoopFunction &x) { - return os << "define void @foo(i32* %a, i32* %b, i32* noalias %c, i64 %s) {\n" - << "%i = alloca i64\n" - << "store i64 0, i64* %i\n" - << "br label %loop\n\n" + return os << "target triple = \"x86_64-unknown-linux-gnu\"\n" + << "define void @foo(i32* %a, i32* %b, i32* %c, i64 %s) {\n" + << "%1 = icmp sgt i64 %s, 0\n" + << "br i1 %1, label %start, label %end\n" + << "start:\n" + << "br label %loop\n" + << "end:\n" + << "ret void\n" << "loop:\n" - << "%ct = load i64, i64* %i\n" - << "%comp = icmp eq i64 %ct, %s\n" - << "br i1 %comp, label %endloop, label %body\n\n" - << "body:\n" + << " %ct = phi i64 [ %ctnew, %loop ], [ 0, %start ]\n" << x.statements() - << "%z = add i64 1, %ct\n" - << "store i64 %z, i64* %i\n" - << "br label %loop\n\n" - << "endloop:\n" - << "ret void\n}\n"; + << "%ctnew = add i64 %ct, 1\n" + << "%j = icmp eq i64 %ctnew, %s\n" + << "br i1 %j, label %end, label %loop\n}\n"; } // --------------------------------- |