1; RUN: llvm-as < %s | llvm-dis | FileCheck %s 2; RUN: verify-uselistorder < %s 3; PR12696 4 5define void @f1(i8 zeroext %0) 6; CHECK: define void @f1(i8 zeroext %0) 7{ 8 ret void; 9} 10 11define void @f2(i8 signext %0) 12; CHECK: define void @f2(i8 signext %0) 13{ 14 ret void; 15} 16 17define void @f3() noreturn 18; CHECK: define void @f3() #0 19{ 20 ret void; 21} 22 23define void @f4(i8 inreg %0) 24; CHECK: define void @f4(i8 inreg %0) 25{ 26 ret void; 27} 28 29define void @f5(ptr sret(i8) %0) 30; CHECK: define void @f5(ptr sret(i8) %0) 31{ 32 ret void; 33} 34 35define void @f6() nounwind 36; CHECK: define void @f6() #1 37{ 38 ret void; 39} 40 41define void @f7(ptr noalias %0) 42; CHECK: define void @f7(ptr noalias %0) 43{ 44 ret void; 45} 46 47define void @f8(ptr byval(i8) %0) 48; CHECK: define void @f8(ptr byval(i8) %0) 49{ 50 ret void; 51} 52 53define void @f9(ptr nest %0) 54; CHECK: define void @f9(ptr nest %0) 55{ 56 ret void; 57} 58 59define void @f10() readnone 60; CHECK: define void @f10() #2 61{ 62 ret void; 63} 64 65define void @f11() readonly 66; CHECK: define void @f11() #3 67{ 68 ret void; 69} 70 71define void @f12() noinline 72; CHECK: define void @f12() #4 73{ 74 ret void; 75} 76 77define void @f13() alwaysinline 78; CHECK: define void @f13() #5 79{ 80 ret void; 81} 82 83define void @f14() optsize 84; CHECK: define void @f14() #6 85{ 86 ret void; 87} 88 89define void @f15() ssp 90; CHECK: define void @f15() #7 91{ 92 ret void; 93} 94 95define void @f16() sspreq 96; CHECK: define void @f16() #8 97{ 98 ret void; 99} 100 101define void @f17(ptr align 4 %0) 102; CHECK: define void @f17(ptr align 4 %0) 103{ 104 ret void; 105} 106 107define void @f18(ptr nocapture %0) 108; CHECK: define void @f18(ptr captures(none) %0) 109{ 110 ret void; 111} 112 113define void @f19() noredzone 114; CHECK: define void @f19() #9 115{ 116 ret void; 117} 118 119define void @f20() noimplicitfloat 120; CHECK: define void @f20() #10 121{ 122 ret void; 123} 124 125define void @f21() naked 126; CHECK: define void @f21() #11 127{ 128 ret void; 129} 130 131define void @f22() inlinehint 132; CHECK: define void @f22() #12 133{ 134 ret void; 135} 136 137define void @f23() alignstack(4) 138; CHECK: define void @f23() #13 139{ 140 ret void; 141} 142 143define void @f24() returns_twice 144; CHECK: define void @f24() #14 145{ 146 ret void; 147} 148 149define void @f25() uwtable 150; CHECK: define void @f25() #15 151{ 152 ret void; 153} 154 155define void @f26() nonlazybind 156; CHECK: define void @f26() #16 157{ 158 ret void; 159} 160 161define void @f27() sanitize_address 162; CHECK: define void @f27() #17 163{ 164 ret void; 165} 166define void @f28() sanitize_thread 167; CHECK: define void @f28() #18 168{ 169 ret void; 170} 171define void @f29() sanitize_memory 172; CHECK: define void @f29() #19 173{ 174 ret void; 175} 176 177define void @f30() "cpu"="cortex-a8" 178; CHECK: define void @f30() #20 179{ 180 ret void; 181} 182 183define i8 @f31(i8 returned %A) 184; CHECK: define i8 @f31(i8 returned %A) 185{ 186 ret i8 %A; 187} 188 189define void @f32() sspstrong 190; CHECK: define void @f32() #21 191{ 192 ret void; 193} 194 195define void @f33() minsize 196; CHECK: define void @f33() #22 197{ 198 ret void; 199} 200 201declare void @nobuiltin() 202 203define void @f34() 204; CHECK: define void @f34() 205{ 206 call void @nobuiltin() nobuiltin 207; CHECK: call void @nobuiltin() #[[NOBUILTIN:[0-9]+]] 208 ret void; 209} 210 211define void @f35() optnone noinline 212; CHECK: define void @f35() #23 213{ 214 ret void; 215} 216 217define void @f36(ptr inalloca(i8) %0) { 218; CHECK: define void @f36(ptr inalloca(i8) %0) { 219 ret void 220} 221 222define nonnull ptr @f37(ptr nonnull %a) { 223; CHECK: define nonnull ptr @f37(ptr nonnull %a) { 224 ret ptr %a 225} 226 227define void @f38() unnamed_addr jumptable { 228; CHECK: define void @f38() unnamed_addr #24 229 call void @f36() 230 unreachable 231} 232 233define dereferenceable(2) ptr @f39(ptr dereferenceable(1) %a) { 234; CHECK: define dereferenceable(2) ptr @f39(ptr dereferenceable(1) %a) { 235 ret ptr %a 236} 237 238define dereferenceable(18446744073709551606) ptr @f40(ptr dereferenceable(18446744073709551615) %a) { 239; CHECK: define dereferenceable(18446744073709551606) ptr @f40(ptr dereferenceable(18446744073709551615) %a) { 240 ret ptr %a 241} 242 243define void @f41(ptr align 32 %0, ptr align 64 %1) { 244; CHECK: define void @f41(ptr align 32 %0, ptr align 64 %1) { 245 ret void 246} 247 248; CHECK: define dereferenceable_or_null(8) ptr @f42(ptr dereferenceable_or_null(8) %foo) 249define dereferenceable_or_null(8) ptr @f42(ptr dereferenceable_or_null(8) %foo) { 250 entry: 251 ret ptr %foo 252} 253 254; CHECK: define void @f43() #25 255define void @f43() convergent { 256 ret void 257} 258 259define void @f44() argmemonly 260; CHECK: define void @f44() #26 261{ 262 ret void; 263} 264 265; CHECK: define "string_attribute" void @f45(i32 "string_attribute" %0) 266define "string_attribute" void @f45(i32 "string_attribute" %0) { 267 ret void 268} 269 270; CHECK: define "string_attribute_with_value"="value" void @f46(i32 "string_attribute_with_value"="value" %0) 271define "string_attribute_with_value"="value" void @f46(i32 "string_attribute_with_value"="value" %0) { 272 ret void 273} 274 275; CHECK: define void @f47() #27 276define void @f47() norecurse { 277 ret void 278} 279 280; CHECK: define void @f48() #28 281define void @f48() inaccessiblememonly { 282 ret void 283} 284 285; CHECK: define void @f49() #29 286define void @f49() inaccessiblemem_or_argmemonly { 287 ret void 288} 289; CHECK: define void @f50(ptr swiftself %0) 290define void @f50(ptr swiftself %0) 291{ 292 ret void; 293} 294 295; CHECK: define i32 @f51(ptr swifterror %0) 296define i32 @f51(ptr swifterror %0) 297{ 298 ret i32 0 299} 300 301; CHECK: define i32 @f52(i32 %0, ptr swifterror %1) 302define i32 @f52(i32 %0, ptr swifterror %1) 303{ 304 ret i32 0 305} 306 307%swift_error = type {i64, i8} 308declare float @foo(ptr swifterror %error_ptr_ref) 309 310; CHECK: define float @f53 311; CHECK: alloca swifterror 312define float @f53(ptr %error_ref) { 313entry: 314 %error_ptr_ref = alloca swifterror ptr 315 store ptr null, ptr %error_ptr_ref 316 %call = call float @foo(ptr swifterror %error_ptr_ref) 317 ret float 1.0 318} 319 320; CHECK: define ptr @f54(i32 %0) #30 321define ptr @f54(i32 %0) allocsize(0) { 322 ret ptr null 323} 324 325; CHECK: define ptr @f55(i32 %0, i32 %1) #31 326define ptr @f55(i32 %0, i32 %1) allocsize(0, 1) { 327 ret ptr null 328} 329 330; CHECK: define void @f56() #32 331define void @f56() writeonly 332{ 333 ret void 334} 335 336; CHECK: define void @f57() #33 337define void @f57() speculatable { 338 ret void 339} 340 341; CHECK: define void @f58() #34 342define void @f58() sanitize_hwaddress 343{ 344 ret void; 345} 346 347; CHECK: define void @f59() #35 348define void @f59() shadowcallstack 349{ 350 ret void 351} 352 353; CHECK: define void @f60() #36 354define void @f60() willreturn 355{ 356 ret void 357} 358 359; CHECK: define void @f61() #37 360define void @f61() nofree { 361 ret void 362} 363 364; CHECK: define void @f62() #38 365define void @f62() nosync 366{ 367 ret void 368} 369 370; CHECK: define void @f63() #39 371define void @f63() sanitize_memtag 372{ 373 ret void 374} 375 376; CHECK: define void @f64(ptr preallocated(i32) %a) 377define void @f64(ptr preallocated(i32) %a) 378{ 379 ret void 380} 381 382; CHECK: define void @f65() #40 383define void @f65() null_pointer_is_valid 384{ 385 ret void; 386} 387 388; CHECK: define noundef i32 @f66(i32 noundef %a) 389define noundef i32 @f66(i32 noundef %a) 390{ 391 ret i32 %a 392} 393 394; CHECK: define void @f67(ptr byref(i32) %a) 395define void @f67(ptr byref(i32) %a) 396{ 397 ret void 398} 399 400; CHECK: define void @f68() #41 401define void @f68() mustprogress 402{ 403 ret void 404} 405 406; CHECK: define void @f69() #42 407define void @f69() nocallback 408{ 409 ret void 410} 411 412; CHECK: define void @f70() #43 413define void @f70() cold 414{ 415 ret void 416} 417 418; CHECK: define void @f71() #44 419define void @f71() hot 420{ 421 ret void 422} 423 424; CHECK: define void @f72() #45 425define void @f72() vscale_range(8) 426{ 427 ret void 428} 429 430; CHECK: define void @f73() #46 431define void @f73() vscale_range(1,8) 432{ 433 ret void 434} 435 436; CHECK: define void @f74() #47 437define void @f74() vscale_range(1,0) 438{ 439 ret void 440} 441 442; CHECK: define void @f76(ptr swiftasync %0) 443define void @f76(ptr swiftasync %0) 444{ 445 ret void; 446} 447 448; CHECK: define void @f77() #48 449define void @f77() nosanitize_coverage 450{ 451 ret void; 452} 453 454; CHECK: define void @f78() #49 455define void @f78() noprofile 456{ 457 ret void; 458} 459 460declare void @llvm.some.intrinsic(ptr) 461define void @f79() { 462; CHECK: call void @llvm.some.intrinsic(ptr elementtype(i32) null) 463 call void @llvm.some.intrinsic(ptr elementtype(i32) null) 464 ret void 465} 466 467; CHECK: define void @f80() #50 468define void @f80() disable_sanitizer_instrumentation 469{ 470 ret void; 471} 472 473define void @f81(ptr sret(ptr) %0) 474; CHECK: define void @f81(ptr sret(ptr) %0) 475{ 476 ret void; 477} 478 479define void @f82(ptr %0) 480; CHECK: define void @f82(ptr %0) 481{ 482; CHECK: call void @llvm.some.intrinsic(ptr sret(i32) %0) 483 call void @llvm.some.intrinsic(ptr sret(i32) %0) 484 ret void; 485} 486 487; CHECK: define void @f83(<4 x ptr> align 32 %0, <vscale x 1 x ptr> align 64 %1) 488define void @f83(<4 x ptr> align 32 %0, <vscale x 1 x ptr> align 64 %1) { 489 ret void 490} 491 492; CHECK: define void @f84() #51 493define void @f84() uwtable(sync) { 494 ret void; 495} 496 497; CHECK: define void @f85() #15 498define void @f85() uwtable(async) { 499 ret void; 500} 501 502; CHECK: define void @f86() #52 503define void @f86() nosanitize_bounds 504{ 505 ret void; 506} 507 508; CHECK: define void @f92() #53 509define void @f92() sanitize_realtime 510{ 511 ret void; 512} 513 514; CHECK: define void @f93() #54 515define void @f93() sanitize_realtime_blocking { 516 ret void; 517} 518 519; CHECK: define void @f87() [[FNRETTHUNKEXTERN:#[0-9]+]] 520define void @f87() fn_ret_thunk_extern { ret void } 521 522; CHECK: define void @f88() [[SKIPPROFILE:#[0-9]+]] 523define void @f88() skipprofile { ret void } 524 525; CHECK: define void @f89() [[OPTDEBUG:#[0-9]+]] 526define void @f89() optdebug { 527 ret void; 528} 529 530; CHECK: define void @f90(ptr writable %p) 531define void @f90(ptr writable %p) { 532 ret void 533} 534 535; CHECK: define void @f91(ptr dead_on_unwind %p) 536define void @f91(ptr dead_on_unwind %p) { 537 ret void 538} 539 540; CHECK: define void @f94() [[NODIVERGENCESOURCE:#[0-9]+]] 541define void @f94() nodivergencesource { 542 ret void; 543} 544 545; CHECK: define range(i32 -1, 42) i32 @range_attribute(<4 x i32> range(i32 -1, 42) %a) 546define range(i32 -1, 42) i32 @range_attribute(<4 x i32> range(i32 -1, 42) %a) { 547 ret i32 0 548} 549 550; CHECK: define range(i32 0, 0) i32 @range_attribute_same_range_other_bitwidth(i8 range(i8 0, 42) %a) 551define range(i32 0, 0) i32 @range_attribute_same_range_other_bitwidth(i8 range(i8 0, 42) %a) { 552 ret i32 0 553} 554 555; CHECK: define void @wide_range_attribute(i128 range(i128 618970019642690137449562111, 618970019642690137449562114) %a) 556define void @wide_range_attribute(i128 range(i128 618970019642690137449562111, 618970019642690137449562114) %a) { 557 ret void 558} 559 560; CHECK: define void @initializes(ptr initializes((-4, 0), (4, 8)) %a) 561define void @initializes(ptr initializes((-4, 0), (4, 8)) %a) { 562 ret void 563} 564 565; CHECK: define void @captures(ptr captures(address) %p) 566define void @captures(ptr captures(address) %p) { 567 ret void 568} 569 570; CHECK: attributes #0 = { noreturn } 571; CHECK: attributes #1 = { nounwind } 572; CHECK: attributes #2 = { memory(none) } 573; CHECK: attributes #3 = { memory(read) } 574; CHECK: attributes #4 = { noinline } 575; CHECK: attributes #5 = { alwaysinline } 576; CHECK: attributes #6 = { optsize } 577; CHECK: attributes #7 = { ssp } 578; CHECK: attributes #8 = { sspreq } 579; CHECK: attributes #9 = { noredzone } 580; CHECK: attributes #10 = { noimplicitfloat } 581; CHECK: attributes #11 = { naked } 582; CHECK: attributes #12 = { inlinehint } 583; CHECK: attributes #13 = { alignstack=4 } 584; CHECK: attributes #14 = { returns_twice } 585; CHECK: attributes #15 = { uwtable } 586; CHECK: attributes #16 = { nonlazybind } 587; CHECK: attributes #17 = { sanitize_address } 588; CHECK: attributes #18 = { sanitize_thread } 589; CHECK: attributes #19 = { sanitize_memory } 590; CHECK: attributes #20 = { "cpu"="cortex-a8" } 591; CHECK: attributes #21 = { sspstrong } 592; CHECK: attributes #22 = { minsize } 593; CHECK: attributes #23 = { noinline optnone } 594; CHECK: attributes #24 = { jumptable } 595; CHECK: attributes #25 = { convergent } 596; CHECK: attributes #26 = { memory(argmem: readwrite) } 597; CHECK: attributes #27 = { norecurse } 598; CHECK: attributes #28 = { memory(inaccessiblemem: readwrite) } 599; CHECK: attributes #29 = { memory(argmem: readwrite, inaccessiblemem: readwrite) } 600; CHECK: attributes #30 = { allocsize(0) } 601; CHECK: attributes #31 = { allocsize(0,1) } 602; CHECK: attributes #32 = { memory(write) } 603; CHECK: attributes #33 = { speculatable } 604; CHECK: attributes #34 = { sanitize_hwaddress } 605; CHECK: attributes #35 = { shadowcallstack } 606; CHECK: attributes #36 = { willreturn } 607; CHECK: attributes #37 = { nofree } 608; CHECK: attributes #38 = { nosync } 609; CHECK: attributes #39 = { sanitize_memtag } 610; CHECK: attributes #40 = { null_pointer_is_valid } 611; CHECK: attributes #41 = { mustprogress } 612; CHECK: attributes #42 = { nocallback } 613; CHECK: attributes #43 = { cold } 614; CHECK: attributes #44 = { hot } 615; CHECK: attributes #45 = { vscale_range(8,8) } 616; CHECK: attributes #46 = { vscale_range(1,8) } 617; CHECK: attributes #47 = { vscale_range(1,0) } 618; CHECK: attributes #48 = { nosanitize_coverage } 619; CHECK: attributes #49 = { noprofile } 620; CHECK: attributes #50 = { disable_sanitizer_instrumentation } 621; CHECK: attributes #51 = { uwtable(sync) } 622; CHECK: attributes #52 = { nosanitize_bounds } 623; CHECK: attributes #53 = { sanitize_realtime } 624; CHECK: attributes #54 = { sanitize_realtime_blocking } 625; CHECK: attributes [[FNRETTHUNKEXTERN]] = { fn_ret_thunk_extern } 626; CHECK: attributes [[SKIPPROFILE]] = { skipprofile } 627; CHECK: attributes [[OPTDEBUG]] = { optdebug } 628; CHECK: attributes [[NODIVERGENCESOURCE]] = { nodivergencesource } 629; CHECK: attributes #[[NOBUILTIN]] = { nobuiltin } 630