Clang: 怎么看loop flattening pass的效果?
Clang: how to see the effect of loop flattening pass?
Clang 有 loop flattening pass 从嵌套循环转换:
for (int i = 0; i < N; ++i)
for (int j = 0; j < M; ++j)
f(A[i*M+j]);
进入一个循环:
for (int i = 0; i < (N*M); ++i)
f(A[i]);
但是,我找不到如何启用此循环展平过程。
我尝试使用 -Os -S
,但是,clang 仍然会生成嵌套循环。
问:如何看loop flattening pass的效果?使用哪些选项?
更新。我在 Windows.
上使用 clang 版本 12.0.0
LoopFlatten
自 12.0.0 以来已合并到 LLVM 中。确保您使用的是更新版本。
其次,它在转换过程中,你不能直接用clang
选项编译。使用 opt
使用密码中指定的选项使用 LoopFlatten
进行转换。如果你对opt
不熟悉,请参考这里:opt - LLVM optimizer
Clang 有 loop flattening pass 从嵌套循环转换:
for (int i = 0; i < N; ++i)
for (int j = 0; j < M; ++j)
f(A[i*M+j]);
进入一个循环:
for (int i = 0; i < (N*M); ++i)
f(A[i]);
但是,我找不到如何启用此循环展平过程。
我尝试使用 -Os -S
,但是,clang 仍然会生成嵌套循环。
问:如何看loop flattening pass的效果?使用哪些选项?
更新。我在 Windows.
上使用 clang 版本 12.0.0LoopFlatten
自 12.0.0 以来已合并到 LLVM 中。确保您使用的是更新版本。
其次,它在转换过程中,你不能直接用clang
选项编译。使用 opt
使用密码中指定的选项使用 LoopFlatten
进行转换。如果你对opt
不熟悉,请参考这里:opt - LLVM optimizer