brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 3b066ef Raw
202 lines · plain
1; RUN: opt -passes=inline < %s -S -o - -inline-threshold=3  | FileCheck %s2 3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"4target triple = "x86_64-unknown-linux-gnu"5 6declare void @pad() readnone7 8define void @outer1(ptr %a) {9; CHECK-LABEL: @outer1(10; CHECK-NOT: call void @inner111  %b = alloca i3212  call void @inner1(ptr %a, ptr %b)13  ret void14}15 16define void @inner1(ptr %a, ptr %b) {17  %1 = load i32, ptr %a18  store i32 %1, ptr %b ; This store does not clobber the first load.19  %2 = load i32, ptr %a20  call void @pad()21  %3 = load i32, ptr %a22  ret void23}24 25 26define void @outer2(ptr %a, ptr %b) {27; CHECK-LABEL: @outer2(28; CHECK: call void @inner229  call void @inner2(ptr %a, ptr %b)30  ret void31}32 33define void @inner2(ptr %a, ptr %b) {34  %1 = load i32, ptr %a35  store i32 %1, ptr %b ; This store clobbers the first load.36  %2 = load i32, ptr %a37  call void @pad()38  ret void39}40 41 42define void @outer3(ptr %a) {43; CHECK-LABEL: @outer3(44; CHECK: call void @inner345  call void @inner3(ptr %a)46  ret void47}48 49declare void @ext()50 51define void @inner3(ptr %a) {52  %1 = load i32, ptr %a53  call void @ext() ; This call clobbers the first load.54  %2 = load i32, ptr %a55  ret void56}57 58 59define void @outer4(ptr %a, ptr %b, ptr %c) {60; CHECK-LABEL: @outer4(61; CHECK-NOT: call void @inner462  call void @inner4(ptr %a, ptr %b, i1 false)63  ret void64}65 66define void @inner4(ptr %a, ptr %b, i1 %pred) {67  %1 = load i32, ptr %a68  br i1 %pred, label %cond_true, label %cond_false69 70cond_true:71  store i32 %1, ptr %b ; This store does not clobber the first load.72  br label %cond_false73 74cond_false:75  %2 = load i32, ptr %a76  call void @pad()77  %3 = load i32, ptr %a78  %4 = load i32, ptr %a79  ret void80}81 82 83define void @outer5(ptr %a, double %b) {84; CHECK-LABEL: @outer5(85; CHECK-NOT: call void @inner586  call void @inner5(ptr %a, double %b)87  ret void88}89 90declare double @llvm.fabs.f64(double) nounwind readnone91 92define void @inner5(ptr %a, double %b) {93  %1 = load i32, ptr %a94  %2 = call double @llvm.fabs.f64(double %b) ; This intrinsic does not clobber the first load.95  %3 = load i32, ptr %a96  call void @pad()97  ret void98}99 100define void @outer6(ptr %a, ptr %ptr) {101; CHECK-LABEL: @outer6(102; CHECK-NOT: call void @inner6103  call void @inner6(ptr %a, ptr %ptr)104  ret void105}106 107define void @inner6(ptr %a, ptr %ptr) {108  %1 = load i32, ptr %a109  %2 = load i32, ptr %a110  call void @pad()111  %3 = load i32, ptr %a112  ret void113}114 115define void @outer7(ptr %a) {116; CHECK-LABEL: @outer7(117; CHECK-NOT: call void @inner7118  call void @inner7(ptr %a)119  ret void120}121 122declare void @ext2() readnone123 124define void @inner7(ptr %a) {125  %1 = load i32, ptr %a126  call void @ext2() ; This call does not clobber the first load.127  %2 = load i32, ptr %a128  ret void129}130 131 132define void @outer8(ptr %a) {133; CHECK-LABEL: @outer8(134; CHECK-NOT: call void @inner8135  call void @inner8(ptr %a, ptr @ext2)136  ret void137}138 139define void @inner8(ptr %a, ptr %f) {140  %1 = load i32, ptr %a141  call void %f() ; This indirect call does not clobber the first load.142  %2 = load i32, ptr %a143  call void @pad()144  call void @pad()145  call void @pad()146  call void @pad()147  call void @pad()148  call void @pad()149  call void @pad()150  call void @pad()151  call void @pad()152  call void @pad()153  call void @pad()154  call void @pad()155  ret void156}157 158 159define void @outer9(ptr %a) {160; CHECK-LABEL: @outer9(161; CHECK: call void @inner9162  call void @inner9(ptr %a, ptr @ext)163  ret void164}165 166define void @inner9(ptr %a, ptr %f) {167  %1 = load i32, ptr %a168  call void %f() ; This indirect call clobbers the first load.169  %2 = load i32, ptr %a170  call void @pad()171  call void @pad()172  call void @pad()173  call void @pad()174  call void @pad()175  call void @pad()176  call void @pad()177  call void @pad()178  call void @pad()179  call void @pad()180  call void @pad()181  call void @pad()182  ret void183}184 185 186define void @outer10(ptr %a) {187; CHECK-LABEL: @outer10(188; CHECK: call void @inner10189  %b = alloca i32190  call void @inner10(ptr %a, ptr %b)191  ret void192}193 194define void @inner10(ptr %a, ptr %b) {195  %1 = load i32, ptr %a196  store i32 %1, ptr %b197  %2 = load volatile i32, ptr %a ; volatile load should be kept.198  call void @pad()199  %3 = load volatile i32, ptr %a ; Same as the above.200  ret void201}202