xref: /llvm-project/llvm/test/CodeGen/ARM/immcost.ll (revision 57d9dfa9ac7618aea8de6d1d1d940db6c7474737)
17c7255e4SJames Molloy; RUN: llc %s -o - -O1 -debug-only=consthoist 2>&1 | FileCheck %s
27c7255e4SJames Molloy; REQUIRES: asserts
37c7255e4SJames Molloy
47c7255e4SJames Molloytarget datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"
57c7255e4SJames Molloytarget triple = "thumbv6m-apple-ios8.0.0"
67c7255e4SJames Molloy
77c7255e4SJames Molloydeclare void @g(i32)
87c7255e4SJames Molloy
97c7255e4SJames Molloy; CHECK: Collect constant i32 -3 from   call void @g(i32 -3) with cost 2
107c7255e4SJames Molloydefine void @f(i1 %cond) {
117c7255e4SJames Molloyentry:
127c7255e4SJames Molloy  call void @g(i32 -3)
137c7255e4SJames Molloy  br i1 %cond, label %true, label %ret
147c7255e4SJames Molloy
157c7255e4SJames Molloytrue:
167c7255e4SJames Molloy  call void @g(i32 -3)
177c7255e4SJames Molloy  br label %ret
187c7255e4SJames Molloy
197c7255e4SJames Molloyret:
207c7255e4SJames Molloy  ret void
217c7255e4SJames Molloy}
22753c18f5SJames Molloy
23753c18f5SJames Molloy; CHECK: Function: h
24753c18f5SJames Molloy; CHECK-NOT: Collect constant i32 -193 from
25753c18f5SJames Molloydefine void @h(i1 %cond, i32 %p, i32 %q) {
26753c18f5SJames Molloyentry:
27753c18f5SJames Molloy  %a = and i32 %p, 4294967103
28753c18f5SJames Molloy  call void @g(i32 %a)
29753c18f5SJames Molloy  br i1 %cond, label %true, label %ret
30753c18f5SJames Molloy
31753c18f5SJames Molloytrue:
32753c18f5SJames Molloy  %b = and i32 %q, 4294967103
33753c18f5SJames Molloy  call void @g(i32 %b)
34753c18f5SJames Molloy  br label %ret
35753c18f5SJames Molloy
36753c18f5SJames Molloyret:
37753c18f5SJames Molloy  ret void
38753c18f5SJames Molloy}
39753c18f5SJames Molloy
401454e90fSJames Molloy; CHECK: Function: test_icmp_neg
411454e90fSJames Molloy; CHECK-NOT: Collect constant
421454e90fSJames Molloydefine void @test_icmp_neg(i1 %cond, i32 %arg, i32 %arg2) {
431454e90fSJames Molloyentry:
441454e90fSJames Molloy  %a = icmp ne i32 %arg, -5
451454e90fSJames Molloy  call void @g2(i1 %a)
461454e90fSJames Molloy  br i1 %cond, label %true, label %ret
471454e90fSJames Molloy
481454e90fSJames Molloytrue:
491454e90fSJames Molloy  %b = icmp ne i32 %arg2, -5
501454e90fSJames Molloy  call void @g2(i1 %b)
511454e90fSJames Molloy  br label %ret
521454e90fSJames Molloy
531454e90fSJames Molloyret:
541454e90fSJames Molloy  ret void
551454e90fSJames Molloy}
561454e90fSJames Molloydeclare void @g2(i1)
571454e90fSJames Molloy
581454e90fSJames Molloy; CHECK: Function: test_icmp_neg2
591454e90fSJames Molloy; CHECK: Hoist constant (i32 -500) to BB entry
601454e90fSJames Molloydefine void @test_icmp_neg2(i1 %cond, i32 %arg, i32 %arg2) {
611454e90fSJames Molloyentry:
621454e90fSJames Molloy  %a = icmp ne i32 %arg, -500
631454e90fSJames Molloy  call void @g2(i1 %a)
641454e90fSJames Molloy  br i1 %cond, label %true, label %ret
651454e90fSJames Molloy
661454e90fSJames Molloytrue:
671454e90fSJames Molloy  %b = icmp ne i32 %arg2, -500
681454e90fSJames Molloy  call void @g2(i1 %b)
691454e90fSJames Molloy  br label %ret
701454e90fSJames Molloy
711454e90fSJames Molloyret:
721454e90fSJames Molloy  ret void
731454e90fSJames Molloy}
74*57d9dfa9SJames Molloy
75*57d9dfa9SJames Molloy; CHECK: Function: test_add_neg
76*57d9dfa9SJames Molloy; CHECK-NOT: Collect constant i32 -5
77*57d9dfa9SJames Molloydefine void @test_add_neg(i1 %cond, i32 %arg, i32 %arg2) {
78*57d9dfa9SJames Molloyentry:
79*57d9dfa9SJames Molloy  %a = add i32 %arg, -5
80*57d9dfa9SJames Molloy  call void @g(i32 %a)
81*57d9dfa9SJames Molloy  br i1 %cond, label %true, label %ret
82*57d9dfa9SJames Molloy
83*57d9dfa9SJames Molloytrue:
84*57d9dfa9SJames Molloy  %b = add i32 %arg2, -5
85*57d9dfa9SJames Molloy  call void @g(i32 %b)
86*57d9dfa9SJames Molloy  br label %ret
87*57d9dfa9SJames Molloy
88*57d9dfa9SJames Molloyret:
89*57d9dfa9SJames Molloy  ret void
90*57d9dfa9SJames Molloy}
91