202 lines · plain
1; REQUIRES: asserts2; RUN: opt -passes=inline -mtriple=x86_64-unknown-unknown -S -debug-only=inline-cost < %s 2>&1 | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-unknown"6 7define i32 @outer1(ptr %ptr, i32 %i) {8 %C = call i32 @inner1(ptr %ptr, i32 %i)9 ret i32 %C10}11 12; zext from i32 to i64 is free.13; CHECK: Analyzing call of inner114; CHECK: NumInstructionsSimplified: 315; CHECK: NumInstructions: 416define i32 @inner1(ptr %ptr, i32 %i) {17 %E = zext i32 %i to i6418 %G = getelementptr inbounds i32, ptr %ptr, i64 %E19 %L = load i32, ptr %G20 ret i32 %L21}22 23define i16 @outer2(ptr %ptr) {24 %C = call i16 @inner2(ptr %ptr)25 ret i16 %C26}27 28; It is an ExtLoad.29; CHECK: Analyzing call of inner230; CHECK: NumInstructionsSimplified: 231; CHECK: NumInstructions: 332define i16 @inner2(ptr %ptr) {33 %L = load i8, ptr %ptr34 %E = zext i8 %L to i1635 ret i16 %E36}37 38define i16 @outer3(ptr %ptr) {39 %C = call i16 @inner3(ptr %ptr)40 ret i16 %C41}42 43; It is an ExtLoad.44; CHECK: Analyzing call of inner345; CHECK: NumInstructionsSimplified: 246; CHECK: NumInstructions: 347define i16 @inner3(ptr %ptr) {48 %L = load i8, ptr %ptr49 %E = sext i8 %L to i1650 ret i16 %E51}52 53define i32 @outer4(ptr %ptr) {54 %C = call i32 @inner4(ptr %ptr)55 ret i32 %C56}57 58; It is an ExtLoad.59; CHECK: Analyzing call of inner460; CHECK: NumInstructionsSimplified: 261; CHECK: NumInstructions: 362define i32 @inner4(ptr %ptr) {63 %L = load i8, ptr %ptr64 %E = zext i8 %L to i3265 ret i32 %E66}67 68define i32 @outer5(ptr %ptr) {69 %C = call i32 @inner5(ptr %ptr)70 ret i32 %C71}72 73; It is an ExtLoad.74; CHECK: Analyzing call of inner575; CHECK: NumInstructionsSimplified: 276; CHECK: NumInstructions: 377define i32 @inner5(ptr %ptr) {78 %L = load i8, ptr %ptr79 %E = sext i8 %L to i3280 ret i32 %E81}82 83define i32 @outer6(ptr %ptr) {84 %C = call i32 @inner6(ptr %ptr)85 ret i32 %C86}87 88; It is an ExtLoad.89; CHECK: Analyzing call of inner690; CHECK: NumInstructionsSimplified: 291; CHECK: NumInstructions: 392define i32 @inner6(ptr %ptr) {93 %L = load i16, ptr %ptr94 %E = zext i16 %L to i3295 ret i32 %E96}97 98define i32 @outer7(ptr %ptr) {99 %C = call i32 @inner7(ptr %ptr)100 ret i32 %C101}102 103; It is an ExtLoad.104; CHECK: Analyzing call of inner7105; CHECK: NumInstructionsSimplified: 2106; CHECK: NumInstructions: 3107define i32 @inner7(ptr %ptr) {108 %L = load i16, ptr %ptr109 %E = sext i16 %L to i32110 ret i32 %E111}112 113define i64 @outer8(ptr %ptr) {114 %C = call i64 @inner8(ptr %ptr)115 ret i64 %C116}117 118; It is an ExtLoad.119; CHECK: Analyzing call of inner8120; CHECK: NumInstructionsSimplified: 2121; CHECK: NumInstructions: 3122define i64 @inner8(ptr %ptr) {123 %L = load i8, ptr %ptr124 %E = zext i8 %L to i64125 ret i64 %E126}127 128define i64 @outer9(ptr %ptr) {129 %C = call i64 @inner9(ptr %ptr)130 ret i64 %C131}132 133; It is an ExtLoad.134; CHECK: Analyzing call of inner9135; CHECK: NumInstructionsSimplified: 2136; CHECK: NumInstructions: 3137define i64 @inner9(ptr %ptr) {138 %L = load i8, ptr %ptr139 %E = sext i8 %L to i64140 ret i64 %E141}142 143define i64 @outer10(ptr %ptr) {144 %C = call i64 @inner10(ptr %ptr)145 ret i64 %C146}147 148; It is an ExtLoad.149; CHECK: Analyzing call of inner10150; CHECK: NumInstructionsSimplified: 2151; CHECK: NumInstructions: 3152define i64 @inner10(ptr %ptr) {153 %L = load i16, ptr %ptr154 %E = zext i16 %L to i64155 ret i64 %E156}157 158define i64 @outer11(ptr %ptr) {159 %C = call i64 @inner11(ptr %ptr)160 ret i64 %C161}162 163; It is an ExtLoad.164; CHECK: Analyzing call of inner11165; CHECK: NumInstructionsSimplified: 2166; CHECK: NumInstructions: 3167define i64 @inner11(ptr %ptr) {168 %L = load i16, ptr %ptr169 %E = sext i16 %L to i64170 ret i64 %E171}172 173define i64 @outer12(ptr %ptr) {174 %C = call i64 @inner12(ptr %ptr)175 ret i64 %C176}177 178; It is an ExtLoad.179; CHECK: Analyzing call of inner12180; CHECK: NumInstructionsSimplified: 2181; CHECK: NumInstructions: 3182define i64 @inner12(ptr %ptr) {183 %L = load i32, ptr %ptr184 %E = zext i32 %L to i64185 ret i64 %E186}187 188define i64 @outer13(ptr %ptr) {189 %C = call i64 @inner13(ptr %ptr)190 ret i64 %C191}192 193; It is an ExtLoad.194; CHECK: Analyzing call of inner13195; CHECK: NumInstructionsSimplified: 2196; CHECK: NumInstructions: 3197define i64 @inner13(ptr %ptr) {198 %L = load i32, ptr %ptr199 %E = sext i32 %L to i64200 ret i64 %E201}202