[llvm] 88be403 - [X86] Add some initial tests for frozen constant folds
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 30 08:37:37 PDT 2021
Author: Simon Pilgrim
Date: 2021-07-30T16:37:02+01:00
New Revision: 88be4039ba3afc9ec11dcfc9aeab02ce35013105
URL: https://github.com/llvm/llvm-project/commit/88be4039ba3afc9ec11dcfc9aeab02ce35013105
DIFF: https://github.com/llvm/llvm-project/commit/88be4039ba3afc9ec11dcfc9aeab02ce35013105.diff
LOG: [X86] Add some initial tests for frozen constant folds
We currently handle scalar but not vector cases
Added:
llvm/test/CodeGen/X86/freeze-constant-fold.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/X86/freeze-constant-fold.ll b/llvm/test/CodeGen/X86/freeze-constant-fold.ll
new file mode 100644
index 000000000000..552921918709
--- /dev/null
+++ b/llvm/test/CodeGen/X86/freeze-constant-fold.ll
@@ -0,0 +1,43 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefixes=CHECK,X86
+; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefixes=CHECK,X64
+
+define i32 @fold_add_freeze_i32() {
+; CHECK-LABEL: fold_add_freeze_i32:
+; CHECK: # %bb.0:
+; CHECK-NEXT: movl $-1, %eax
+; CHECK-NEXT: ret{{[l|q]}}
+ %1 = add i32 0, 0
+ %2 = freeze i32 %1
+ %3 = add i32 0, -1
+ %4 = freeze i32 %3
+ %5 = add i32 %2, %4
+ ret i32 %5
+}
+
+; FIXME: X86 scalarization sees through the freeze, but vector types don't.
+define <4 x i32> @fold_add_freeze_v4i32() {
+; X86-LABEL: fold_add_freeze_v4i32:
+; X86: # %bb.0:
+; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: movl $-1, 12(%eax)
+; X86-NEXT: movl $-1, 8(%eax)
+; X86-NEXT: movl $-1, 4(%eax)
+; X86-NEXT: movl $-1, (%eax)
+; X86-NEXT: retl $4
+;
+; X64-LABEL: fold_add_freeze_v4i32:
+; X64: # %bb.0:
+; X64-NEXT: pxor %xmm1, %xmm1
+; X64-NEXT: pcmpeqd %xmm0, %xmm0
+; X64-NEXT: paddd %xmm1, %xmm0
+; X64-NEXT: retq
+ %1 = insertelement <4 x i32> poison, i32 0, i32 0
+ %2 = shufflevector <4 x i32> %1, <4 x i32> poison, <4 x i32> zeroinitializer
+ %3 = freeze <4 x i32> %2
+ %4 = insertelement <4 x i32> poison, i32 -1, i32 0
+ %5 = shufflevector <4 x i32> %4, <4 x i32> poison, <4 x i32> zeroinitializer
+ %6 = freeze <4 x i32> %5
+ %7 = add <4 x i32> %3, %6
+ ret <4 x i32> %7
+}
More information about the llvm-commits
mailing list