brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 3a5a748 Raw
250 lines · plain
1; REQUIRES: asserts2; RUN: opt -passes=inline -mtriple=aarch64--linux-gnu -S -debug-only=inline-cost < %s 2>&1 | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5target triple = "aarch64--linux-gnu"6 7define i32 @outer1(ptr %ptr, i32 %i) {8  %C = call i32 @inner1(ptr %ptr, i32 %i)9  ret i32 %C10}11 12; sext can be folded into gep.13; CHECK: Analyzing call of inner114; CHECK: NumInstructionsSimplified: 315; CHECK: NumInstructions: 416define i32 @inner1(ptr %ptr, i32 %i) {17  %E = sext i32 %i to i6418  %G = getelementptr inbounds i32, ptr %ptr, i64 %E19  %L = load i32, ptr %G20  ret i32 %L21}22 23define i32 @outer2(ptr %ptr, i32 %i) {24  %C = call i32 @inner2(ptr %ptr, i32 %i)25  ret i32 %C26}27 28; zext from i32 to i64 is free.29; CHECK: Analyzing call of inner230; CHECK: NumInstructionsSimplified: 331; CHECK: NumInstructions: 432define i32 @inner2(ptr %ptr, i32 %i) {33  %E = zext i32 %i to i6434  %G = getelementptr inbounds i32, ptr %ptr, i64 %E35  %L = load i32, ptr %G36  ret i32 %L37}38 39define i32 @outer3(ptr %ptr, i16 %i) {40  %C = call i32 @inner3(ptr %ptr, i16 %i)41  ret i32 %C42}43 44; zext can be folded into gep.45; CHECK: Analyzing call of inner346; CHECK: NumInstructionsSimplified: 347; CHECK: NumInstructions: 448define i32 @inner3(ptr %ptr, i16 %i) {49  %E = zext i16 %i to i6450  %G = getelementptr inbounds i32, ptr %ptr, i64 %E51  %L = load i32, ptr %G52  ret i32 %L53}54 55define i16 @outer4(ptr %ptr) {56  %C = call i16 @inner4(ptr %ptr)57  ret i16 %C58}59 60; It is an ExtLoad.61; CHECK: Analyzing call of inner462; CHECK: NumInstructionsSimplified: 263; CHECK: NumInstructions: 364define i16 @inner4(ptr %ptr) {65  %L = load i8, ptr %ptr66  %E = zext i8 %L to i1667  ret i16 %E68}69 70define i16 @outer5(ptr %ptr) {71  %C = call i16 @inner5(ptr %ptr)72  ret i16 %C73}74 75; It is an ExtLoad.76; CHECK: Analyzing call of inner577; CHECK: NumInstructionsSimplified: 278; CHECK: NumInstructions: 379define i16 @inner5(ptr %ptr) {80  %L = load i8, ptr %ptr81  %E = sext i8 %L to i1682  ret i16 %E83}84 85define i32 @outer6(ptr %ptr) {86  %C = call i32 @inner6(ptr %ptr)87  ret i32 %C88}89 90; It is an ExtLoad.91; CHECK: Analyzing call of inner692; CHECK: NumInstructionsSimplified: 293; CHECK: NumInstructions: 394define i32 @inner6(ptr %ptr) {95  %L = load i8, ptr %ptr96  %E = zext i8 %L to i3297  ret i32 %E98}99 100define i32 @outer7(ptr %ptr) {101  %C = call i32 @inner7(ptr %ptr)102  ret i32 %C103}104 105; It is an ExtLoad.106; CHECK: Analyzing call of inner7107; CHECK: NumInstructionsSimplified: 2108; CHECK: NumInstructions: 3109define i32 @inner7(ptr %ptr) {110  %L = load i8, ptr %ptr111  %E = sext i8 %L to i32112  ret i32 %E113}114 115define i32 @outer8(ptr %ptr) {116  %C = call i32 @inner8(ptr %ptr)117  ret i32 %C118}119 120; It is an ExtLoad.121; CHECK: Analyzing call of inner8122; CHECK: NumInstructionsSimplified: 2123; CHECK: NumInstructions: 3124define i32 @inner8(ptr %ptr) {125  %L = load i16, ptr %ptr126  %E = zext i16 %L to i32127  ret i32 %E128}129 130define i32 @outer9(ptr %ptr) {131  %C = call i32 @inner9(ptr %ptr)132  ret i32 %C133}134 135; It is an ExtLoad.136; CHECK: Analyzing call of inner9137; CHECK: NumInstructionsSimplified: 2138; CHECK: NumInstructions: 3139define i32 @inner9(ptr %ptr) {140  %L = load i16, ptr %ptr141  %E = sext i16 %L to i32142  ret i32 %E143}144 145define i64 @outer10(ptr %ptr) {146  %C = call i64 @inner10(ptr %ptr)147  ret i64 %C148}149 150; It is an ExtLoad.151; CHECK: Analyzing call of inner10152; CHECK: NumInstructionsSimplified: 2153; CHECK: NumInstructions: 3154define i64 @inner10(ptr %ptr) {155  %L = load i8, ptr %ptr156  %E = zext i8 %L to i64157  ret i64 %E158}159 160define i64 @outer11(ptr %ptr) {161  %C = call i64 @inner11(ptr %ptr)162  ret i64 %C163}164 165; It is an ExtLoad.166; CHECK: Analyzing call of inner11167; CHECK: NumInstructionsSimplified: 2168; CHECK: NumInstructions: 3169define i64 @inner11(ptr %ptr) {170  %L = load i8, ptr %ptr171  %E = sext i8 %L to i64172  ret i64 %E173}174 175define i64 @outer12(ptr %ptr) {176  %C = call i64 @inner12(ptr %ptr)177  ret i64 %C178}179 180; It is an ExtLoad.181; CHECK: Analyzing call of inner12182; CHECK: NumInstructionsSimplified: 2183; CHECK: NumInstructions: 3184define i64 @inner12(ptr %ptr) {185  %L = load i16, ptr %ptr186  %E = zext i16 %L to i64187  ret i64 %E188}189 190define i64 @outer13(ptr %ptr) {191  %C = call i64 @inner13(ptr %ptr)192  ret i64 %C193}194 195; It is an ExtLoad.196; CHECK: Analyzing call of inner13197; CHECK: NumInstructionsSimplified: 2198; CHECK: NumInstructions: 3199define i64 @inner13(ptr %ptr) {200  %L = load i16, ptr %ptr201  %E = sext i16 %L to i64202  ret i64 %E203}204 205define i64 @outer14(ptr %ptr) {206  %C = call i64 @inner14(ptr %ptr)207  ret i64 %C208}209 210; It is an ExtLoad.211; CHECK: Analyzing call of inner14212; CHECK: NumInstructionsSimplified: 2213; CHECK: NumInstructions: 3214define i64 @inner14(ptr %ptr) {215  %L = load i32, ptr %ptr216  %E = zext i32 %L to i64217  ret i64 %E218}219 220define i64 @outer15(ptr %ptr) {221  %C = call i64 @inner15(ptr %ptr)222  ret i64 %C223}224 225; It is an ExtLoad.226; CHECK: Analyzing call of inner15227; CHECK: NumInstructionsSimplified: 2228; CHECK: NumInstructions: 3229define i64 @inner15(ptr %ptr) {230  %L = load i32, ptr %ptr231  %E = sext i32 %L to i64232  ret i64 %E233}234 235define i64 @outer16(i32 %V1, i64 %V2) {236  %C = call i64 @inner16(i32 %V1, i64 %V2)237  ret i64 %C238}239 240; sext can be folded into shl.241; CHECK: Analyzing call of inner16242; CHECK: NumInstructionsSimplified: 2243; CHECK: NumInstructions: 4244define i64 @inner16(i32 %V1, i64 %V2) {245  %E = sext i32 %V1 to i64246  %S = shl i64 %E, 3247  %A = add i64 %V2, %S248  ret i64 %A249}250