mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
454627252b
buildbots. Original commit message: A DAGCombine optimization for merging consecutive stores. This optimization is not profitable in many cases because moden processos can store multiple values in parallel, and preparing the consecutive store requires some work. We only handle these cases: 1. Consecutive stores where the values and consecutive loads. For example: int a = p->a; int b = p->b; q->a = a; q->b = b; 2. Consecutive stores where the values are constants. Foe example: q->a = 4; q->b = 5; git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164890 91177308-0d34-0410-b5e6-96231b3b80d8
34 lines
1.2 KiB
LLVM
34 lines
1.2 KiB
LLVM
; RUN: llc < %s -march=x86 -relocation-model=static | FileCheck %s
|
|
|
|
; CHECK: align
|
|
; CHECK: movl $4, -4(%ecx)
|
|
; CHECK: movl $5, (%ecx)
|
|
; CHECK: addl $4, %ecx
|
|
; CHECK: decl %eax
|
|
; CHECK: jne
|
|
|
|
@A = internal global [16 x [16 x i32]] zeroinitializer, align 32 ; <[16 x [16 x i32]]*> [#uses=2]
|
|
|
|
define void @test(i32 %row, i32 %N.in) nounwind {
|
|
entry:
|
|
%N = bitcast i32 %N.in to i32 ; <i32> [#uses=1]
|
|
%tmp5 = icmp sgt i32 %N.in, 0 ; <i1> [#uses=1]
|
|
br i1 %tmp5, label %cond_true, label %return
|
|
|
|
cond_true: ; preds = %cond_true, %entry
|
|
%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %cond_true ] ; <i32> [#uses=2]
|
|
%i.0.0 = bitcast i32 %indvar to i32 ; <i32> [#uses=2]
|
|
%tmp2 = add i32 %i.0.0, 1 ; <i32> [#uses=1]
|
|
%tmp = getelementptr [16 x [16 x i32]]* @A, i32 0, i32 %row, i32 %tmp2 ; <i32*> [#uses=1]
|
|
store i32 4, i32* %tmp
|
|
%tmp5.upgrd.1 = add i32 %i.0.0, 2 ; <i32> [#uses=1]
|
|
%tmp7 = getelementptr [16 x [16 x i32]]* @A, i32 0, i32 %row, i32 %tmp5.upgrd.1 ; <i32*> [#uses=1]
|
|
store i32 5, i32* %tmp7
|
|
%indvar.next = add i32 %indvar, 1 ; <i32> [#uses=2]
|
|
%exitcond = icmp eq i32 %indvar.next, %N ; <i1> [#uses=1]
|
|
br i1 %exitcond, label %return, label %cond_true
|
|
|
|
return: ; preds = %cond_true, %entry
|
|
ret void
|
|
}
|