[llvm] 12a499e - Pre-commit test case for trunc+lshr+load folds
Bjorn Pettersson via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 24 03:24:37 PST 2022
Author: Bjorn Pettersson
Date: 2022-01-24T12:22:03+01:00
New Revision: 12a499eb00e36bb0944c6b1f7f8721fd90a5bd8f
URL: https://github.com/llvm/llvm-project/commit/12a499eb00e36bb0944c6b1f7f8721fd90a5bd8f
DIFF: https://github.com/llvm/llvm-project/commit/12a499eb00e36bb0944c6b1f7f8721fd90a5bd8f.diff
LOG: Pre-commit test case for trunc+lshr+load folds
This is a pre-commit of test cases relevant for D117406.
@srl_load_narrowing1 is showing a pattern that could be folded into
a more narrow load.
@srl_load_narrowing2 is showing a similar pattern that happens to
be optimized already, but that happens in two steps (first triggering
a combine based on SRL and later another combine based on TRUNCATE).
Differential Revision: https://reviews.llvm.org/D117588
Added:
Modified:
llvm/test/CodeGen/X86/shift-folding.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/X86/shift-folding.ll b/llvm/test/CodeGen/X86/shift-folding.ll
index 539649b7cd476..cc03b4b9480a2 100644
--- a/llvm/test/CodeGen/X86/shift-folding.ll
+++ b/llvm/test/CodeGen/X86/shift-folding.ll
@@ -83,3 +83,30 @@ define i32 @overshift(i32 %a) {
ret i32 %xor
}
+; Should be possible to adjust the pointer and narrow the load to 16 bits.
+define i16 @srl_load_narrowing1(i32* %arg) {
+; CHECK-LABEL: srl_load_narrowing1:
+; CHECK: # %bb.0:
+; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
+; CHECK-NEXT: movl (%eax), %eax
+; CHECK-NEXT: shrl $8, %eax
+; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
+; CHECK-NEXT: retl
+ %tmp1 = load i32, i32* %arg, align 1
+ %tmp2 = lshr i32 %tmp1, 8
+ %tmp3 = trunc i32 %tmp2 to i16
+ ret i16 %tmp3
+}
+
+define i16 @srl_load_narrowing2(i32* %arg) {
+; CHECK-LABEL: srl_load_narrowing2:
+; CHECK: # %bb.0:
+; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
+; CHECK-NEXT: movzbl 3(%eax), %eax
+; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
+; CHECK-NEXT: retl
+ %tmp1 = load i32, i32* %arg, align 1
+ %tmp2 = lshr i32 %tmp1, 24
+ %tmp3 = trunc i32 %tmp2 to i16
+ ret i16 %tmp3
+}
More information about the llvm-commits
mailing list