diff options
author | Brendon Cahoon <bcahoon@codeaurora.org> | 2015-05-14 14:15:08 +0000 |
---|---|---|
committer | Brendon Cahoon <bcahoon@codeaurora.org> | 2015-05-14 14:15:08 +0000 |
commit | 9376e9998e554dbe171eba409eabdc2dddae16f0 (patch) | |
tree | 50fd296ac1f4b79f7cbe636513fcd65d8a938efa /llvm/test/CodeGen/Hexagon/hwloop-wrap.ll | |
parent | 522e6196f77a8fae8d20646a176426c2987e732f (diff) | |
download | bcm5719-llvm-9376e9998e554dbe171eba409eabdc2dddae16f0.tar.gz bcm5719-llvm-9376e9998e554dbe171eba409eabdc2dddae16f0.zip |
[Hexagon] Check for underflow/wrap in hardware loop pass
If the loop trip count may underflow or wrap, the compiler should
not generate a hardware loop since the trip count will be
incorrect.
llvm-svn: 237365
Diffstat (limited to 'llvm/test/CodeGen/Hexagon/hwloop-wrap.ll')
-rw-r--r-- | llvm/test/CodeGen/Hexagon/hwloop-wrap.ll | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Hexagon/hwloop-wrap.ll b/llvm/test/CodeGen/Hexagon/hwloop-wrap.ll new file mode 100644 index 00000000000..e0f6a87fd2e --- /dev/null +++ b/llvm/test/CodeGen/Hexagon/hwloop-wrap.ll @@ -0,0 +1,22 @@ +; RUN: llc -march=hexagon -mcpu=hexagonv5 < %s | FileCheck %s + +; We shouldn't generate a hardware loop in this case because the initial +; value may be zero, which means the endloop instruction will not decrement +; the loop counter, and the loop will execute only once. + +; CHECK-NOT: loop0 + +define void @foo(i32 %count, i32 %v) #0 { +entry: + br label %do.body + +do.body: + %count.addr.0 = phi i32 [ %count, %entry ], [ %dec, %do.body ] + tail call void asm sideeffect "nop", ""() #1 + %dec = add i32 %count.addr.0, -1 + %cmp = icmp eq i32 %dec, 0 + br i1 %cmp, label %do.end, label %do.body + +do.end: + ret void +} |