1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -inline -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i32 @noattr_callee(i32 %i) { 5*9880d681SAndroid Build Coastguard Worker ret i32 %i 6*9880d681SAndroid Build Coastguard Worker} 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine i32 @sanitize_address_callee(i32 %i) sanitize_address { 9*9880d681SAndroid Build Coastguard Worker ret i32 %i 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine i32 @sanitize_thread_callee(i32 %i) sanitize_thread { 13*9880d681SAndroid Build Coastguard Worker ret i32 %i 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i32 @sanitize_memory_callee(i32 %i) sanitize_memory { 17*9880d681SAndroid Build Coastguard Worker ret i32 %i 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i32 @safestack_callee(i32 %i) safestack { 21*9880d681SAndroid Build Coastguard Worker ret i32 %i 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_callee(i32 %i) alwaysinline { 25*9880d681SAndroid Build Coastguard Worker ret i32 %i 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_sanitize_address_callee(i32 %i) alwaysinline sanitize_address { 29*9880d681SAndroid Build Coastguard Worker ret i32 %i 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_sanitize_thread_callee(i32 %i) alwaysinline sanitize_thread { 33*9880d681SAndroid Build Coastguard Worker ret i32 %i 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_sanitize_memory_callee(i32 %i) alwaysinline sanitize_memory { 37*9880d681SAndroid Build Coastguard Worker ret i32 %i 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdefine i32 @alwaysinline_safestack_callee(i32 %i) alwaysinline safestack { 41*9880d681SAndroid Build Coastguard Worker ret i32 %i 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; Check that: 46*9880d681SAndroid Build Coastguard Worker; * noattr callee is inlined into noattr caller, 47*9880d681SAndroid Build Coastguard Worker; * sanitize_(address|memory|thread) callee is not inlined into noattr caller, 48*9880d681SAndroid Build Coastguard Worker; * alwaysinline callee is always inlined no matter what sanitize_* attributes are present. 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no_sanitize_address(i32 %arg) { 51*9880d681SAndroid Build Coastguard Worker %x1 = call i32 @noattr_callee(i32 %arg) 52*9880d681SAndroid Build Coastguard Worker %x2 = call i32 @sanitize_address_callee(i32 %x1) 53*9880d681SAndroid Build Coastguard Worker %x3 = call i32 @alwaysinline_callee(i32 %x2) 54*9880d681SAndroid Build Coastguard Worker %x4 = call i32 @alwaysinline_sanitize_address_callee(i32 %x3) 55*9880d681SAndroid Build Coastguard Worker ret i32 %x4 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_no_sanitize_address( 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @sanitize_address_callee 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no_sanitize_memory(i32 %arg) { 62*9880d681SAndroid Build Coastguard Worker %x1 = call i32 @noattr_callee(i32 %arg) 63*9880d681SAndroid Build Coastguard Worker %x2 = call i32 @sanitize_memory_callee(i32 %x1) 64*9880d681SAndroid Build Coastguard Worker %x3 = call i32 @alwaysinline_callee(i32 %x2) 65*9880d681SAndroid Build Coastguard Worker %x4 = call i32 @alwaysinline_sanitize_memory_callee(i32 %x3) 66*9880d681SAndroid Build Coastguard Worker ret i32 %x4 67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_no_sanitize_memory( 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @sanitize_memory_callee 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no_sanitize_thread(i32 %arg) { 73*9880d681SAndroid Build Coastguard Worker %x1 = call i32 @noattr_callee(i32 %arg) 74*9880d681SAndroid Build Coastguard Worker %x2 = call i32 @sanitize_thread_callee(i32 %x1) 75*9880d681SAndroid Build Coastguard Worker %x3 = call i32 @alwaysinline_callee(i32 %x2) 76*9880d681SAndroid Build Coastguard Worker %x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3) 77*9880d681SAndroid Build Coastguard Worker ret i32 %x4 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_no_sanitize_thread( 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @sanitize_thread_callee 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker; Check that: 85*9880d681SAndroid Build Coastguard Worker; * noattr callee is not inlined into sanitize_(address|memory|thread) caller, 86*9880d681SAndroid Build Coastguard Worker; * sanitize_(address|memory|thread) callee is inlined into the caller with the same attribute, 87*9880d681SAndroid Build Coastguard Worker; * alwaysinline callee is always inlined no matter what sanitize_* attributes are present. 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sanitize_address(i32 %arg) sanitize_address { 90*9880d681SAndroid Build Coastguard Worker %x1 = call i32 @noattr_callee(i32 %arg) 91*9880d681SAndroid Build Coastguard Worker %x2 = call i32 @sanitize_address_callee(i32 %x1) 92*9880d681SAndroid Build Coastguard Worker %x3 = call i32 @alwaysinline_callee(i32 %x2) 93*9880d681SAndroid Build Coastguard Worker %x4 = call i32 @alwaysinline_sanitize_address_callee(i32 %x3) 94*9880d681SAndroid Build Coastguard Worker ret i32 %x4 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_sanitize_address( 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sanitize_memory(i32 %arg) sanitize_memory { 101*9880d681SAndroid Build Coastguard Worker %x1 = call i32 @noattr_callee(i32 %arg) 102*9880d681SAndroid Build Coastguard Worker %x2 = call i32 @sanitize_memory_callee(i32 %x1) 103*9880d681SAndroid Build Coastguard Worker %x3 = call i32 @alwaysinline_callee(i32 %x2) 104*9880d681SAndroid Build Coastguard Worker %x4 = call i32 @alwaysinline_sanitize_memory_callee(i32 %x3) 105*9880d681SAndroid Build Coastguard Worker ret i32 %x4 106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_sanitize_memory( 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sanitize_thread(i32 %arg) sanitize_thread { 112*9880d681SAndroid Build Coastguard Worker %x1 = call i32 @noattr_callee(i32 %arg) 113*9880d681SAndroid Build Coastguard Worker %x2 = call i32 @sanitize_thread_callee(i32 %x1) 114*9880d681SAndroid Build Coastguard Worker %x3 = call i32 @alwaysinline_callee(i32 %x2) 115*9880d681SAndroid Build Coastguard Worker %x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3) 116*9880d681SAndroid Build Coastguard Worker ret i32 %x4 117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_sanitize_thread( 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerdefine i32 @test_safestack(i32 %arg) safestack { 123*9880d681SAndroid Build Coastguard Worker %x1 = call i32 @noattr_callee(i32 %arg) 124*9880d681SAndroid Build Coastguard Worker %x2 = call i32 @safestack_callee(i32 %x1) 125*9880d681SAndroid Build Coastguard Worker %x3 = call i32 @alwaysinline_callee(i32 %x2) 126*9880d681SAndroid Build Coastguard Worker %x4 = call i32 @alwaysinline_safestack_callee(i32 %x3) 127*9880d681SAndroid Build Coastguard Worker ret i32 %x4 128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_safestack( 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @noattr_callee 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Worker; Check that a function doesn't get inlined if target-cpu strings don't match 134*9880d681SAndroid Build Coastguard Worker; exactly. 135*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu_callee0(i32 %i) "target-cpu"="corei7" { 136*9880d681SAndroid Build Coastguard Worker ret i32 %i 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu0(i32 %i) "target-cpu"="corei7" { 140*9880d681SAndroid Build Coastguard Worker %1 = call i32 @test_target_cpu_callee0(i32 %i) 141*9880d681SAndroid Build Coastguard Worker ret i32 %1 142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_cpu0( 143*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: @test_target_cpu_callee0 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu_callee1(i32 %i) "target-cpu"="x86-64" { 147*9880d681SAndroid Build Coastguard Worker ret i32 %i 148*9880d681SAndroid Build Coastguard Worker} 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_cpu1(i32 %i) "target-cpu"="corei7" { 151*9880d681SAndroid Build Coastguard Worker %1 = call i32 @test_target_cpu_callee1(i32 %i) 152*9880d681SAndroid Build Coastguard Worker ret i32 %1 153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_cpu1( 154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @test_target_cpu_callee1 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker; Check that a function doesn't get inlined if target-features strings don't 159*9880d681SAndroid Build Coastguard Worker; match exactly. 160*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features_callee0(i32 %i) "target-features"="+sse4.2" { 161*9880d681SAndroid Build Coastguard Worker ret i32 %i 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features0(i32 %i) "target-features"="+sse4.2" { 165*9880d681SAndroid Build Coastguard Worker %1 = call i32 @test_target_features_callee0(i32 %i) 166*9880d681SAndroid Build Coastguard Worker ret i32 %1 167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_features0( 168*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: @test_target_features_callee0 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features_callee1(i32 %i) "target-features"="+avx2" { 172*9880d681SAndroid Build Coastguard Worker ret i32 %i 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine i32 @test_target_features1(i32 %i) "target-features"="+sse4.2" { 176*9880d681SAndroid Build Coastguard Worker %1 = call i32 @test_target_features_callee1(i32 %i) 177*9880d681SAndroid Build Coastguard Worker ret i32 %1 178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_target_features1( 179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: @test_target_features_callee1 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Workerdefine i32 @less-precise-fpmad_callee0(i32 %i) "less-precise-fpmad"="false" { 184*9880d681SAndroid Build Coastguard Worker ret i32 %i 185*9880d681SAndroid Build Coastguard Worker; CHECK: @less-precise-fpmad_callee0(i32 %i) [[FPMAD_FALSE:#[0-9]+]] { 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 187*9880d681SAndroid Build Coastguard Worker} 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine i32 @less-precise-fpmad_callee1(i32 %i) "less-precise-fpmad"="true" { 190*9880d681SAndroid Build Coastguard Worker ret i32 %i 191*9880d681SAndroid Build Coastguard Worker; CHECK: @less-precise-fpmad_callee1(i32 %i) [[FPMAD_TRUE:#[0-9]+]] { 192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad0(i32 %i) "less-precise-fpmad"="false" { 196*9880d681SAndroid Build Coastguard Worker %1 = call i32 @less-precise-fpmad_callee0(i32 %i) 197*9880d681SAndroid Build Coastguard Worker ret i32 %1 198*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad0(i32 %i) [[FPMAD_FALSE]] { 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad1(i32 %i) "less-precise-fpmad"="false" { 203*9880d681SAndroid Build Coastguard Worker %1 = call i32 @less-precise-fpmad_callee1(i32 %i) 204*9880d681SAndroid Build Coastguard Worker ret i32 %1 205*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad1(i32 %i) [[FPMAD_FALSE]] { 206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 207*9880d681SAndroid Build Coastguard Worker} 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad2(i32 %i) "less-precise-fpmad"="true" { 210*9880d681SAndroid Build Coastguard Worker %1 = call i32 @less-precise-fpmad_callee0(i32 %i) 211*9880d681SAndroid Build Coastguard Worker ret i32 %1 212*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad2(i32 %i) [[FPMAD_FALSE]] { 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 214*9880d681SAndroid Build Coastguard Worker} 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Workerdefine i32 @test_less-precise-fpmad3(i32 %i) "less-precise-fpmad"="true" { 217*9880d681SAndroid Build Coastguard Worker %1 = call i32 @less-precise-fpmad_callee1(i32 %i) 218*9880d681SAndroid Build Coastguard Worker ret i32 %1 219*9880d681SAndroid Build Coastguard Worker; CHECK: @test_less-precise-fpmad3(i32 %i) [[FPMAD_TRUE]] { 220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine i32 @no-implicit-float_callee0(i32 %i) { 224*9880d681SAndroid Build Coastguard Worker ret i32 %i 225*9880d681SAndroid Build Coastguard Worker; CHECK: @no-implicit-float_callee0(i32 %i) { 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Workerdefine i32 @no-implicit-float_callee1(i32 %i) noimplicitfloat { 230*9880d681SAndroid Build Coastguard Worker ret i32 %i 231*9880d681SAndroid Build Coastguard Worker; CHECK: @no-implicit-float_callee1(i32 %i) [[NOIMPLICITFLOAT:#[0-9]+]] { 232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 233*9880d681SAndroid Build Coastguard Worker} 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float0(i32 %i) { 236*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-implicit-float_callee0(i32 %i) 237*9880d681SAndroid Build Coastguard Worker ret i32 %1 238*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float0(i32 %i) { 239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 240*9880d681SAndroid Build Coastguard Worker} 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float1(i32 %i) { 243*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-implicit-float_callee1(i32 %i) 244*9880d681SAndroid Build Coastguard Worker ret i32 %1 245*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float1(i32 %i) [[NOIMPLICITFLOAT]] { 246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 247*9880d681SAndroid Build Coastguard Worker} 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float2(i32 %i) noimplicitfloat { 250*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-implicit-float_callee0(i32 %i) 251*9880d681SAndroid Build Coastguard Worker ret i32 %1 252*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float2(i32 %i) [[NOIMPLICITFLOAT]] { 253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 254*9880d681SAndroid Build Coastguard Worker} 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-implicit-float3(i32 %i) noimplicitfloat { 257*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-implicit-float_callee1(i32 %i) 258*9880d681SAndroid Build Coastguard Worker ret i32 %1 259*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-implicit-float3(i32 %i) [[NOIMPLICITFLOAT]] { 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 261*9880d681SAndroid Build Coastguard Worker} 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker; Check that no-jump-tables flag propagates from inlined callee to caller 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Workerdefine i32 @no-use-jump-tables_callee0(i32 %i) { 266*9880d681SAndroid Build Coastguard Worker ret i32 %i 267*9880d681SAndroid Build Coastguard Worker; CHECK: @no-use-jump-tables_callee0(i32 %i) { 268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 269*9880d681SAndroid Build Coastguard Worker} 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Workerdefine i32 @no-use-jump-tables_callee1(i32 %i) "no-jump-tables"="true" { 272*9880d681SAndroid Build Coastguard Worker ret i32 %i 273*9880d681SAndroid Build Coastguard Worker; CHECK: @no-use-jump-tables_callee1(i32 %i) [[NOUSEJUMPTABLES:#[0-9]+]] { 274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables0(i32 %i) { 278*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-use-jump-tables_callee0(i32 %i) 279*9880d681SAndroid Build Coastguard Worker ret i32 %1 280*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables0(i32 %i) { 281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 282*9880d681SAndroid Build Coastguard Worker} 283*9880d681SAndroid Build Coastguard Worker 284*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables1(i32 %i) { 285*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-use-jump-tables_callee1(i32 %i) 286*9880d681SAndroid Build Coastguard Worker ret i32 %1 287*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables1(i32 %i) [[NOUSEJUMPTABLES]] { 288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables2(i32 %i) "no-jump-tables"="true" { 292*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-use-jump-tables_callee0(i32 %i) 293*9880d681SAndroid Build Coastguard Worker ret i32 %1 294*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables2(i32 %i) [[NOUSEJUMPTABLES]] { 295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 296*9880d681SAndroid Build Coastguard Worker} 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Workerdefine i32 @test_no-use-jump-tables3(i32 %i) "no-jump-tables"="true" { 299*9880d681SAndroid Build Coastguard Worker %1 = call i32 @no-use-jump-tables_callee1(i32 %i) 300*9880d681SAndroid Build Coastguard Worker ret i32 %1 301*9880d681SAndroid Build Coastguard Worker; CHECK: @test_no-use-jump-tables3(i32 %i) [[NOUSEJUMPTABLES]] { 302*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[FPMAD_FALSE]] = { "less-precise-fpmad"="false" } 306*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[FPMAD_TRUE]] = { "less-precise-fpmad"="true" } 307*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[NOIMPLICITFLOAT]] = { noimplicitfloat } 308*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[NOUSEJUMPTABLES]] = { "no-jump-tables"="true" }