diff options
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp | 12 | ||||
-rw-r--r-- | llvm/test/CodeGen/Hexagon/dead-store-stack.ll | 131 |
2 files changed, 131 insertions, 12 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp index 5c1c22f52f0..65ac1f06916 100644 --- a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp +++ b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp @@ -240,10 +240,6 @@ unsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr &MI, switch (MI.getOpcode()) { default: break; - case Hexagon::L2_loadrb_io: - case Hexagon::L2_loadrub_io: - case Hexagon::L2_loadrh_io: - case Hexagon::L2_loadruh_io: case Hexagon::L2_loadri_io: case Hexagon::L2_loadrd_io: case Hexagon::V6_vL32b_ai: @@ -266,14 +262,6 @@ unsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr &MI, return MI.getOperand(0).getReg(); } - case Hexagon::L2_ploadrbt_io: - case Hexagon::L2_ploadrbf_io: - case Hexagon::L2_ploadrubt_io: - case Hexagon::L2_ploadrubf_io: - case Hexagon::L2_ploadrht_io: - case Hexagon::L2_ploadrhf_io: - case Hexagon::L2_ploadruht_io: - case Hexagon::L2_ploadruhf_io: case Hexagon::L2_ploadrit_io: case Hexagon::L2_ploadrif_io: case Hexagon::L2_ploadrdt_io: diff --git a/llvm/test/CodeGen/Hexagon/dead-store-stack.ll b/llvm/test/CodeGen/Hexagon/dead-store-stack.ll new file mode 100644 index 00000000000..93d324baad9 --- /dev/null +++ b/llvm/test/CodeGen/Hexagon/dead-store-stack.ll @@ -0,0 +1,131 @@ +; RUN: llc -O2 -march=hexagon < %s | FileCheck %s +; CHECK: ParseFunc: +; CHECK: r[[ARG0:[0-9]+]] = memuh(r[[ARG1:[0-9]+]] + #[[OFFSET:[0-9]+]]) +; CHECK: memw(r[[ARG1]]+#[[OFFSET]]) = r[[ARG0]] + +@.str.3 = external unnamed_addr constant [8 x i8], align 1 +; Function Attrs: nounwind +define void @ParseFunc() local_unnamed_addr #0 { +entry: + %dataVar = alloca i32, align 4 + %0 = load i32, i32* %dataVar, align 4 + %and = and i32 %0, 65535 + store i32 %and, i32* %dataVar, align 4 + %.pr = load i32, i32* %dataVar, align 4 + switch i32 %.pr, label %sw.epilog [ + i32 4, label %sw.bb + i32 5, label %sw.bb + i32 1, label %sw.bb39 + i32 2, label %sw.bb40 + i32 3, label %sw.bb41 + i32 6, label %sw.bb42 + i32 7, label %sw.bb43 + i32 13, label %sw.bb44 + i32 0, label %sw.bb44 + i32 14, label %sw.bb45 + i32 15, label %sw.bb46 + ] + +sw.bb: + %cmp1.i = icmp eq i32 %.pr, 4 + br label %land.rhs.i + +land.rhs.i: + br label %ParseFuncNext.exit.i + +ParseFuncNext.exit.i: + br i1 %cmp1.i, label %if.then.i, label %if.else10.i + +if.then.i: + call void (i8*, i32, i8*, ...) @snprintf(i8* undef, i32 undef, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i32 0, i32 0), i32 undef) #2 + br label %if.end27.i + +if.else10.i: + unreachable + +if.end27.i: + br label %land.rhs.i + +sw.bb39: + unreachable + +sw.bb40: + unreachable + +sw.bb41: + unreachable + +sw.bb42: + %1 = load i32, i32* undef, align 4 + %shr.i = lshr i32 %1, 16 + br label %while.cond.i.i + +while.cond.i.i: + %2 = load i8, i8* undef, align 1 + switch i8 %2, label %if.then4.i [ + i8 48, label %land.end.i.i + i8 120, label %land.end.i.i + i8 37, label %do.body.i.i + ] + +land.end.i.i: + unreachable + +do.body.i.i: + switch i8 undef, label %if.then4.i [ + i8 117, label %if.end40.i.i + i8 120, label %if.end40.i.i + i8 88, label %if.end40.i.i + i8 100, label %if.end40.i.i + i8 105, label %if.end40.i.i + ] + +if.end40.i.i: + %trunc.i = trunc i32 %shr.i to i16 + br label %land.rhs.i126 + +if.then4.i: + unreachable + +land.rhs.i126: + switch i16 %trunc.i, label %sw.epilog.i [ + i16 1, label %sw.bb.i + i16 2, label %sw.bb12.i + i16 4, label %sw.bb16.i + ] + +sw.bb.i: + unreachable + +sw.bb12.i: + unreachable + +sw.bb16.i: + unreachable + +sw.epilog.i: + call void (i8*, i32, i8*, ...) @snprintf(i8* undef, i32 undef, i8* nonnull undef, i32 undef) #2 + br label %land.rhs.i126 + +sw.bb43: + unreachable + +sw.bb44: + unreachable + +sw.bb45: + unreachable + +sw.bb46: + unreachable + +sw.epilog: + ret void +} + +; Function Attrs: nounwind +declare void @snprintf(i8* nocapture, i32, i8* nocapture readonly, ...) local_unnamed_addr #1 + +attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="8" "target-features"="+hvx" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="8" "target-features"="+hvx" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #2 = { nounwind } |