diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-08-23 16:01:01 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-08-23 16:01:01 +0000 |
commit | 38e2ccc8d069fc88413613c393363afb31eb771c (patch) | |
tree | bf22b3e78b34f608ed68a310246ad1e582b1908f /llvm/test/CodeGen/Hexagon | |
parent | 530e9a8f544fe891320e77fde8cb3411d8cdf342 (diff) | |
download | bcm5719-llvm-38e2ccc8d069fc88413613c393363afb31eb771c.tar.gz bcm5719-llvm-38e2ccc8d069fc88413613c393363afb31eb771c.zip |
[Hexagon] Packetize return value setup with the return instruction
Commit r279241 unintentionally reverted that ability.
llvm-svn: 279526
Diffstat (limited to 'llvm/test/CodeGen/Hexagon')
-rw-r--r-- | llvm/test/CodeGen/Hexagon/packetize-return-arg.ll | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Hexagon/packetize-return-arg.ll b/llvm/test/CodeGen/Hexagon/packetize-return-arg.ll new file mode 100644 index 00000000000..b18fc23eca8 --- /dev/null +++ b/llvm/test/CodeGen/Hexagon/packetize-return-arg.ll @@ -0,0 +1,37 @@ +; RUN: llc -march=hexagon < %s | FileCheck %s +; Check that "r0 = rN" is packetized together with dealloc_return. +; CHECK: r0 = r +; CHECK-NOT: { +; CHECK: dealloc_return + +target triple = "hexagon-unknown--elf" + +; Function Attrs: nounwind +define i8* @fred(i8* %user_context, i32 %x) #0 { +entry: + %and14 = add i32 %x, 255 + %add1 = and i32 %and14, -128 + %call = tail call i8* @malloc(i32 %add1) #1 + %cmp = icmp eq i8* %call, null + br i1 %cmp, label %cleanup, label %if.end + +if.end: ; preds = %entry + %0 = ptrtoint i8* %call to i32 + %sub4 = add i32 %0, 131 + %and5 = and i32 %sub4, -128 + %1 = inttoptr i32 %and5 to i8* + %2 = inttoptr i32 %and5 to i8** + %arrayidx = getelementptr inbounds i8*, i8** %2, i32 -1 + store i8* %call, i8** %arrayidx, align 4 + br label %cleanup + +cleanup: ; preds = %if.end, %entry + %retval.0 = phi i8* [ %1, %if.end ], [ null, %entry ] + ret i8* %retval.0 +} + +; Function Attrs: nounwind +declare noalias i8* @malloc(i32) local_unnamed_addr #1 + +attributes #0 = { nounwind } +attributes #1 = { nobuiltin nounwind } |