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