xref: /llvm-project/llvm/test/CodeGen/RISCV/trunc-free.ll (revision 1456b68686808fa7c6ed7327aba65b639f81d5b8)
17a73ab58SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
27a73ab58SCraig Topper; RUN: llc < %s -mtriple=riscv64 | FileCheck %s
37a73ab58SCraig Topper
47a73ab58SCraig Topper; Make sure we use lwu for the load, and don't emit
57a73ab58SCraig Topper; a sext.w for the compare. This requires isTruncateFree
67a73ab58SCraig Topper; to return true for i64->i32. Otherwise we emit a
77a73ab58SCraig Topper; lw and a shift pair for the zext.
87a73ab58SCraig Topper
9*1456b686SNikita Popovdefine void @foo(ptr %p, ptr %q, ptr %r) {
107a73ab58SCraig Topper; CHECK-LABEL: foo:
117a73ab58SCraig Topper; CHECK:       # %bb.0:
127a73ab58SCraig Topper; CHECK-NEXT:    lwu a0, 0(a0)
137a73ab58SCraig Topper; CHECK-NEXT:    sd a0, 0(a1)
147a73ab58SCraig Topper; CHECK-NEXT:    beqz a0, .LBB0_2
157a73ab58SCraig Topper; CHECK-NEXT:  # %bb.1: # %if
167a73ab58SCraig Topper; CHECK-NEXT:    sw a0, 0(a2)
177a73ab58SCraig Topper; CHECK-NEXT:  .LBB0_2: # %end
187a73ab58SCraig Topper; CHECK-NEXT:    ret
19*1456b686SNikita Popov  %a = load i32, ptr %p
207a73ab58SCraig Topper  %b = zext i32 %a to i64
21*1456b686SNikita Popov  store i64 %b, ptr %q
227a73ab58SCraig Topper  %c = icmp ne i32 %a, 0
237a73ab58SCraig Topper  br i1 %c, label %if, label %end
247a73ab58SCraig Topper
257a73ab58SCraig Topperif:
26*1456b686SNikita Popov  store i32 %a, ptr %r
277a73ab58SCraig Topper  br label %end
287a73ab58SCraig Topper
297a73ab58SCraig Topperend:
307a73ab58SCraig Topper  ret void
317a73ab58SCraig Topper}
32