It may be that clang added the `optnone` attribute to main when you built it in (b): https://godbolt.org/g/WhM1UA . optnone, as the name implies, requests that optimizations are skipped for a given function. If this is the case, removing the optnone might make (b) do what you want.
For (c), I'd introduce something that may have side-effects, so LLVM can't easily model+eliminate the entire loop. Examples of this being an external function call (https://godbolt.org/g/toqR6b) or making your int volatile ( https://godbolt.org/g/4svW7F). George On Tue, Jun 26, 2018 at 12:48 PM luck.caile via cfe-users < cfe-users@lists.llvm.org> wrote: > test.cpp: > > int main() { > > int ret = 0; > > for (int i = 0; i < 100; i++) { > > ret += i; > > } > > return ret; > > } > > > > Hi, > > I’m new to clang/llvm recently and interested in doing some stuff in > optimization passes. > > I tried to play above simple test with clang and see if I could get > expected llvm IR by enabling llvm loop unrolling of a count 2. > > Here are my attempts: > > 1. adding pragma before loop in test.cpp: #pragma clang loop > unroll_count(2) > > It did not unroll the loop. > > 1. clang++ -c -emit-llvm -S -std=c++11 test.cpp > > opt test.ll -mem2reg -loop-unroll -unroll-count=2 -unroll-allow-partial -S > > It did not unroll the loop. > > In addition, by enabling -debug, I saw message “Skipping ‘Unroll Loops’ > pass…..” > > 1. clang++ -c -emit-llvm -S -std=c++11 -O1 test.cpp > > It unrolled the loop completely and directly return the final result(4950). > > > > I assume that my llvm and clang are latest and installed correctly. > > Could someone please let me know what I am missing here? > > > > Thanks, > > Kai > _______________________________________________ > cfe-users mailing list > cfe-users@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users >
_______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users