[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