[PATCH] D52643: [CodeGen][NFC] Add tests for heterogeneous types in MergeConsecutiveStores

Clement Courbet via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 1 00:19:35 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL343444: [CodeGen][NFC] Add tests for heterogeneous types in MergeConsecutiveStores (authored by courbet, committed by ).

Repository:
  rL LLVM

https://reviews.llvm.org/D52643

Files:
  llvm/trunk/test/CodeGen/X86/MergeConsecutiveStores.ll


Index: llvm/trunk/test/CodeGen/X86/MergeConsecutiveStores.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/MergeConsecutiveStores.ll
+++ llvm/trunk/test/CodeGen/X86/MergeConsecutiveStores.ll
@@ -4,6 +4,7 @@
 
 %struct.A = type { i8, i8, i8, i8, i8, i8, i8, i8 }
 %struct.B = type { i32, i32, i32, i32, i32, i32, i32, i32 }
+%struct.C = type { i8, i8, i8, i8, i32, i32, i32, i64 }
 
 ; save 1,2,3 ... as one big integer.
 define void @merge_const_store(i32 %count, %struct.A* nocapture %p) nounwind uwtable noinline ssp {
@@ -848,3 +849,74 @@
   store float %f3, float* %idx3, align 4
   ret void
 }
+
+; same as @merge_const_store with heterogeneous types.
+define void @merge_const_store_heterogeneous(i32 %count, %struct.C* nocapture %p) nounwind uwtable noinline ssp {
+; CHECK-LABEL: merge_const_store_heterogeneous:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    testl %edi, %edi
+; CHECK-NEXT:    jle .LBB20_3
+; CHECK-NEXT:  # %bb.1: # %.lr.ph.preheader
+; CHECK-NEXT:    movabsq $578437695752307201, %rax # imm = 0x807060504030201
+; CHECK-NEXT:    .p2align 4, 0x90
+; CHECK-NEXT:  .LBB20_2: # %.lr.ph
+; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
+; CHECK-NEXT:    movq %rax, (%rsi)
+; CHECK-NEXT:    addq $24, %rsi
+; CHECK-NEXT:    decl %edi
+; CHECK-NEXT:    jne .LBB20_2
+; CHECK-NEXT:  .LBB20_3: # %._crit_edge
+; CHECK-NEXT:    retq
+  %1 = icmp sgt i32 %count, 0
+  br i1 %1, label %.lr.ph, label %._crit_edge
+.lr.ph:
+  %i.02 = phi i32 [ %7, %.lr.ph ], [ 0, %0 ]
+  %.01 = phi %struct.C* [ %8, %.lr.ph ], [ %p, %0 ]
+  %2 = getelementptr inbounds %struct.C, %struct.C* %.01, i64 0, i32 0
+  store i8 1, i8* %2, align 1
+  %3 = getelementptr inbounds %struct.C, %struct.C* %.01, i64 0, i32 1
+  store i8 2, i8* %3, align 1
+  %4 = getelementptr inbounds %struct.C, %struct.C* %.01, i64 0, i32 2
+  store i8 3, i8* %4, align 1
+  %5 = getelementptr inbounds %struct.C, %struct.C* %.01, i64 0, i32 3
+  store i8 4, i8* %5, align 1
+  %6 = getelementptr inbounds %struct.C, %struct.C* %.01, i64 0, i32 4
+  store i32 134678021, i32* %6, align 1
+  %7 = add nsw i32 %i.02, 1
+  %8 = getelementptr inbounds %struct.C, %struct.C* %.01, i64 1
+  %exitcond = icmp eq i32 %7, %count
+  br i1 %exitcond, label %._crit_edge, label %.lr.ph
+._crit_edge:
+  ret void
+}
+
+; Merging heterogeneous integer types.
+define void @merge_heterogeneous(%struct.C* nocapture %p, %struct.C* nocapture %q) {
+; CHECK-LABEL: merge_heterogeneous:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movq (%rdi), %rax
+; CHECK-NEXT:    movq %rax, (%rsi)
+; CHECK-NEXT:    retq
+  %s0 = getelementptr inbounds %struct.C, %struct.C* %p, i64 0, i32 0
+  %s1 = getelementptr inbounds %struct.C, %struct.C* %p, i64 0, i32 1
+  %s2 = getelementptr inbounds %struct.C, %struct.C* %p, i64 0, i32 2
+  %s3 = getelementptr inbounds %struct.C, %struct.C* %p, i64 0, i32 3
+  %s4 = getelementptr inbounds %struct.C, %struct.C* %p, i64 0, i32 4
+  %d0 = getelementptr inbounds %struct.C, %struct.C* %q, i64 0, i32 0
+  %d1 = getelementptr inbounds %struct.C, %struct.C* %q, i64 0, i32 1
+  %d2 = getelementptr inbounds %struct.C, %struct.C* %q, i64 0, i32 2
+  %d3 = getelementptr inbounds %struct.C, %struct.C* %q, i64 0, i32 3
+  %d4 = getelementptr inbounds %struct.C, %struct.C* %q, i64 0, i32 4
+  %v0 = load i8, i8* %s0, align 1
+  %v1 = load i8, i8* %s1, align 1
+  %v2 = load i8, i8* %s2, align 1
+  %v3 = load i8, i8* %s3, align 1
+  %v4 = load i32, i32* %s4, align 1
+  store i8 %v0, i8* %d0, align 1
+  store i8 %v1, i8* %d1, align 1
+  store i8 %v2, i8* %d2, align 1
+  store i8 %v3, i8* %d3, align 1
+  store i32 %v4, i32* %d4, align 4
+  ret void
+}
+


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52643.167675.patch
Type: text/x-patch
Size: 3693 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181001/b48196c6/attachment.bin>


More information about the llvm-commits mailing list