107 lines · plain
1; RUN: llc -mtriple=aarch64-none-linux-gnu %s -o - -O1 -debug-only=consthoist 2>&1 | FileCheck %s2; REQUIRES: asserts3 4declare void @g(i64)5 6; Single ORR.7; CHECK: Function: f18; CHECK-NOT: Collect constant9define void @f1(i1 %cond) {10entry:11 call void @g(i64 -3)12 br i1 %cond, label %true, label %ret13 14true:15 call void @g(i64 -3)16 br label %ret17 18ret:19 ret void20}21 22; Constant is 0xBEEF000000000000, single MOVZ with shift.23; CHECK: Function: f224; CHECK-NOT: Collect constant25define void @f2(i1 %cond, i64 %p, i64 %q) {26entry:27 %a = and i64 %p, 1375821538664015462428 call void @g(i64 %a)29 br i1 %cond, label %true, label %ret30 31true:32 %b = and i64 %q, 1375821538664015462433 call void @g(i64 %b)34 br label %ret35 36ret:37 ret void38}39 40; CHECK: Function: f341; CHECK: Collect constant i64 4294967103 from %a = and i64 %p, 4294967103 with cost 242define void @f3(i1 %cond, i64 %p, i64 %q) {43entry:44 %a = and i64 %p, 429496710345 call void @g(i64 %a)46 br i1 %cond, label %true, label %ret47 48true:49 %b = and i64 %q, 429496710350 call void @g(i64 %b)51 br label %ret52 53ret:54 ret void55}56 57; CHECK: Function: f458; Collect constant i64 -4688528683866062848 from %a = and i64 %p, -4688528683866062848 with cost 259define void @f4(i1 %cond, i64 %p, i64 %q) {60entry:61 %a = and i64 %p, 1375821538984348876862 call void @g(i64 %a)63 br i1 %cond, label %true, label %ret64 65true:66 %b = and i64 %q, 1375821538984348876867 call void @g(i64 %b)68 br label %ret69 70ret:71 ret void72}73 74; CHECK: Function: f575; Collect constant i64 88994925642865 from %a = and i64 %p, 88994925642865 with cost 376define void @f5(i1 %cond, i64 %p, i64 %q) {77entry:78 %a = and i64 %p, 8899492564286579 call void @g(i64 %a)80 br i1 %cond, label %true, label %ret81 82true:83 %b = and i64 %q, 8899492564286584 call void @g(i64 %b)85 br label %ret86 87ret:88 ret void89}90 91; CHECK: Function: f692; Collect constant i64 -4688439692143754127 from %b = and i64 %q, -4688439692143754127 with cost 493define void @f6(i1 %cond, i64 %p, i64 %q) {94entry:95 %a = and i64 %p, 1375830438156579748996 call void @g(i64 %a)97 br i1 %cond, label %true, label %ret98 99true:100 %b = and i64 %q, 13758304381565797489101 call void @g(i64 %b)102 br label %ret103 104ret:105 ret void106}107