2327 lines · plain
1; Bitcode compatibility test for llvm2;3; Please update this file when making any IR changes. Information on the4; release process for this file is available here:5;6; http://llvm.org/docs/DeveloperPolicy.html#ir-backwards-compatibility7 8; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s9; RUN: verify-uselistorder < %s10 11target datalayout = "E"12; CHECK: target datalayout = "E"13 14target triple = "x86_64-apple-macosx10.10.0"15; CHECK: target triple = "x86_64-apple-macosx10.10.0"16 17;; Module-level assembly18module asm "beep boop"19; CHECK: module asm "beep boop"20 21;; Comdats22$comdat.any = comdat any23; CHECK: $comdat.any = comdat any24$comdat.exactmatch = comdat exactmatch25; CHECK: $comdat.exactmatch = comdat exactmatch26$comdat.largest = comdat largest27; CHECK: $comdat.largest = comdat largest28$comdat.noduplicates = comdat nodeduplicate29; CHECK: $comdat.noduplicates = comdat nodeduplicate30$comdat.samesize = comdat samesize31; CHECK: $comdat.samesize = comdat samesize32 33;; Constants34@const.true = constant i1 true35; CHECK: @const.true = constant i1 true36@const.false = constant i1 false37; CHECK: @const.false = constant i1 false38@const.int = constant i32 zeroinitializer39; CHECK: @const.int = constant i32 040@const.float = constant double 0.041; CHECK: @const.float = constant double 0.042@const.null = constant ptr null43; CHECK: @const.null = constant ptr null44%const.struct.type = type { i32, i8, i64 }45%const.struct.type.packed = type <{ i32, i8 }>46@const.struct = constant %const.struct.type { i32 -1, i8 undef, i64 poison }47; CHECK: @const.struct = constant %const.struct.type { i32 -1, i8 undef, i64 poison }48@const.struct.packed = constant %const.struct.type.packed <{ i32 -1, i8 1 }>49; CHECK: @const.struct.packed = constant %const.struct.type.packed <{ i32 -1, i8 1 }>50 51; CHECK: @constant.array.i8 = constant [3 x i8] c"\00\01\00"52@constant.array.i8 = constant [3 x i8] [i8 -0, i8 1, i8 0]53; CHECK: @constant.array.i16 = constant [3 x i16] [i16 0, i16 1, i16 0]54@constant.array.i16 = constant [3 x i16] [i16 -0, i16 1, i16 0]55; CHECK: @constant.array.i32 = constant [3 x i32] [i32 0, i32 1, i32 0]56@constant.array.i32 = constant [3 x i32] [i32 -0, i32 1, i32 0]57; CHECK: @constant.array.i64 = constant [3 x i64] [i64 0, i64 1, i64 0]58@constant.array.i64 = constant [3 x i64] [i64 -0, i64 1, i64 0]59; CHECK: @constant.array.f16 = constant [3 x half] [half 0xH8000, half 0xH3C00, half 0xH0000]60@constant.array.f16 = constant [3 x half] [half -0.0, half 1.0, half 0.0]61; CHECK: @constant.array.f32 = constant [3 x float] [float -0.000000e+00, float 1.000000e+00, float 0.000000e+00]62@constant.array.f32 = constant [3 x float] [float -0.0, float 1.0, float 0.0]63; CHECK: @constant.array.f64 = constant [3 x double] [double -0.000000e+00, double 1.000000e+00, double 0.000000e+00]64@constant.array.f64 = constant [3 x double] [double -0.0, double 1.0, double 0.0]65 66; CHECK: @constant.vector.i8 = constant <3 x i8> <i8 0, i8 1, i8 0>67@constant.vector.i8 = constant <3 x i8> <i8 -0, i8 1, i8 0>68; CHECK: @constant.vector.i16 = constant <3 x i16> <i16 0, i16 1, i16 0>69@constant.vector.i16 = constant <3 x i16> <i16 -0, i16 1, i16 0>70; CHECK: @constant.vector.i32 = constant <3 x i32> <i32 0, i32 1, i32 0>71@constant.vector.i32 = constant <3 x i32> <i32 -0, i32 1, i32 0>72; CHECK: @constant.vector.i64 = constant <3 x i64> <i64 0, i64 1, i64 0>73@constant.vector.i64 = constant <3 x i64> <i64 -0, i64 1, i64 0>74; CHECK: @constant.vector.f16 = constant <3 x half> <half 0xH8000, half 0xH3C00, half 0xH0000>75@constant.vector.f16 = constant <3 x half> <half -0.0, half 1.0, half 0.0>76; CHECK: @constant.vector.f32 = constant <3 x float> <float -0.000000e+00, float 1.000000e+00, float 0.000000e+00>77@constant.vector.f32 = constant <3 x float> <float -0.0, float 1.0, float 0.0>78; CHECK: @constant.vector.f64 = constant <3 x double> <double -0.000000e+00, double 1.000000e+00, double 0.000000e+00>79@constant.vector.f64 = constant <3 x double> <double -0.0, double 1.0, double 0.0>80 81;; Global Variables82; Format: [@<GlobalVarName> =] [Linkage] [Visibility] [DLLStorageClass]83; [ThreadLocal] [(unnamed_addr|local_unnamed_addr)] [AddrSpace] [ExternallyInitialized]84; <global | constant> <Type> [<InitializerConstant>]85; [, section "name"] [, comdat [($name)]] [, align <Alignment>]86 87; Global Variables -- Simple88@g1 = global i32 089; CHECK: @g1 = global i32 090@g2 = constant i32 091; CHECK: @g2 = constant i32 092 93; Global Variables -- Linkage94@g.private = private global i32 095; CHECK: @g.private = private global i32 096@g.internal = internal global i32 097; CHECK: @g.internal = internal global i32 098@g.available_externally = available_externally global i32 099; CHECK: @g.available_externally = available_externally global i32 0100@g.linkonce = linkonce global i32 0101; CHECK: @g.linkonce = linkonce global i32 0102@g.weak = weak global i32 0103; CHECK: @g.weak = weak global i32 0104@g.common = common global i32 0105; CHECK: @g.common = common global i32 0106@g.appending = appending global [4 x i8] c"test"107; CHECK: @g.appending = appending global [4 x i8] c"test"108@g.extern_weak = extern_weak global i32109; CHECK: @g.extern_weak = extern_weak global i32110@g.linkonce_odr = linkonce_odr global i32 0111; CHECK: @g.linkonce_odr = linkonce_odr global i32 0112@g.weak_odr = weak_odr global i32 0113; CHECK: @g.weak_odr = weak_odr global i32 0114@g.external = external global i32115; CHECK: @g.external = external global i32116 117; Global Variables -- Visibility118@g.default = default global i32 0119; CHECK: @g.default = global i32 0120@g.hidden = hidden global i32 0121; CHECK: @g.hidden = hidden global i32 0122@g.protected = protected global i32 0123; CHECK: @g.protected = protected global i32 0124 125; Global Variables -- DLLStorageClass126@g.dlldefault = default global i32 0127; CHECK: @g.dlldefault = global i32 0128@g.dllimport = external dllimport global i32129; CHECK: @g.dllimport = external dllimport global i32130@g.dllexport = dllexport global i32 0131; CHECK: @g.dllexport = dllexport global i32 0132 133; Global Variables -- ThreadLocal134@g.notthreadlocal = global i32 0135; CHECK: @g.notthreadlocal = global i32 0136@g.generaldynamic = thread_local global i32 0137; CHECK: @g.generaldynamic = thread_local global i32 0138@g.localdynamic = thread_local(localdynamic) global i32 0139; CHECK: @g.localdynamic = thread_local(localdynamic) global i32 0140@g.initialexec = thread_local(initialexec) global i32 0141; CHECK: @g.initialexec = thread_local(initialexec) global i32 0142@g.localexec = thread_local(localexec) global i32 0143; CHECK: @g.localexec = thread_local(localexec) global i32 0144 145; Global Variables -- unnamed_addr and local_unnamed_addr146@g.unnamed_addr = unnamed_addr global i32 0147; CHECK: @g.unnamed_addr = unnamed_addr global i32 0148@g.local_unnamed_addr = local_unnamed_addr global i32 0149; CHECK: @g.local_unnamed_addr = local_unnamed_addr global i32 0150 151; Global Variables -- AddrSpace152@g.addrspace = addrspace(1) global i32 0153; CHECK: @g.addrspace = addrspace(1) global i32 0154 155; Global Variables -- ExternallyInitialized156@g.externally_initialized = external externally_initialized global i32157; CHECK: @g.externally_initialized = external externally_initialized global i32158 159; Global Variables -- section160@g.section = global i32 0, section "_DATA"161; CHECK: @g.section = global i32 0, section "_DATA"162 163; Global Variables -- partition164@g.partition = global i32 0, partition "part"165; CHECK: @g.partition = global i32 0, partition "part"166 167; Global Variables -- comdat168@comdat.any = global i32 0, comdat169; CHECK: @comdat.any = global i32 0, comdat170@comdat.exactmatch = global i32 0, comdat171; CHECK: @comdat.exactmatch = global i32 0, comdat172@comdat.largest = global i32 0, comdat173; CHECK: @comdat.largest = global i32 0, comdat174@comdat.noduplicates = global i32 0, comdat175; CHECK: @comdat.noduplicates = global i32 0, comdat176@comdat.samesize = global i32 0, comdat177; CHECK: @comdat.samesize = global i32 0, comdat178 179; Force two globals from different comdats into sections with the same name.180$comdat1 = comdat any181$comdat2 = comdat any182@g.comdat1 = global i32 0, section "SharedSection", comdat($comdat1)183; CHECK: @g.comdat1 = global i32 0, section "SharedSection", comdat($comdat1)184@g.comdat2 = global i32 0, section "SharedSection", comdat($comdat2)185; CHECK: @g.comdat2 = global i32 0, section "SharedSection", comdat($comdat2)186 187; Global Variables -- align188@g.align = global i32 0, align 4189; CHECK: @g.align = global i32 0, align 4190 191; Global Variables -- Intrinsics192%pri.func.data = type { i32, ptr, ptr }193@g.used1 = global i32 0194@g.used2 = global i32 0195@g.used3 = global i8 0196declare void @g.f1()197@llvm.used = appending global [1 x ptr] [ptr @g.used1], section "llvm.metadata"198; CHECK: @llvm.used = appending global [1 x ptr] [ptr @g.used1], section "llvm.metadata"199@llvm.compiler.used = appending global [1 x ptr] [ptr @g.used2], section "llvm.metadata"200; CHECK: @llvm.compiler.used = appending global [1 x ptr] [ptr @g.used2], section "llvm.metadata"201@llvm.global_ctors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, ptr @g.f1, ptr @g.used3 }], section "llvm.metadata"202; CHECK: @llvm.global_ctors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, ptr @g.f1, ptr @g.used3 }], section "llvm.metadata"203@llvm.global_dtors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, ptr @g.f1, ptr @g.used3 }], section "llvm.metadata"204; CHECK: @llvm.global_dtors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, ptr @g.f1, ptr @g.used3 }], section "llvm.metadata"205 206; Global Variables -- sanitizers207@g.no_sanitize_address = global i32 0, no_sanitize_address208@g.no_sanitize_hwaddress = global i32 0, no_sanitize_hwaddress209@g.sanitize_memtag = global i32 0, sanitize_memtag210@g.no_sanitize_multiple = global i32 0, no_sanitize_address, no_sanitize_hwaddress211@g.sanitize_address_dyninit = global i32 0, sanitize_address_dyninit212@g.sanitize_multiple = global i32 0, sanitize_memtag, sanitize_address_dyninit213; CHECK: @g.no_sanitize_address = global i32 0, no_sanitize_address214; CHECK: @g.no_sanitize_hwaddress = global i32 0, no_sanitize_hwaddress215; CHECK: @g.sanitize_memtag = global i32 0, sanitize_memtag216; CHECK: @g.no_sanitize_multiple = global i32 0, no_sanitize_address, no_sanitize_hwaddress217; CHECK: @g.sanitize_address_dyninit = global i32 0, sanitize_address_dyninit218; CHECK: @g.sanitize_multiple = global i32 0, sanitize_memtag, sanitize_address_dyninit219 220@ds = external global i32221 222; ptrauth constant223@auth_var = global ptr ptrauth (ptr @g1, i32 0, i64 65535, ptr null)224; CHECK: @auth_var = global ptr ptrauth (ptr @g1, i32 0, i64 65535)225@auth_var.ds = global ptr ptrauth (ptr @g1, i32 0, i64 65535, ptr null, ptr @ds)226; CHECK: @auth_var.ds = global ptr ptrauth (ptr @g1, i32 0, i64 65535, ptr null, ptr @ds)227 228;; Aliases229; Format: @<Name> = [Linkage] [Visibility] [DLLStorageClass] [ThreadLocal]230; [unnamed_addr] alias <AliaseeTy> @<Aliasee>231 232; Aliases -- Linkage233@a.private = private alias i32, ptr @g.private234; CHECK: @a.private = private alias i32, ptr @g.private235@a.internal = internal alias i32, ptr @g.internal236; CHECK: @a.internal = internal alias i32, ptr @g.internal237@a.linkonce = linkonce alias i32, ptr @g.linkonce238; CHECK: @a.linkonce = linkonce alias i32, ptr @g.linkonce239@a.weak = weak alias i32, ptr @g.weak240; CHECK: @a.weak = weak alias i32, ptr @g.weak241@a.linkonce_odr = linkonce_odr alias i32, ptr @g.linkonce_odr242; CHECK: @a.linkonce_odr = linkonce_odr alias i32, ptr @g.linkonce_odr243@a.weak_odr = weak_odr alias i32, ptr @g.weak_odr244; CHECK: @a.weak_odr = weak_odr alias i32, ptr @g.weak_odr245@a.external = external alias i32, ptr @g1246; CHECK: @a.external = alias i32, ptr @g1247 248; Aliases -- Visibility249@a.default = default alias i32, ptr @g.default250; CHECK: @a.default = alias i32, ptr @g.default251@a.hidden = hidden alias i32, ptr @g.hidden252; CHECK: @a.hidden = hidden alias i32, ptr @g.hidden253@a.protected = protected alias i32, ptr @g.protected254; CHECK: @a.protected = protected alias i32, ptr @g.protected255 256; Aliases -- DLLStorageClass257@a.dlldefault = default alias i32, ptr @g.dlldefault258; CHECK: @a.dlldefault = alias i32, ptr @g.dlldefault259@a.dllexport = dllexport alias i32, ptr @g.dllexport260; CHECK: @a.dllexport = dllexport alias i32, ptr @g.dllexport261 262; Aliases -- ThreadLocal263@a.notthreadlocal = alias i32, ptr @g.notthreadlocal264; CHECK: @a.notthreadlocal = alias i32, ptr @g.notthreadlocal265@a.generaldynamic = thread_local alias i32, ptr @g.generaldynamic266; CHECK: @a.generaldynamic = thread_local alias i32, ptr @g.generaldynamic267@a.localdynamic = thread_local(localdynamic) alias i32, ptr @g.localdynamic268; CHECK: @a.localdynamic = thread_local(localdynamic) alias i32, ptr @g.localdynamic269@a.initialexec = thread_local(initialexec) alias i32, ptr @g.initialexec270; CHECK: @a.initialexec = thread_local(initialexec) alias i32, ptr @g.initialexec271@a.localexec = thread_local(localexec) alias i32, ptr @g.localexec272; CHECK: @a.localexec = thread_local(localexec) alias i32, ptr @g.localexec273 274; Aliases -- unnamed_addr and local_unnamed_addr275@a.unnamed_addr = unnamed_addr alias i32, ptr @g.unnamed_addr276; CHECK: @a.unnamed_addr = unnamed_addr alias i32, ptr @g.unnamed_addr277@a.local_unnamed_addr = local_unnamed_addr alias i32, ptr @g.local_unnamed_addr278; CHECK: @a.local_unnamed_addr = local_unnamed_addr alias i32, ptr @g.local_unnamed_addr279 280; Aliases -- partition281; CHECK: @alias.partition = alias i32, ptr @g.partition, partition "part"282@alias.partition = alias i32, ptr @g.partition, partition "part"283 284;; IFunc285; Format @<Name> = [Linkage] [Visibility] ifunc <IFuncTy>,286; ptr @<Resolver>287 288; IFunc -- Linkage289@ifunc.external = external ifunc void (), ptr @ifunc_resolver290; CHECK: @ifunc.external = ifunc void (), ptr @ifunc_resolver291@ifunc.private = private ifunc void (), ptr @ifunc_resolver292; CHECK: @ifunc.private = private ifunc void (), ptr @ifunc_resolver293@ifunc.internal = internal ifunc void (), ptr @ifunc_resolver294; CHECK: @ifunc.internal = internal ifunc void (), ptr @ifunc_resolver295 296; IFunc -- Visibility297@ifunc.default = default ifunc void (), ptr @ifunc_resolver298; CHECK: @ifunc.default = ifunc void (), ptr @ifunc_resolver299@ifunc.hidden = hidden ifunc void (), ptr @ifunc_resolver300; CHECK: @ifunc.hidden = hidden ifunc void (), ptr @ifunc_resolver301@ifunc.protected = protected ifunc void (), ptr @ifunc_resolver302; CHECK: @ifunc.protected = protected ifunc void (), ptr @ifunc_resolver303 304; IFunc -- partition305; CHECK: @ifunc.partition = ifunc void (), ptr @ifunc_resolver, partition "part"306@ifunc.partition = ifunc void (), ptr @ifunc_resolver, partition "part"307 308define ptr @ifunc_resolver() {309entry:310 ret ptr null311}312 313;; Functions314; Format: define [linkage] [visibility] [DLLStorageClass]315; [cconv] [ret attrs]316; <ResultType> @<FunctionName> ([argument list])317; [(unnamed_addr|local_unnamed_addr)] [fn Attrs] [section "name"] [comdat [($name)]]318; [align N] [gc] [prefix Constant] [prologue Constant]319; [personality Constant] { ... }320 321; Functions -- Simple322declare void @f1 ()323; CHECK: declare void @f1()324 325define void @f2 () {326; CHECK: define void @f2()327entry:328 ret void329}330 331; Functions -- linkage332define private void @f.private() {333; CHECK: define private void @f.private()334entry:335 ret void336}337define internal void @f.internal() {338; CHECK: define internal void @f.internal()339entry:340 ret void341}342define available_externally void @f.available_externally() {343; CHECK: define available_externally void @f.available_externally()344entry:345 ret void346}347define linkonce void @f.linkonce() {348; CHECK: define linkonce void @f.linkonce()349entry:350 ret void351}352define weak void @f.weak() {353; CHECK: define weak void @f.weak()354entry:355 ret void356}357define linkonce_odr void @f.linkonce_odr() {358; CHECK: define linkonce_odr void @f.linkonce_odr()359entry:360 ret void361}362define weak_odr void @f.weak_odr() {363; CHECK: define weak_odr void @f.weak_odr()364entry:365 ret void366}367declare external void @f.external()368; CHECK: declare void @f.external()369declare extern_weak void @f.extern_weak()370; CHECK: declare extern_weak void @f.extern_weak()371 372; Functions -- visibility373declare default void @f.default()374; CHECK: declare void @f.default()375declare hidden void @f.hidden()376; CHECK: declare hidden void @f.hidden()377declare protected void @f.protected()378; CHECK: declare protected void @f.protected()379 380; Functions -- DLLStorageClass381declare dllimport void @f.dllimport()382; CHECK: declare dllimport void @f.dllimport()383declare dllexport void @f.dllexport()384; CHECK: declare dllexport void @f.dllexport()385 386; Functions -- cconv (Calling conventions)387declare ccc void @f.ccc()388; CHECK: declare void @f.ccc()389declare fastcc void @f.fastcc()390; CHECK: declare fastcc void @f.fastcc()391declare coldcc void @f.coldcc()392; CHECK: declare coldcc void @f.coldcc()393declare cc10 void @f.cc10()394; CHECK: declare ghccc void @f.cc10()395declare ghccc void @f.ghccc()396; CHECK: declare ghccc void @f.ghccc()397declare cc11 void @f.cc11()398; CHECK: declare cc11 void @f.cc11()399declare anyregcc void @f.anyregcc()400; CHECK: declare anyregcc void @f.anyregcc()401declare preserve_mostcc void @f.preserve_mostcc()402; CHECK: declare preserve_mostcc void @f.preserve_mostcc()403declare preserve_allcc void @f.preserve_allcc()404; CHECK: declare preserve_allcc void @f.preserve_allcc()405declare preserve_nonecc void @f.preserve_nonecc()406; CHECK: declare preserve_nonecc void @f.preserve_nonecc()407declare swifttailcc void @f.swifttailcc()408; CHECK: declare swifttailcc void @f.swifttailcc()409declare cc64 void @f.cc64()410; CHECK: declare x86_stdcallcc void @f.cc64()411declare x86_stdcallcc void @f.x86_stdcallcc()412; CHECK: declare x86_stdcallcc void @f.x86_stdcallcc()413declare cc65 void @f.cc65()414; CHECK: declare x86_fastcallcc void @f.cc65()415declare x86_fastcallcc void @f.x86_fastcallcc()416; CHECK: declare x86_fastcallcc void @f.x86_fastcallcc()417declare cc66 void @f.cc66()418; CHECK: declare arm_apcscc void @f.cc66()419declare arm_apcscc void @f.arm_apcscc()420; CHECK: declare arm_apcscc void @f.arm_apcscc()421declare cc67 void @f.cc67()422; CHECK: declare arm_aapcscc void @f.cc67()423declare arm_aapcscc void @f.arm_aapcscc()424; CHECK: declare arm_aapcscc void @f.arm_aapcscc()425declare cc68 void @f.cc68()426; CHECK: declare arm_aapcs_vfpcc void @f.cc68()427declare arm_aapcs_vfpcc void @f.arm_aapcs_vfpcc()428; CHECK: declare arm_aapcs_vfpcc void @f.arm_aapcs_vfpcc()429declare cc69 void @f.cc69()430; CHECK: declare msp430_intrcc void @f.cc69()431declare msp430_intrcc void @f.msp430_intrcc()432; CHECK: declare msp430_intrcc void @f.msp430_intrcc()433declare cc70 void @f.cc70()434; CHECK: declare x86_thiscallcc void @f.cc70()435declare x86_thiscallcc void @f.x86_thiscallcc()436; CHECK: declare x86_thiscallcc void @f.x86_thiscallcc()437declare cc71 void @f.cc71()438; CHECK: declare ptx_kernel void @f.cc71()439declare ptx_kernel void @f.ptx_kernel()440; CHECK: declare ptx_kernel void @f.ptx_kernel()441declare cc72 void @f.cc72()442; CHECK: declare ptx_device void @f.cc72()443declare ptx_device void @f.ptx_device()444; CHECK: declare ptx_device void @f.ptx_device()445declare cc75 void @f.cc75()446; CHECK: declare spir_func void @f.cc75()447declare spir_func void @f.spir_func()448; CHECK: declare spir_func void @f.spir_func()449declare cc76 void @f.cc76()450; CHECK: declare spir_kernel void @f.cc76()451declare spir_kernel void @f.spir_kernel()452; CHECK: declare spir_kernel void @f.spir_kernel()453declare cc77 void @f.cc77()454; CHECK: declare intel_ocl_bicc void @f.cc77()455declare intel_ocl_bicc void @f.intel_ocl_bicc()456; CHECK: declare intel_ocl_bicc void @f.intel_ocl_bicc()457declare cc78 void @f.cc78()458; CHECK: declare x86_64_sysvcc void @f.cc78()459declare x86_64_sysvcc void @f.x86_64_sysvcc()460; CHECK: declare x86_64_sysvcc void @f.x86_64_sysvcc()461declare cc79 void @f.cc79()462; CHECK: declare win64cc void @f.cc79()463declare win64cc void @f.win64cc()464; CHECK: declare win64cc void @f.win64cc()465declare cc80 void @f.cc80()466; CHECK: declare x86_vectorcallcc void @f.cc80()467declare x86_vectorcallcc void @f.x86_vectorcallcc()468; CHECK: declare x86_vectorcallcc void @f.x86_vectorcallcc()469declare cc81 void @f.cc81()470; CHECK: declare hhvmcc void @f.cc81()471declare hhvmcc void @f.hhvmcc()472; CHECK: declare hhvmcc void @f.hhvmcc()473declare cc82 void @f.cc82()474; CHECK: declare hhvm_ccc void @f.cc82()475declare hhvm_ccc void @f.hhvm_ccc()476; CHECK: declare hhvm_ccc void @f.hhvm_ccc()477declare cc83 void @f.cc83(ptr byval(i8))478; CHECK: declare x86_intrcc void @f.cc83(ptr byval(i8))479declare x86_intrcc void @f.x86_intrcc(ptr byval(i8))480; CHECK: declare x86_intrcc void @f.x86_intrcc(ptr byval(i8))481declare cc84 void @f.cc84()482; CHECK: declare avr_intrcc void @f.cc84()483declare avr_intrcc void @f.avr_intrcc()484; CHECK: declare avr_intrcc void @f.avr_intrcc()485declare cc85 void @f.cc85()486; CHECK: declare avr_signalcc void @f.cc85()487declare avr_signalcc void @f.avr_signalcc()488; CHECK: declare avr_signalcc void @f.avr_signalcc()489declare cc87 void @f.cc87()490; CHECK: declare amdgpu_vs void @f.cc87()491declare amdgpu_vs void @f.amdgpu_vs()492; CHECK: declare amdgpu_vs void @f.amdgpu_vs()493declare cc88 void @f.cc88()494; CHECK: declare amdgpu_gs void @f.cc88()495declare amdgpu_gs void @f.amdgpu_gs()496; CHECK: declare amdgpu_gs void @f.amdgpu_gs()497declare cc89 void @f.cc89()498; CHECK: declare amdgpu_ps void @f.cc89()499declare amdgpu_ps void @f.amdgpu_ps()500; CHECK: declare amdgpu_ps void @f.amdgpu_ps()501declare cc90 void @f.cc90()502; CHECK: declare amdgpu_cs void @f.cc90()503declare amdgpu_cs void @f.amdgpu_cs()504; CHECK: declare amdgpu_cs void @f.amdgpu_cs()505declare amdgpu_gfx void @f.amdgpu_gfx()506; CHECK: declare amdgpu_gfx void @f.amdgpu_gfx()507declare cc91 void @f.cc91()508; CHECK: declare amdgpu_kernel void @f.cc91()509declare amdgpu_kernel void @f.amdgpu_kernel()510; CHECK: declare amdgpu_kernel void @f.amdgpu_kernel()511declare cc93 void @f.cc93()512; CHECK: declare amdgpu_hs void @f.cc93()513declare amdgpu_hs void @f.amdgpu_hs()514; CHECK: declare amdgpu_hs void @f.amdgpu_hs()515declare cc95 void @f.cc95()516; CHECK: declare amdgpu_ls void @f.cc95()517declare amdgpu_ls void @f.amdgpu_ls()518; CHECK: declare amdgpu_ls void @f.amdgpu_ls()519declare cc96 void @f.cc96()520; CHECK: declare amdgpu_es void @f.cc96()521declare amdgpu_es void @f.amdgpu_es()522; CHECK: declare amdgpu_es void @f.amdgpu_es()523declare cc112 void @f.cc112()524; CHECK: declare riscv_vls_cc(32) void @f.cc112()525declare cc113 void @f.cc113()526; CHECK: declare riscv_vls_cc(64) void @f.cc113()527declare cc114 void @f.cc114()528; CHECK: declare riscv_vls_cc(128) void @f.cc114()529declare cc115 void @f.cc115()530; CHECK: declare riscv_vls_cc(256) void @f.cc115()531declare cc116 void @f.cc116()532; CHECK: declare riscv_vls_cc(512) void @f.cc116()533declare cc117 void @f.cc117()534; CHECK: declare riscv_vls_cc(1024) void @f.cc117()535declare cc118 void @f.cc118()536; CHECK: declare riscv_vls_cc(2048) void @f.cc118()537declare cc119 void @f.cc119()538; CHECK: declare riscv_vls_cc(4096) void @f.cc119()539declare cc120 void @f.cc120()540; CHECK: declare riscv_vls_cc(8192) void @f.cc120()541declare cc121 void @f.cc121()542; CHECK: declare riscv_vls_cc(16384) void @f.cc121()543declare cc122 void @f.cc122()544; CHECK: declare riscv_vls_cc(32768) void @f.cc122()545declare cc123 void @f.cc123()546; CHECK: declare riscv_vls_cc(65536) void @f.cc123()547declare riscv_vls_cc(32) void @riscv_vls_cc_32()548; CHECK: declare riscv_vls_cc(32) void @riscv_vls_cc_32()549declare riscv_vls_cc(64) void @riscv_vls_cc_64()550; CHECK: declare riscv_vls_cc(64) void @riscv_vls_cc_64()551declare riscv_vls_cc(128) void @riscv_vls_cc_128()552; CHECK: declare riscv_vls_cc(128) void @riscv_vls_cc_128()553declare riscv_vls_cc(256) void @riscv_vls_cc_256()554; CHECK: declare riscv_vls_cc(256) void @riscv_vls_cc_256()555declare riscv_vls_cc(512) void @riscv_vls_cc_512()556; CHECK: declare riscv_vls_cc(512) void @riscv_vls_cc_512()557declare riscv_vls_cc(1024) void @riscv_vls_cc_1024()558; CHECK: declare riscv_vls_cc(1024) void @riscv_vls_cc_1024()559declare riscv_vls_cc(2048) void @riscv_vls_cc_2048()560; CHECK: declare riscv_vls_cc(2048) void @riscv_vls_cc_2048()561declare riscv_vls_cc(4096) void @riscv_vls_cc_4096()562; CHECK: declare riscv_vls_cc(4096) void @riscv_vls_cc_4096()563declare riscv_vls_cc(8192) void @riscv_vls_cc_8192()564; CHECK: declare riscv_vls_cc(8192) void @riscv_vls_cc_8192()565declare riscv_vls_cc(16384) void @riscv_vls_cc_16384()566; CHECK: declare riscv_vls_cc(16384) void @riscv_vls_cc_16384()567declare riscv_vls_cc(32768) void @riscv_vls_cc_32768()568; CHECK: declare riscv_vls_cc(32768) void @riscv_vls_cc_32768()569declare riscv_vls_cc(65536) void @riscv_vls_cc_65536()570; CHECK: declare riscv_vls_cc(65536) void @riscv_vls_cc_65536()571declare cc124 void @f.cc124(i1)572; CHECK: declare amdgpu_gfx_whole_wave void @f.cc124(i1)573declare amdgpu_gfx_whole_wave void @f.amdgpu_gfx_whole_wave(i1)574; CHECK: declare amdgpu_gfx_whole_wave void @f.amdgpu_gfx_whole_wave(i1)575declare cc1023 void @f.cc1023()576; CHECK: declare cc1023 void @f.cc1023()577 578; Functions -- ret attrs (Return attributes)579declare zeroext i64 @f.zeroext()580; CHECK: declare zeroext i64 @f.zeroext()581declare signext i64 @f.signext()582; CHECK: declare signext i64 @f.signext()583declare inreg ptr @f.inreg()584; CHECK: declare inreg ptr @f.inreg()585declare noalias ptr @f.noalias()586; CHECK: declare noalias ptr @f.noalias()587declare nonnull ptr @f.nonnull()588; CHECK: declare nonnull ptr @f.nonnull()589declare dereferenceable(4) ptr @f.dereferenceable4()590; CHECK: declare dereferenceable(4) ptr @f.dereferenceable4()591declare dereferenceable(8) ptr @f.dereferenceable8()592; CHECK: declare dereferenceable(8) ptr @f.dereferenceable8()593declare dereferenceable(16) ptr @f.dereferenceable16()594; CHECK: declare dereferenceable(16) ptr @f.dereferenceable16()595declare dereferenceable_or_null(4) ptr @f.dereferenceable4_or_null()596; CHECK: declare dereferenceable_or_null(4) ptr @f.dereferenceable4_or_null()597declare dereferenceable_or_null(8) ptr @f.dereferenceable8_or_null()598; CHECK: declare dereferenceable_or_null(8) ptr @f.dereferenceable8_or_null()599declare dereferenceable_or_null(16) ptr @f.dereferenceable16_or_null()600; CHECK: declare dereferenceable_or_null(16) ptr @f.dereferenceable16_or_null()601 602; Functions -- Parameter attributes603declare void @f.param.zeroext(i8 zeroext)604; CHECK: declare void @f.param.zeroext(i8 zeroext)605declare void @f.param.signext(i8 signext)606; CHECK: declare void @f.param.signext(i8 signext)607declare void @f.param.inreg(i8 inreg)608; CHECK: declare void @f.param.inreg(i8 inreg)609declare void @f.param.byval(ptr byval({ i8, i8 }))610; CHECK: declare void @f.param.byval(ptr byval({ i8, i8 }))611declare void @f.param.inalloca(ptr inalloca(i8))612; CHECK: declare void @f.param.inalloca(ptr inalloca(i8))613declare void @f.param.sret(ptr sret(i8))614; CHECK: declare void @f.param.sret(ptr sret(i8))615declare void @f.param.noalias(ptr noalias)616; CHECK: declare void @f.param.noalias(ptr noalias)617declare void @f.param.nocapture(ptr nocapture)618; CHECK: declare void @f.param.nocapture(ptr captures(none))619declare void @f.param.nest(ptr nest)620; CHECK: declare void @f.param.nest(ptr nest)621declare ptr @f.param.returned(ptr returned)622; CHECK: declare ptr @f.param.returned(ptr returned)623declare void @f.param.nonnull(ptr nonnull)624; CHECK: declare void @f.param.nonnull(ptr nonnull)625declare void @f.param.dereferenceable(ptr dereferenceable(4))626; CHECK: declare void @f.param.dereferenceable(ptr dereferenceable(4))627declare void @f.param.dereferenceable_or_null(ptr dereferenceable_or_null(4))628; CHECK: declare void @f.param.dereferenceable_or_null(ptr dereferenceable_or_null(4))629declare void @f.param.stack_align([2 x double] alignstack(16))630; CHECK: declare void @f.param.stack_align([2 x double] alignstack(16))631declare void @f.param.swiftself(ptr swiftself)632; CHECK: declare void @f.param.swiftself(ptr swiftself)633declare void @f.param.swiftasync(ptr swiftasync)634; CHECK: declare void @f.param.swiftasync(ptr swiftasync)635declare void @f.param.swifterror(ptr swifterror)636; CHECK: declare void @f.param.swifterror(ptr swifterror)637declare void @f.param.allocalign(i32 allocalign)638; CHECK: declare void @f.param.allocalign(i32 allocalign)639declare void @f.param.allocptr(ptr allocptr)640; CHECK: declare void @f.param.allocptr(ptr allocptr)641 642; Functions -- unnamed_addr and local_unnamed_addr643declare void @f.unnamed_addr() unnamed_addr644; CHECK: declare void @f.unnamed_addr() unnamed_addr645declare void @f.local_unnamed_addr() local_unnamed_addr646; CHECK: declare void @f.local_unnamed_addr() local_unnamed_addr647 648; Functions -- fn Attrs (Function attributes)649declare void @f.alignstack4() alignstack(4)650; CHECK: declare void @f.alignstack4() #0651declare void @f.alignstack8() alignstack(8)652; CHECK: declare void @f.alignstack8() #1653declare void @f.alwaysinline() alwaysinline654; CHECK: declare void @f.alwaysinline() #2655declare void @f.cold() cold656; CHECK: declare void @f.cold() #3657declare void @f.convergent() convergent658; CHECK: declare void @f.convergent() #4659declare void @f.inlinehint() inlinehint660; CHECK: declare void @f.inlinehint() #5661declare void @f.jumptable() unnamed_addr jumptable662; CHECK: declare void @f.jumptable() unnamed_addr #6663declare void @f.minsize() minsize664; CHECK: declare void @f.minsize() #7665declare void @f.naked() naked666; CHECK: declare void @f.naked() #8667declare void @f.nobuiltin() nobuiltin668; CHECK: declare void @f.nobuiltin() #9669declare void @f.noduplicate() noduplicate670; CHECK: declare void @f.noduplicate() #10671declare void @f.noimplicitfloat() noimplicitfloat672; CHECK: declare void @f.noimplicitfloat() #11673declare void @f.noinline() noinline674; CHECK: declare void @f.noinline() #12675declare void @f.nonlazybind() nonlazybind676; CHECK: declare void @f.nonlazybind() #13677declare void @f.noredzone() noredzone678; CHECK: declare void @f.noredzone() #14679declare void @f.noreturn() noreturn680; CHECK: declare void @f.noreturn() #15681declare void @f.nounwind() nounwind682; CHECK: declare void @f.nounwind() #16683declare void @f.optnone() noinline optnone684; CHECK: declare void @f.optnone() #17685declare void @f.optsize() optsize686; CHECK: declare void @f.optsize() #18687declare void @f.readnone() readnone688; CHECK: declare void @f.readnone() #19689declare void @f.readonly() readonly690; CHECK: declare void @f.readonly() #20691declare void @f.returns_twice() returns_twice692; CHECK: declare void @f.returns_twice() #21693declare void @f.safestack() safestack694; CHECK: declare void @f.safestack() #22695declare void @f.sanitize_address() sanitize_address696; CHECK: declare void @f.sanitize_address() #23697declare void @f.sanitize_memory() sanitize_memory698; CHECK: declare void @f.sanitize_memory() #24699declare void @f.sanitize_thread() sanitize_thread700; CHECK: declare void @f.sanitize_thread() #25701declare void @f.ssp() ssp702; CHECK: declare void @f.ssp() #26703declare void @f.sspreq() sspreq704; CHECK: declare void @f.sspreq() #27705declare void @f.sspstrong() sspstrong706; CHECK: declare void @f.sspstrong() #28707declare void @f.thunk() "thunk"708; CHECK: declare void @f.thunk() #29709declare void @f.uwtable() uwtable710; CHECK: declare void @f.uwtable() #30711declare void @f.kvpair() "cpu"="cortex-a8"712; CHECK:declare void @f.kvpair() #31713declare void @f.norecurse() norecurse714; CHECK: declare void @f.norecurse() #32715declare void @f.inaccessiblememonly() inaccessiblememonly716; CHECK: declare void @f.inaccessiblememonly() #33717declare void @f.inaccessiblemem_or_argmemonly() inaccessiblemem_or_argmemonly718; CHECK: declare void @f.inaccessiblemem_or_argmemonly() #34719declare void @f.strictfp() #35720 721; Functions -- section722declare void @f.section() section "80"723; CHECK: declare void @f.section() section "80"724 725; Functions -- partition726define void @f.partition() partition "part" {727; CHECK: define void @f.partition() partition "part"728 ret void729}730 731; Functions -- comdat732define void @f.comdat_any() comdat($comdat.any) {733; CHECK: define void @f.comdat_any() comdat($comdat.any)734entry:735 ret void736}737define void @f.comdat_exactmatch() comdat($comdat.exactmatch) {738; CHECK: define void @f.comdat_exactmatch() comdat($comdat.exactmatch)739entry:740 ret void741}742define void @f.comdat_largest() comdat($comdat.largest) {743; CHECK: define void @f.comdat_largest() comdat($comdat.largest)744entry:745 ret void746}747define void @f.comdat_noduplicates() comdat($comdat.noduplicates) {748; CHECK: define void @f.comdat_noduplicates() comdat($comdat.noduplicates)749entry:750 ret void751}752define void @f.comdat_samesize() comdat($comdat.samesize) {753; CHECK: define void @f.comdat_samesize() comdat($comdat.samesize)754entry:755 ret void756}757 758; Functions -- align759declare void @f.align2() align 2760; CHECK: declare void @f.align2() align 2761declare void @f.align4() align 4762; CHECK: declare void @f.align4() align 4763declare void @f.align8() align 8764; CHECK: declare void @f.align8() align 8765 766; Functions -- GC767declare void @f.gcshadow() gc "shadow-stack"768; CHECK: declare void @f.gcshadow() gc "shadow-stack"769 770; Functions -- Prefix data771declare void @f.prefixi32() prefix i32 1684365668772; CHECK: declare void @f.prefixi32() prefix i32 1684365668773declare void @f.prefixarray() prefix [4 x i32] [i32 0, i32 1, i32 2, i32 3]774; CHECK: declare void @f.prefixarray() prefix [4 x i32] [i32 0, i32 1, i32 2, i32 3]775 776; Functions -- Prologue data777declare void @f.prologuei32() prologue i32 1684365669778; CHECK: declare void @f.prologuei32() prologue i32 1684365669779declare void @f.prologuearray() prologue [4 x i32] [i32 0, i32 1, i32 2, i32 3]780; CHECK: declare void @f.prologuearray() prologue [4 x i32] [i32 0, i32 1, i32 2, i32 3]781 782; Functions -- Personality constant783declare void @llvm.donothing() nounwind readnone784; CHECK: declare void @llvm.donothing() #35785define void @f.no_personality() personality i8 3 {786; CHECK: define void @f.no_personality() personality i8 3787 invoke void @llvm.donothing() to label %normal unwind label %exception788exception:789 %cleanup = landingpad i8 cleanup790 br label %normal791normal:792 ret void793}794 795declare i32 @f.personality_handler()796; CHECK: declare i32 @f.personality_handler()797define void @f.personality() personality ptr @f.personality_handler {798; CHECK: define void @f.personality() personality ptr @f.personality_handler799 invoke void @llvm.donothing() to label %normal unwind label %exception800exception:801 %cleanup = landingpad i32 cleanup802 br label %normal803normal:804 ret void805}806 807;; Atomic Memory Ordering Constraints808define void @atomics(ptr %word) {809 ;; Atomic Compare And Exchange w/o alignment810 %cmpxchg_no_align.0 = cmpxchg ptr %word, i32 0, i32 4 monotonic monotonic811 ; CHECK: %cmpxchg_no_align.0 = cmpxchg ptr %word, i32 0, i32 4 monotonic monotonic812 %cmpxchg_no_align.1 = cmpxchg ptr %word, i32 0, i32 5 acq_rel monotonic813 ; CHECK: %cmpxchg_no_align.1 = cmpxchg ptr %word, i32 0, i32 5 acq_rel monotonic814 %cmpxchg_no_align.2 = cmpxchg ptr %word, i32 0, i32 6 acquire monotonic815 ; CHECK: %cmpxchg_no_align.2 = cmpxchg ptr %word, i32 0, i32 6 acquire monotonic816 %cmpxchg_no_align.3 = cmpxchg ptr %word, i32 0, i32 7 release monotonic817 ; CHECK: %cmpxchg_no_align.3 = cmpxchg ptr %word, i32 0, i32 7 release monotonic818 %cmpxchg_no_align.4 = cmpxchg ptr %word, i32 0, i32 8 seq_cst monotonic819 ; CHECK: %cmpxchg_no_align.4 = cmpxchg ptr %word, i32 0, i32 8 seq_cst monotonic820 %cmpxchg_no_align.5 = cmpxchg weak ptr %word, i32 0, i32 9 seq_cst monotonic821 ; CHECK: %cmpxchg_no_align.5 = cmpxchg weak ptr %word, i32 0, i32 9 seq_cst monotonic822 %cmpxchg_no_align.6 = cmpxchg volatile ptr %word, i32 0, i32 10 seq_cst monotonic823 ; CHECK: %cmpxchg_no_align.6 = cmpxchg volatile ptr %word, i32 0, i32 10 seq_cst monotonic824 %cmpxchg_no_align.7 = cmpxchg weak volatile ptr %word, i32 0, i32 11 syncscope("singlethread") seq_cst monotonic825 ; CHECK: %cmpxchg_no_align.7 = cmpxchg weak volatile ptr %word, i32 0, i32 11 syncscope("singlethread") seq_cst monotonic826 827 ;; Atomic Compare And Exchange w/ alignment828 %cmpxchg.0 = cmpxchg ptr %word, i32 0, i32 4 monotonic monotonic, align 16829 ; CHECK: %cmpxchg.0 = cmpxchg ptr %word, i32 0, i32 4 monotonic monotonic, align 16830 %cmpxchg.1 = cmpxchg ptr %word, i32 0, i32 5 acq_rel monotonic, align 16831 ; CHECK: %cmpxchg.1 = cmpxchg ptr %word, i32 0, i32 5 acq_rel monotonic, align 16832 %cmpxchg.2 = cmpxchg ptr %word, i32 0, i32 6 acquire monotonic, align 16833 ; CHECK: %cmpxchg.2 = cmpxchg ptr %word, i32 0, i32 6 acquire monotonic, align 16834 %cmpxchg.3 = cmpxchg ptr %word, i32 0, i32 7 release monotonic, align 16835 ; CHECK: %cmpxchg.3 = cmpxchg ptr %word, i32 0, i32 7 release monotonic, align 16836 %cmpxchg.4 = cmpxchg ptr %word, i32 0, i32 8 seq_cst monotonic, align 16837 ; CHECK: %cmpxchg.4 = cmpxchg ptr %word, i32 0, i32 8 seq_cst monotonic, align 16838 %cmpxchg.5 = cmpxchg weak ptr %word, i32 0, i32 9 seq_cst monotonic, align 16839 ; CHECK: %cmpxchg.5 = cmpxchg weak ptr %word, i32 0, i32 9 seq_cst monotonic, align 16840 %cmpxchg.6 = cmpxchg volatile ptr %word, i32 0, i32 10 seq_cst monotonic, align 16841 ; CHECK: %cmpxchg.6 = cmpxchg volatile ptr %word, i32 0, i32 10 seq_cst monotonic, align 16842 %cmpxchg.7 = cmpxchg weak volatile ptr %word, i32 0, i32 11 syncscope("singlethread") seq_cst monotonic, align 16843 ; CHECK: %cmpxchg.7 = cmpxchg weak volatile ptr %word, i32 0, i32 11 syncscope("singlethread") seq_cst monotonic, align 16844 845 ;; Atomic w/o alignment846 %atomicrmw_no_align.xchg = atomicrmw xchg ptr %word, i32 12 monotonic847 ; CHECK: %atomicrmw_no_align.xchg = atomicrmw xchg ptr %word, i32 12 monotonic848 %atomicrmw_no_align.add = atomicrmw add ptr %word, i32 13 monotonic849 ; CHECK: %atomicrmw_no_align.add = atomicrmw add ptr %word, i32 13 monotonic850 %atomicrmw_no_align.sub = atomicrmw sub ptr %word, i32 14 monotonic851 ; CHECK: %atomicrmw_no_align.sub = atomicrmw sub ptr %word, i32 14 monotonic852 %atomicrmw_no_align.and = atomicrmw and ptr %word, i32 15 monotonic853 ; CHECK: %atomicrmw_no_align.and = atomicrmw and ptr %word, i32 15 monotonic854 %atomicrmw_no_align.nand = atomicrmw nand ptr %word, i32 16 monotonic855 ; CHECK: %atomicrmw_no_align.nand = atomicrmw nand ptr %word, i32 16 monotonic856 %atomicrmw_no_align.or = atomicrmw or ptr %word, i32 17 monotonic857 ; CHECK: %atomicrmw_no_align.or = atomicrmw or ptr %word, i32 17 monotonic858 %atomicrmw_no_align.xor = atomicrmw xor ptr %word, i32 18 monotonic859 ; CHECK: %atomicrmw_no_align.xor = atomicrmw xor ptr %word, i32 18 monotonic860 %atomicrmw_no_align.max = atomicrmw max ptr %word, i32 19 monotonic861 ; CHECK: %atomicrmw_no_align.max = atomicrmw max ptr %word, i32 19 monotonic862 %atomicrmw_no_align.min = atomicrmw volatile min ptr %word, i32 20 monotonic863 ; CHECK: %atomicrmw_no_align.min = atomicrmw volatile min ptr %word, i32 20 monotonic864 %atomicrmw_no_align.umax = atomicrmw umax ptr %word, i32 21 syncscope("singlethread") monotonic865 ; CHECK: %atomicrmw_no_align.umax = atomicrmw umax ptr %word, i32 21 syncscope("singlethread") monotonic866 %atomicrmw_no_align.umin = atomicrmw volatile umin ptr %word, i32 22 syncscope("singlethread") monotonic867 ; CHECK: %atomicrmw_no_align.umin = atomicrmw volatile umin ptr %word, i32 22 syncscope("singlethread") monotonic868 869 ;; Atomic w/ alignment870 %atomicrmw.xchg = atomicrmw xchg ptr %word, i32 12 monotonic, align 16871 ; CHECK: %atomicrmw.xchg = atomicrmw xchg ptr %word, i32 12 monotonic, align 16872 %atomicrmw.add = atomicrmw add ptr %word, i32 13 monotonic, align 16873 ; CHECK: %atomicrmw.add = atomicrmw add ptr %word, i32 13 monotonic, align 16874 %atomicrmw.sub = atomicrmw sub ptr %word, i32 14 monotonic, align 16875 ; CHECK: %atomicrmw.sub = atomicrmw sub ptr %word, i32 14 monotonic, align 16876 %atomicrmw.and = atomicrmw and ptr %word, i32 15 monotonic, align 16877 ; CHECK: %atomicrmw.and = atomicrmw and ptr %word, i32 15 monotonic, align 16878 %atomicrmw.nand = atomicrmw nand ptr %word, i32 16 monotonic, align 16879 ; CHECK: %atomicrmw.nand = atomicrmw nand ptr %word, i32 16 monotonic, align 16880 %atomicrmw.or = atomicrmw or ptr %word, i32 17 monotonic, align 16881 ; CHECK: %atomicrmw.or = atomicrmw or ptr %word, i32 17 monotonic, align 16882 %atomicrmw.xor = atomicrmw xor ptr %word, i32 18 monotonic, align 16883 ; CHECK: %atomicrmw.xor = atomicrmw xor ptr %word, i32 18 monotonic, align 16884 %atomicrmw.max = atomicrmw max ptr %word, i32 19 monotonic, align 16885 ; CHECK: %atomicrmw.max = atomicrmw max ptr %word, i32 19 monotonic, align 16886 %atomicrmw.min = atomicrmw volatile min ptr %word, i32 20 monotonic, align 16887 ; CHECK: %atomicrmw.min = atomicrmw volatile min ptr %word, i32 20 monotonic, align 16888 %atomicrmw.umax = atomicrmw umax ptr %word, i32 21 syncscope("singlethread") monotonic, align 16889 ; CHECK: %atomicrmw.umax = atomicrmw umax ptr %word, i32 21 syncscope("singlethread") monotonic, align 16890 %atomicrmw.umin = atomicrmw volatile umin ptr %word, i32 22 syncscope("singlethread") monotonic, align 16891 ; CHECK: %atomicrmw.umin = atomicrmw volatile umin ptr %word, i32 22 syncscope("singlethread") monotonic, align 16892 893 fence acquire894 ; CHECK: fence acquire895 fence release896 ; CHECK: fence release897 fence acq_rel898 ; CHECK: fence acq_rel899 fence syncscope("singlethread") seq_cst900 ; CHECK: fence syncscope("singlethread") seq_cst901 902 %ld.1 = load atomic i32, ptr %word monotonic, align 4903 ; CHECK: %ld.1 = load atomic i32, ptr %word monotonic, align 4904 %ld.2 = load atomic volatile i32, ptr %word acquire, align 8905 ; CHECK: %ld.2 = load atomic volatile i32, ptr %word acquire, align 8906 %ld.3 = load atomic volatile i32, ptr %word syncscope("singlethread") seq_cst, align 16907 ; CHECK: %ld.3 = load atomic volatile i32, ptr %word syncscope("singlethread") seq_cst, align 16908 909 store atomic i32 23, ptr %word monotonic, align 4910 ; CHECK: store atomic i32 23, ptr %word monotonic, align 4911 store atomic volatile i32 24, ptr %word monotonic, align 4912 ; CHECK: store atomic volatile i32 24, ptr %word monotonic, align 4913 store atomic volatile i32 25, ptr %word syncscope("singlethread") monotonic, align 4914 ; CHECK: store atomic volatile i32 25, ptr %word syncscope("singlethread") monotonic, align 4915 ret void916}917 918define void @fp_atomics(ptr %word) {919; CHECK: %atomicrmw.xchg = atomicrmw xchg ptr %word, float 1.000000e+00 monotonic920 %atomicrmw.xchg = atomicrmw xchg ptr %word, float 1.0 monotonic921 922; CHECK: %atomicrmw.fadd = atomicrmw fadd ptr %word, float 1.000000e+00 monotonic923 %atomicrmw.fadd = atomicrmw fadd ptr %word, float 1.0 monotonic924 925; CHECK: %atomicrmw.fsub = atomicrmw fsub ptr %word, float 1.000000e+00 monotonic926 %atomicrmw.fsub = atomicrmw fsub ptr %word, float 1.0 monotonic927 928; CHECK: %atomicrmw.fmax = atomicrmw fmax ptr %word, float 1.000000e+00 monotonic929 %atomicrmw.fmax = atomicrmw fmax ptr %word, float 1.0 monotonic930 931; CHECK: %atomicrmw.fmin = atomicrmw fmin ptr %word, float 1.000000e+00 monotonic932 %atomicrmw.fmin = atomicrmw fmin ptr %word, float 1.0 monotonic933 934; CHECK: %atomicrmw.fmaximum = atomicrmw fmaximum ptr %word, float 1.000000e+00 monotonic935 %atomicrmw.fmaximum = atomicrmw fmaximum ptr %word, float 1.0 monotonic936 937; CHECK: %atomicrmw.fminimum = atomicrmw fminimum ptr %word, float 1.000000e+00 monotonic938 %atomicrmw.fminimum = atomicrmw fminimum ptr %word, float 1.0 monotonic939 940 ret void941}942 943define void @uinc_udec_wrap_atomics(ptr %word) {944; CHECK: %atomicrmw.inc0 = atomicrmw uinc_wrap ptr %word, i32 64 monotonic945 %atomicrmw.inc0 = atomicrmw uinc_wrap ptr %word, i32 64 monotonic946 947; CHECK: %atomicrmw.inc1 = atomicrmw uinc_wrap ptr %word, i32 128 seq_cst948 %atomicrmw.inc1 = atomicrmw uinc_wrap ptr %word, i32 128 seq_cst949 950; CHECK: %atomicrmw.inc2 = atomicrmw volatile uinc_wrap ptr %word, i32 128 seq_cst951 %atomicrmw.inc2 = atomicrmw volatile uinc_wrap ptr %word, i32 128 seq_cst952 953; CHECK: %atomicrmw.inc0.syncscope = atomicrmw uinc_wrap ptr %word, i32 27 syncscope("agent") monotonic954 %atomicrmw.inc0.syncscope = atomicrmw uinc_wrap ptr %word, i32 27 syncscope("agent") monotonic955 956; CHECK: %atomicrmw.dec0 = atomicrmw udec_wrap ptr %word, i32 99 monotonic957 %atomicrmw.dec0 = atomicrmw udec_wrap ptr %word, i32 99 monotonic958 959; CHECK: %atomicrmw.dec1 = atomicrmw udec_wrap ptr %word, i32 12 seq_cst960 %atomicrmw.dec1 = atomicrmw udec_wrap ptr %word, i32 12 seq_cst961 962; CHECK: %atomicrmw.dec2 = atomicrmw volatile udec_wrap ptr %word, i32 12 seq_cst963 %atomicrmw.dec2 = atomicrmw volatile udec_wrap ptr %word, i32 12 seq_cst964 965; CHECK: %atomicrmw.dec0.syncscope = atomicrmw udec_wrap ptr %word, i32 5 syncscope("system") monotonic966 %atomicrmw.dec0.syncscope = atomicrmw udec_wrap ptr %word, i32 5 syncscope("system") monotonic967 968 ret void969}970 971define void @usub_cond_usub_sat_atomics(ptr %word) {972; CHECK: %atomicrmw.condsub0 = atomicrmw usub_cond ptr %word, i32 64 monotonic973 %atomicrmw.condsub0 = atomicrmw usub_cond ptr %word, i32 64 monotonic974 975; CHECK: %atomicrmw.condsub1 = atomicrmw usub_cond ptr %word, i32 128 seq_cst976 %atomicrmw.condsub1 = atomicrmw usub_cond ptr %word, i32 128 seq_cst977 978; CHECK: %atomicrmw.condsub2 = atomicrmw volatile usub_cond ptr %word, i32 128 seq_cst979 %atomicrmw.condsub2 = atomicrmw volatile usub_cond ptr %word, i32 128 seq_cst980 981; CHECK: %atomicrmw.condsub0.syncscope = atomicrmw usub_cond ptr %word, i32 27 syncscope("agent") monotonic982 %atomicrmw.condsub0.syncscope = atomicrmw usub_cond ptr %word, i32 27 syncscope("agent") monotonic983 984; CHECK: %atomicrmw.subclamp0 = atomicrmw usub_sat ptr %word, i32 99 monotonic985 %atomicrmw.subclamp0 = atomicrmw usub_sat ptr %word, i32 99 monotonic986 987; CHECK: %atomicrmw.subclamp1 = atomicrmw usub_sat ptr %word, i32 12 seq_cst988 %atomicrmw.subclamp1 = atomicrmw usub_sat ptr %word, i32 12 seq_cst989 990; CHECK: %atomicrmw.subclamp2 = atomicrmw volatile usub_sat ptr %word, i32 12 seq_cst991 %atomicrmw.subclamp2 = atomicrmw volatile usub_sat ptr %word, i32 12 seq_cst992 993; CHECK: %atomicrmw.subclamp0.syncscope = atomicrmw usub_sat ptr %word, i32 5 syncscope("system") monotonic994 %atomicrmw.subclamp0.syncscope = atomicrmw usub_sat ptr %word, i32 5 syncscope("system") monotonic995 996 ret void997}998 999define void @pointer_atomics(ptr %word) {1000; CHECK: %atomicrmw.xchg = atomicrmw xchg ptr %word, ptr null monotonic1001 %atomicrmw.xchg = atomicrmw xchg ptr %word, ptr null monotonic1002 ret void1003}1004 1005;; Fast Math Flags1006define void @fastmathflags_unop(float %op1) {1007 %f.nnan = fneg nnan float %op11008 ; CHECK: %f.nnan = fneg nnan float %op11009 %f.ninf = fneg ninf float %op11010 ; CHECK: %f.ninf = fneg ninf float %op11011 %f.nsz = fneg nsz float %op11012 ; CHECK: %f.nsz = fneg nsz float %op11013 %f.arcp = fneg arcp float %op11014 ; CHECK: %f.arcp = fneg arcp float %op11015 %f.contract = fneg contract float %op11016 ; CHECK: %f.contract = fneg contract float %op11017 %f.afn = fneg afn float %op11018 ; CHECK: %f.afn = fneg afn float %op11019 %f.reassoc = fneg reassoc float %op11020 ; CHECK: %f.reassoc = fneg reassoc float %op11021 %f.fast = fneg fast float %op11022 ; CHECK: %f.fast = fneg fast float %op11023 ret void1024}1025 1026define void @fastmathflags_binops(float %op1, float %op2) {1027 %f.nnan = fadd nnan float %op1, %op21028 ; CHECK: %f.nnan = fadd nnan float %op1, %op21029 %f.ninf = fadd ninf float %op1, %op21030 ; CHECK: %f.ninf = fadd ninf float %op1, %op21031 %f.nsz = fadd nsz float %op1, %op21032 ; CHECK: %f.nsz = fadd nsz float %op1, %op21033 %f.arcp = fadd arcp float %op1, %op21034 ; CHECK: %f.arcp = fadd arcp float %op1, %op21035 %f.contract = fadd contract float %op1, %op21036 ; CHECK: %f.contract = fadd contract float %op1, %op21037 %f.afn = fadd afn float %op1, %op21038 ; CHECK: %f.afn = fadd afn float %op1, %op21039 %f.reassoc = fadd reassoc float %op1, %op21040 ; CHECK: %f.reassoc = fadd reassoc float %op1, %op21041 %f.fast = fadd fast float %op1, %op21042 ; CHECK: %f.fast = fadd fast float %op1, %op21043 ret void1044}1045 1046define void @fastmathflags_select(i1 %cond, float %op1, float %op2) {1047 %f.nnan = select nnan i1 %cond, float %op1, float %op21048 ; CHECK: %f.nnan = select nnan i1 %cond, float %op1, float %op21049 %f.ninf = select ninf i1 %cond, float %op1, float %op21050 ; CHECK: %f.ninf = select ninf i1 %cond, float %op1, float %op21051 %f.nsz = select nsz i1 %cond, float %op1, float %op21052 ; CHECK: %f.nsz = select nsz i1 %cond, float %op1, float %op21053 %f.arcp = select arcp i1 %cond, float %op1, float %op21054 ; CHECK: %f.arcp = select arcp i1 %cond, float %op1, float %op21055 %f.contract = select contract i1 %cond, float %op1, float %op21056 ; CHECK: %f.contract = select contract i1 %cond, float %op1, float %op21057 %f.afn = select afn i1 %cond, float %op1, float %op21058 ; CHECK: %f.afn = select afn i1 %cond, float %op1, float %op21059 %f.reassoc = select reassoc i1 %cond, float %op1, float %op21060 ; CHECK: %f.reassoc = select reassoc i1 %cond, float %op1, float %op21061 %f.fast = select fast i1 %cond, float %op1, float %op21062 ; CHECK: %f.fast = select fast i1 %cond, float %op1, float %op21063 ret void1064}1065 1066define void @fastmathflags_vector_select(<2 x i1> %cond, <2 x double> %op1, <2 x double> %op2) {1067 %f.nnan.nsz = select nnan nsz <2 x i1> %cond, <2 x double> %op1, <2 x double> %op21068 ; CHECK: %f.nnan.nsz = select nnan nsz <2 x i1> %cond, <2 x double> %op1, <2 x double> %op21069 %f.fast = select fast <2 x i1> %cond, <2 x double> %op1, <2 x double> %op21070 ; CHECK: %f.fast = select fast <2 x i1> %cond, <2 x double> %op1, <2 x double> %op21071 ret void1072}1073 1074define void @fastmathflags_array_select(i1 %cond, [2 x double] %op1, [2 x double] %op2) {1075 %f.nnan.nsz = select nnan nsz i1 %cond, [2 x double] %op1, [2 x double] %op21076 ; CHECK: %f.nnan.nsz = select nnan nsz i1 %cond, [2 x double] %op1, [2 x double] %op21077 %f.fast = select fast i1 %cond, [2 x double] %op1, [2 x double] %op21078 ; CHECK: %f.fast = select fast i1 %cond, [2 x double] %op1, [2 x double] %op21079 ret void1080}1081 1082define void @fastmathflags_phi(i1 %cond, float %f1, float %f2, double %d1, double %d2, half %h1, half %h2) {1083entry:1084 br i1 %cond, label %L1, label %L21085L1:1086 br label %exit1087L2:1088 br label %exit1089exit:1090 %p.nnan = phi nnan float [ %f1, %L1 ], [ %f2, %L2 ]1091 ; CHECK: %p.nnan = phi nnan float [ %f1, %L1 ], [ %f2, %L2 ]1092 %p.ninf = phi ninf double [ %d1, %L1 ], [ %d2, %L2 ]1093 ; CHECK: %p.ninf = phi ninf double [ %d1, %L1 ], [ %d2, %L2 ]1094 %p.contract = phi contract half [ %h1, %L1 ], [ %h2, %L2 ]1095 ; CHECK: %p.contract = phi contract half [ %h1, %L1 ], [ %h2, %L2 ]1096 %p.nsz.reassoc = phi reassoc nsz float [ %f1, %L1 ], [ %f2, %L2 ]1097 ; CHECK: %p.nsz.reassoc = phi reassoc nsz float [ %f1, %L1 ], [ %f2, %L2 ]1098 %p.fast = phi fast half [ %h2, %L1 ], [ %h1, %L2 ]1099 ; CHECK: %p.fast = phi fast half [ %h2, %L1 ], [ %h1, %L2 ]1100 ret void1101}1102 1103define void @fastmathflags_vector_phi(i1 %cond, <4 x float> %f1, <4 x float> %f2, <2 x double> %d1, <2 x double> %d2, <8 x half> %h1, <8 x half> %h2) {1104entry:1105 br i1 %cond, label %L1, label %L21106L1:1107 br label %exit1108L2:1109 br label %exit1110exit:1111 %p.nnan = phi nnan <4 x float> [ %f1, %L1 ], [ %f2, %L2 ]1112 ; CHECK: %p.nnan = phi nnan <4 x float> [ %f1, %L1 ], [ %f2, %L2 ]1113 %p.ninf = phi ninf <2 x double> [ %d1, %L1 ], [ %d2, %L2 ]1114 ; CHECK: %p.ninf = phi ninf <2 x double> [ %d1, %L1 ], [ %d2, %L2 ]1115 %p.contract = phi contract <8 x half> [ %h1, %L1 ], [ %h2, %L2 ]1116 ; CHECK: %p.contract = phi contract <8 x half> [ %h1, %L1 ], [ %h2, %L2 ]1117 %p.nsz.reassoc = phi reassoc nsz <4 x float> [ %f1, %L1 ], [ %f2, %L2 ]1118 ; CHECK: %p.nsz.reassoc = phi reassoc nsz <4 x float> [ %f1, %L1 ], [ %f2, %L2 ]1119 %p.fast = phi fast <8 x half> [ %h2, %L1 ], [ %h1, %L2 ]1120 ; CHECK: %p.fast = phi fast <8 x half> [ %h2, %L1 ], [ %h1, %L2 ]1121 ret void1122}1123 1124define void @fastmathflags_array_phi(i1 %cond, [4 x float] %f1, [4 x float] %f2, [2 x double] %d1, [2 x double] %d2, [8 x half] %h1, [8 x half] %h2) {1125entry:1126 br i1 %cond, label %L1, label %L21127L1:1128 br label %exit1129L2:1130 br label %exit1131exit:1132 %p.nnan = phi nnan [4 x float] [ %f1, %L1 ], [ %f2, %L2 ]1133 ; CHECK: %p.nnan = phi nnan [4 x float] [ %f1, %L1 ], [ %f2, %L2 ]1134 %p.ninf = phi ninf [2 x double] [ %d1, %L1 ], [ %d2, %L2 ]1135 ; CHECK: %p.ninf = phi ninf [2 x double] [ %d1, %L1 ], [ %d2, %L2 ]1136 %p.contract = phi contract [8 x half] [ %h1, %L1 ], [ %h2, %L2 ]1137 ; CHECK: %p.contract = phi contract [8 x half] [ %h1, %L1 ], [ %h2, %L2 ]1138 %p.nsz.reassoc = phi reassoc nsz [4 x float] [ %f1, %L1 ], [ %f2, %L2 ]1139 ; CHECK: %p.nsz.reassoc = phi reassoc nsz [4 x float] [ %f1, %L1 ], [ %f2, %L2 ]1140 %p.fast = phi fast [8 x half] [ %h2, %L1 ], [ %h1, %L2 ]1141 ; CHECK: %p.fast = phi fast [8 x half] [ %h2, %L1 ], [ %h1, %L2 ]1142 ret void1143}1144 1145; Check various fast math flags and floating-point types on calls.1146 1147declare float @fmf_f32()1148declare double @fmf_f64()1149declare <4 x double> @fmf_v4f64()1150 1151; CHECK-LABEL: fastMathFlagsForCalls(1152define void @fastMathFlagsForCalls(float %f, double %d1, <4 x double> %d2) {1153 %call.fast = call fast float @fmf_f32()1154 ; CHECK: %call.fast = call fast float @fmf_f32()1155 1156 ; Throw in some other attributes to make sure those stay in the right places.1157 1158 %call.nsz.arcp = notail call nsz arcp double @fmf_f64()1159 ; CHECK: %call.nsz.arcp = notail call nsz arcp double @fmf_f64()1160 1161 %call.nnan.ninf = tail call nnan ninf fastcc <4 x double> @fmf_v4f64()1162 ; CHECK: %call.nnan.ninf = tail call nnan ninf fastcc <4 x double> @fmf_v4f64()1163 1164 ret void1165}1166 1167declare [2 x float] @fmf_a2f32()1168declare [2 x double] @fmf_a2f64()1169declare [2 x <4 x double>] @fmf_a2v4f64()1170 1171; CHECK-LABEL: fastMathFlagsForArrayCalls(1172define void @fastMathFlagsForArrayCalls([2 x float] %f, [2 x double] %d1, [2 x <4 x double>] %d2) {1173 %call.fast = call fast [2 x float] @fmf_a2f32()1174 ; CHECK: %call.fast = call fast [2 x float] @fmf_a2f32()1175 1176 ; Throw in some other attributes to make sure those stay in the right places.1177 1178 %call.nsz.arcp = notail call nsz arcp [2 x double] @fmf_a2f64()1179 ; CHECK: %call.nsz.arcp = notail call nsz arcp [2 x double] @fmf_a2f64()1180 1181 %call.nnan.ninf = tail call nnan ninf fastcc [2 x <4 x double>] @fmf_a2v4f64()1182 ; CHECK: %call.nnan.ninf = tail call nnan ninf fastcc [2 x <4 x double>] @fmf_a2v4f64()1183 1184 ret void1185}1186 1187declare { float, float } @fmf_struct_f32()1188declare { double, double, double } @fmf_struct_f64()1189declare { <4 x double> } @fmf_struct_v4f64()1190 1191; CHECK-LABEL: fastMathFlagsForStructCalls(1192define void @fastMathFlagsForStructCalls() {1193 %call.fast = call fast { float, float } @fmf_struct_f32()1194 ; CHECK: %call.fast = call fast { float, float } @fmf_struct_f32()1195 1196 ; Throw in some other attributes to make sure those stay in the right places.1197 1198 %call.nsz.arcp = notail call nsz arcp { double, double, double } @fmf_struct_f64()1199 ; CHECK: %call.nsz.arcp = notail call nsz arcp { double, double, double } @fmf_struct_f64()1200 1201 %call.nnan.ninf = tail call nnan ninf fastcc { <4 x double> } @fmf_struct_v4f64()1202 ; CHECK: %call.nnan.ninf = tail call nnan ninf fastcc { <4 x double> } @fmf_struct_v4f64()1203 1204 ret void1205}1206 1207; CHECK-LABEL: fastmathflags_fpext(1208define void @fastmathflags_fpext(float %op1) {1209 %f.nnan = fpext nnan float %op1 to double1210 ; CHECK: %f.nnan = fpext nnan float %op1 to double1211 %f.ninf = fpext ninf float %op1 to double1212 ; CHECK: %f.ninf = fpext ninf float %op1 to double1213 %f.nsz = fpext nsz float %op1 to double1214 ; CHECK: %f.nsz = fpext nsz float %op1 to double1215 %f.arcp = fpext arcp float %op1 to double1216 ; CHECK: %f.arcp = fpext arcp float %op1 to double1217 %f.contract = fpext contract float %op1 to double1218 ; CHECK: %f.contract = fpext contract float %op1 to double1219 %f.afn = fpext afn float %op1 to double1220 ; CHECK: %f.afn = fpext afn float %op1 to double1221 %f.reassoc = fpext reassoc float %op1 to double1222 ; CHECK: %f.reassoc = fpext reassoc float %op1 to double1223 %f.fast = fpext fast float %op1 to double1224 ; CHECK: %f.fast = fpext fast float %op1 to double1225 ret void1226}1227 1228; CHECK-LABEL: fastmathflags_fptrunc(1229define void @fastmathflags_fptrunc(float %op1) {1230 %f.nnan = fptrunc nnan float %op1 to half1231 ; CHECK: %f.nnan = fptrunc nnan float %op1 to half1232 %f.ninf = fptrunc ninf float %op1 to half1233 ; CHECK: %f.ninf = fptrunc ninf float %op1 to half1234 %f.nsz = fptrunc nsz float %op1 to half1235 ; CHECK: %f.nsz = fptrunc nsz float %op1 to half1236 %f.arcp = fptrunc arcp float %op1 to half1237 ; CHECK: %f.arcp = fptrunc arcp float %op1 to half1238 %f.contract = fptrunc contract float %op1 to half1239 ; CHECK: %f.contract = fptrunc contract float %op1 to half1240 %f.afn = fptrunc afn float %op1 to half1241 ; CHECK: %f.afn = fptrunc afn float %op1 to half1242 %f.reassoc = fptrunc reassoc float %op1 to half1243 ; CHECK: %f.reassoc = fptrunc reassoc float %op1 to half1244 %f.fast = fptrunc fast float %op1 to half1245 ; CHECK: %f.fast = fptrunc fast float %op1 to half1246 ret void1247}1248 1249;; Type System1250%opaquety = type opaque1251define void @typesystem() {1252 1253 %t0 = alloca i19426521254 ; CHECK: %t0 = alloca i19426521255 %t1 = alloca half1256 ; CHECK: %t1 = alloca half1257 %t2 = alloca float1258 ; CHECK: %t2 = alloca float1259 %t3 = alloca double1260 ; CHECK: %t3 = alloca double1261 %t4 = alloca fp1281262 ; CHECK: %t4 = alloca fp1281263 %t5 = alloca x86_fp801264 ; CHECK: %t5 = alloca x86_fp801265 %t6 = alloca ppc_fp1281266 ; CHECK: %t6 = alloca ppc_fp1281267 %t8 = alloca ptr1268 ; CHECK: %t8 = alloca ptr1269 %t9 = alloca <4 x i32>1270 ; CHECK: %t9 = alloca <4 x i32>1271 %t10 = alloca <vscale x 4 x i32>1272 ; CHECK: %t10 = alloca <vscale x 4 x i32>1273 1274 ret void1275}1276 1277declare void @llvm.token(token)1278; CHECK: declare void @llvm.token(token)1279 1280;; Inline Assembler Expressions1281define void @inlineasm(i32 %arg) {1282 call i32 asm "bswap $0", "=r,r"(i32 %arg)1283 ; CHECK: call i32 asm "bswap $0", "=r,r"(i32 %arg)1284 call i32 asm sideeffect "blt $1, $2, $3", "=r,r,rm"(i32 %arg, i32 %arg)1285 ; CHECK: call i32 asm sideeffect "blt $1, $2, $3", "=r,r,rm"(i32 %arg, i32 %arg)1286 ret void1287}1288 1289;; Instructions1290 1291; Instructions -- Terminators1292define void @instructions.terminators(i8 %val) personality i32 -10 {1293 br i1 false, label %iftrue, label %iffalse1294 ; CHECK: br i1 false, label %iftrue, label %iffalse1295 br label %iftrue1296 ; CHECK: br label %iftrue1297iftrue:1298 ret void1299 ; CHECK: ret void1300iffalse:1301 1302 switch i8 %val, label %defaultdest [1303 ; CHECK: switch i8 %val, label %defaultdest [1304 i8 0, label %defaultdest.01305 ; CHECK: i8 0, label %defaultdest.01306 i8 1, label %defaultdest.11307 ; CHECK: i8 1, label %defaultdest.11308 i8 2, label %defaultdest.21309 ; CHECK: i8 2, label %defaultdest.21310 ]1311 ; CHECK: ]1312defaultdest:1313 ret void1314defaultdest.0:1315 ret void1316defaultdest.1:1317 ret void1318defaultdest.2:1319 1320 indirectbr ptr blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2]1321 ; CHECK: indirectbr ptr blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2]1322 indirectbr ptr blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2, label %defaultdest.2]1323 ; CHECK: indirectbr ptr blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2, label %defaultdest.2]1324 1325 invoke fastcc void @f.fastcc()1326 ; CHECK: invoke fastcc void @f.fastcc()1327 to label %defaultdest unwind label %exc1328 ; CHECK: to label %defaultdest unwind label %exc1329exc:1330 %cleanup = landingpad i32 cleanup1331 1332 resume i32 undef1333 ; CHECK: resume i32 undef1334 resume i32 poison1335 ; CHECK: resume i32 poison1336 unreachable1337 ; CHECK: unreachable1338 1339 ret void1340}1341 1342define i32 @instructions.win_eh.1() personality i32 -3 {1343entry:1344 %arg1 = alloca i321345 %arg2 = alloca i321346 invoke void @f.ccc() to label %normal unwind label %catchswitch11347 invoke void @f.ccc() to label %normal unwind label %catchswitch21348 invoke void @f.ccc() to label %normal unwind label %catchswitch31349 1350catchswitch1:1351 %cs1 = catchswitch within none [label %catchpad1] unwind to caller1352 1353catchpad1:1354 catchpad within %cs1 []1355 br label %normal1356 ; CHECK: catchpad within %cs1 []1357 ; CHECK-NEXT: br label %normal1358 1359catchswitch2:1360 %cs2 = catchswitch within none [label %catchpad2] unwind to caller1361 1362catchpad2:1363 catchpad within %cs2 [ptr %arg1]1364 br label %normal1365 ; CHECK: catchpad within %cs2 [ptr %arg1]1366 ; CHECK-NEXT: br label %normal1367 1368catchswitch3:1369 %cs3 = catchswitch within none [label %catchpad3] unwind label %cleanuppad11370 1371catchpad3:1372 catchpad within %cs3 [ptr %arg1, ptr %arg2]1373 br label %normal1374 ; CHECK: catchpad within %cs3 [ptr %arg1, ptr %arg2]1375 ; CHECK-NEXT: br label %normal1376 1377cleanuppad1:1378 %clean.1 = cleanuppad within none []1379 unreachable1380 ; CHECK: %clean.1 = cleanuppad within none []1381 ; CHECK-NEXT: unreachable1382 1383normal:1384 ret i32 01385}1386;1387define i32 @instructions.win_eh.2() personality i32 -4 {1388entry:1389 invoke void @f.ccc() to label %invoke.cont unwind label %catchswitch1390 1391invoke.cont:1392 invoke void @f.ccc() to label %continue unwind label %cleanup1393 1394cleanup:1395 %clean = cleanuppad within none []1396 ; CHECK: %clean = cleanuppad within none []1397 cleanupret from %clean unwind to caller1398 ; CHECK: cleanupret from %clean unwind to caller1399 1400catchswitch:1401 %cs = catchswitch within none [label %catchpad] unwind label %terminate1402 1403catchpad:1404 %catch = catchpad within %cs []1405 br label %body1406 ; CHECK: %catch = catchpad within %cs []1407 ; CHECK-NEXT: br label %body1408 1409body:1410 invoke void @f.ccc() [ "funclet"(token %catch) ]1411 to label %continue unwind label %terminate.inner1412 catchret from %catch to label %return1413 ; CHECK: catchret from %catch to label %return1414 1415return:1416 ret i32 01417 1418terminate.inner:1419 cleanuppad within %catch []1420 unreachable1421 ; CHECK: cleanuppad within %catch []1422 ; CHECK-NEXT: unreachable1423 1424terminate:1425 cleanuppad within none []1426 unreachable1427 ; CHECK: cleanuppad within none []1428 ; CHECK-NEXT: unreachable1429 1430continue:1431 ret i32 01432}1433 1434declare void @instructions.bundles.callee(i32)1435define void @instructions.bundles.metadata(i32 %x) {1436entry:1437 call void @instructions.bundles.callee(i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ]1438; CHECK: call void @instructions.bundles.callee(i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ]1439 ret void1440}1441 1442; Instructions -- Unary Operations1443define void @instructions.unops(double %op1) {1444 fneg double %op11445 ; CHECK: fneg double %op11446 ret void1447}1448 1449; Instructions -- Binary Operations1450define void @instructions.binops(i8 %op1, i8 %op2) {1451 ; nuw x nsw1452 add i8 %op1, %op21453 ; CHECK: add i8 %op1, %op21454 add nuw i8 %op1, %op21455 ; CHECK: add nuw i8 %op1, %op21456 add nsw i8 %op1, %op21457 ; CHECK: add nsw i8 %op1, %op21458 add nuw nsw i8 %op1, %op21459 ; CHECK: add nuw nsw i8 %op1, %op21460 sub i8 %op1, %op21461 ; CHECK: sub i8 %op1, %op21462 sub nuw i8 %op1, %op21463 ; CHECK: sub nuw i8 %op1, %op21464 sub nsw i8 %op1, %op21465 ; CHECK: sub nsw i8 %op1, %op21466 sub nuw nsw i8 %op1, %op21467 ; CHECK: sub nuw nsw i8 %op1, %op21468 mul i8 %op1, %op21469 ; CHECK: mul i8 %op1, %op21470 mul nuw i8 %op1, %op21471 ; CHECK: mul nuw i8 %op1, %op21472 mul nsw i8 %op1, %op21473 ; CHECK: mul nsw i8 %op1, %op21474 mul nuw nsw i8 %op1, %op21475 ; CHECK: mul nuw nsw i8 %op1, %op21476 1477 ; exact1478 udiv i8 %op1, %op21479 ; CHECK: udiv i8 %op1, %op21480 udiv exact i8 %op1, %op21481 ; CHECK: udiv exact i8 %op1, %op21482 sdiv i8 %op1, %op21483 ; CHECK: sdiv i8 %op1, %op21484 sdiv exact i8 %op1, %op21485 ; CHECK: sdiv exact i8 %op1, %op21486 1487 ; none1488 urem i8 %op1, %op21489 ; CHECK: urem i8 %op1, %op21490 srem i8 %op1, %op21491 ; CHECK: srem i8 %op1, %op21492 1493 ret void1494}1495 1496; Instructions -- Bitwise Binary Operations1497define void @instructions.bitwise_binops(i8 %op1, i8 %op2) {1498 ; nuw x nsw1499 shl i8 %op1, %op21500 ; CHECK: shl i8 %op1, %op21501 shl nuw i8 %op1, %op21502 ; CHECK: shl nuw i8 %op1, %op21503 shl nsw i8 %op1, %op21504 ; CHECK: shl nsw i8 %op1, %op21505 shl nuw nsw i8 %op1, %op21506 ; CHECK: shl nuw nsw i8 %op1, %op21507 1508 ; exact1509 lshr i8 %op1, %op21510 ; CHECK: lshr i8 %op1, %op21511 lshr exact i8 %op1, %op21512 ; CHECK: lshr exact i8 %op1, %op21513 ashr i8 %op1, %op21514 ; CHECK: ashr i8 %op1, %op21515 ashr exact i8 %op1, %op21516 ; CHECK: ashr exact i8 %op1, %op21517 1518 ; none1519 and i8 %op1, %op21520 ; CHECK: and i8 %op1, %op21521 or i8 %op1, %op21522 ; CHECK: or i8 %op1, %op21523 xor i8 %op1, %op21524 ; CHECK: xor i8 %op1, %op21525 1526 ; disjoint1527 or disjoint i8 %op1, %op21528 ; CHECK: or disjoint i8 %op1, %op21529 1530 ret void1531}1532 1533; Instructions -- Vector Operations1534define void @instructions.vectorops(<4 x float> %vec, <4 x float> %vec2) {1535 extractelement <4 x float> %vec, i8 01536 ; CHECK: extractelement <4 x float> %vec, i8 01537 insertelement <4 x float> %vec, float 3.500000e+00, i8 01538 ; CHECK: insertelement <4 x float> %vec, float 3.500000e+00, i8 01539 shufflevector <4 x float> %vec, <4 x float> %vec2, <2 x i32> zeroinitializer1540 ; CHECK: shufflevector <4 x float> %vec, <4 x float> %vec2, <2 x i32> zeroinitializer1541 1542 ret void1543}1544 1545; Instructions -- Aggregate Operations1546define void @instructions.aggregateops({ i8, i32 } %up, <{ i8, i32 }> %p,1547 [3 x i8] %arr, { i8, { i32 }} %n,1548 <2 x ptr> %pvec, <2 x i64> %offsets) {1549 extractvalue { i8, i32 } %up, 01550 ; CHECK: extractvalue { i8, i32 } %up, 01551 extractvalue <{ i8, i32 }> %p, 11552 ; CHECK: extractvalue <{ i8, i32 }> %p, 11553 extractvalue [3 x i8] %arr, 21554 ; CHECK: extractvalue [3 x i8] %arr, 21555 extractvalue { i8, { i32 } } %n, 1, 01556 ; CHECK: extractvalue { i8, { i32 } } %n, 1, 01557 1558 insertvalue { i8, i32 } %up, i8 1, 01559 ; CHECK: insertvalue { i8, i32 } %up, i8 1, 01560 insertvalue <{ i8, i32 }> %p, i32 2, 11561 ; CHECK: insertvalue <{ i8, i32 }> %p, i32 2, 11562 insertvalue [3 x i8] %arr, i8 0, 01563 ; CHECK: insertvalue [3 x i8] %arr, i8 0, 01564 insertvalue { i8, { i32 } } %n, i32 0, 1, 01565 ; CHECK: insertvalue { i8, { i32 } } %n, i32 0, 1, 01566 1567 %up.ptr = alloca { i8, i32 }1568 %p.ptr = alloca <{ i8, i32 }>1569 %arr.ptr = alloca [3 x i8]1570 %n.ptr = alloca { i8, { i32 } }1571 1572 getelementptr { i8, i32 }, ptr %up.ptr, i8 01573 ; CHECK: getelementptr { i8, i32 }, ptr %up.ptr, i8 01574 getelementptr <{ i8, i32 }>, ptr %p.ptr, i8 11575 ; CHECK: getelementptr <{ i8, i32 }>, ptr %p.ptr, i8 11576 getelementptr [3 x i8], ptr %arr.ptr, i8 21577 ; CHECK: getelementptr [3 x i8], ptr %arr.ptr, i8 21578 getelementptr { i8, { i32 } }, ptr %n.ptr, i32 0, i32 11579 ; CHECK: getelementptr { i8, { i32 } }, ptr %n.ptr, i32 0, i32 11580 getelementptr inbounds { i8, { i32 } }, ptr %n.ptr, i32 1, i32 01581 ; CHECK: getelementptr inbounds { i8, { i32 } }, ptr %n.ptr, i32 1, i32 01582 getelementptr i8, <2 x ptr> %pvec, <2 x i64> %offsets1583 ; CHECK: getelementptr i8, <2 x ptr> %pvec, <2 x i64> %offsets1584 1585 ret void1586}1587 1588; Instructions -- Memory Access and Addressing Operations1589!7 = !{i32 1}1590!8 = !{}1591!9 = !{i64 4}1592define void @instructions.memops(ptr %base) {1593 alloca i32, i8 4, align 41594 ; CHECK: alloca i32, i8 4, align 41595 alloca inalloca i32, i8 4, align 41596 ; CHECK: alloca inalloca i32, i8 4, align 41597 1598 load ptr, ptr %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !8, !dereferenceable !9, !dereferenceable_or_null !91599 ; CHECK: load ptr, ptr %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !8, !dereferenceable !9, !dereferenceable_or_null !91600 load volatile ptr, ptr %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !8, !dereferenceable !9, !dereferenceable_or_null !91601 ; CHECK: load volatile ptr, ptr %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !8, !dereferenceable !9, !dereferenceable_or_null !91602 1603 store ptr null, ptr %base, align 4, !nontemporal !81604 ; CHECK: store ptr null, ptr %base, align 4, !nontemporal !81605 store volatile ptr null, ptr %base, align 4, !nontemporal !81606 ; CHECK: store volatile ptr null, ptr %base, align 4, !nontemporal !81607 1608 ret void1609}1610 1611; Instructions -- Conversion Operations1612define void @instructions.conversions() {1613 trunc i32 -1 to i11614 ; CHECK: trunc i32 -1 to i11615 zext i32 -1 to i641616 ; CHECK: zext i32 -1 to i641617 sext i32 -1 to i641618 ; CHECK: sext i32 -1 to i641619 fptrunc float undef to half1620 ; CHECK: fptrunc float undef to half1621 fpext half undef to float1622 ; CHECK: fpext half undef to float1623 fptoui float undef to i321624 ; CHECK: fptoui float undef to i321625 fptosi float undef to i321626 ; CHECK: fptosi float undef to i321627 fptrunc float poison to half1628 ; CHECK: fptrunc float poison to half1629 fpext half poison to float1630 ; CHECK: fpext half poison to float1631 fptoui float poison to i321632 ; CHECK: fptoui float poison to i321633 fptosi float poison to i321634 ; CHECK: fptosi float poison to i321635 uitofp i32 1 to float1636 ; CHECK: uitofp i32 1 to float1637 sitofp i32 -1 to float1638 ; CHECK: sitofp i32 -1 to float1639 ptrtoint ptr null to i641640 ; CHECK: ptrtoint ptr null to i641641 inttoptr i64 0 to ptr1642 ; CHECK: inttoptr i64 0 to ptr1643 bitcast i32 0 to i321644 ; CHECK: bitcast i32 0 to i321645 addrspacecast ptr null to ptr addrspace(1)1646 ; CHECK: addrspacecast ptr null to ptr addrspace(1)1647 1648 ret void1649}1650 1651; Instructions -- Other Operations1652define void @instructions.other(i32 %op1, i32 %op2, half %fop1, half %fop2, <2 x i32> %vop, ptr %pop) {1653entry:1654 icmp eq i32 %op1, %op21655 ; CHECK: icmp eq i32 %op1, %op21656 icmp ne i32 %op1, %op21657 ; CHECK: icmp ne i32 %op1, %op21658 icmp ugt i32 %op1, %op21659 ; CHECK: icmp ugt i32 %op1, %op21660 icmp uge i32 %op1, %op21661 ; CHECK: icmp uge i32 %op1, %op21662 icmp ult i32 %op1, %op21663 ; CHECK: icmp ult i32 %op1, %op21664 icmp ule i32 %op1, %op21665 ; CHECK: icmp ule i32 %op1, %op21666 icmp sgt i32 %op1, %op21667 ; CHECK: icmp sgt i32 %op1, %op21668 icmp sge i32 %op1, %op21669 ; CHECK: icmp sge i32 %op1, %op21670 icmp slt i32 %op1, %op21671 ; CHECK: icmp slt i32 %op1, %op21672 icmp sle i32 %op1, %op21673 ; CHECK: icmp sle i32 %op1, %op21674 1675 fcmp false half %fop1, %fop21676 ; CHECK: fcmp false half %fop1, %fop21677 fcmp oeq half %fop1, %fop21678 ; CHECK: fcmp oeq half %fop1, %fop21679 fcmp ogt half %fop1, %fop21680 ; CHECK: fcmp ogt half %fop1, %fop21681 fcmp oge half %fop1, %fop21682 ; CHECK: fcmp oge half %fop1, %fop21683 fcmp olt half %fop1, %fop21684 ; CHECK: fcmp olt half %fop1, %fop21685 fcmp ole half %fop1, %fop21686 ; CHECK: fcmp ole half %fop1, %fop21687 fcmp one half %fop1, %fop21688 ; CHECK: fcmp one half %fop1, %fop21689 fcmp ord half %fop1, %fop21690 ; CHECK: fcmp ord half %fop1, %fop21691 fcmp ueq half %fop1, %fop21692 ; CHECK: fcmp ueq half %fop1, %fop21693 fcmp ugt half %fop1, %fop21694 ; CHECK: fcmp ugt half %fop1, %fop21695 fcmp uge half %fop1, %fop21696 ; CHECK: fcmp uge half %fop1, %fop21697 fcmp ult half %fop1, %fop21698 ; CHECK: fcmp ult half %fop1, %fop21699 fcmp ule half %fop1, %fop21700 ; CHECK: fcmp ule half %fop1, %fop21701 fcmp une half %fop1, %fop21702 ; CHECK: fcmp une half %fop1, %fop21703 fcmp uno half %fop1, %fop21704 ; CHECK: fcmp uno half %fop1, %fop21705 fcmp true half %fop1, %fop21706 ; CHECK: fcmp true half %fop1, %fop21707 1708 br label %exit1709L1:1710 %v1 = add i32 %op1, %op21711 br label %exit1712L2:1713 %v2 = add i32 %op1, %op21714 br label %exit1715exit:1716 phi i32 [ %v1, %L1 ], [ %v2, %L2 ], [ %op1, %entry ]1717 ; CHECK: phi i32 [ %v1, %L1 ], [ %v2, %L2 ], [ %op1, %entry ]1718 1719 select i1 true, i32 0, i32 11720 ; CHECK: select i1 true, i32 0, i32 11721 select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2>1722 ; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2>1723 1724 call void @f.nobuiltin() builtin1725 ; CHECK: call void @f.nobuiltin() #551726 1727 call fastcc noalias ptr @f.noalias() noinline1728 ; CHECK: call fastcc noalias ptr @f.noalias() #121729 tail call ghccc nonnull ptr @f.nonnull() minsize1730 ; CHECK: tail call ghccc nonnull ptr @f.nonnull() #71731 1732 freeze i32 %op11733 ; CHECK: freeze i32 %op11734 freeze i32 101735 ; CHECK: freeze i32 101736 freeze half %fop11737 ; CHECK: freeze half %fop11738 freeze <2 x i32> %vop1739 ; CHECK: freeze <2 x i32> %vop1740 freeze ptr %pop1741 ; CHECK: freeze ptr %pop1742 ret void1743}1744 1745define void @instructions.call_musttail(ptr inalloca(i8) %val) {1746 musttail call void @f.param.inalloca(ptr inalloca(i8) %val)1747 ; CHECK: musttail call void @f.param.inalloca(ptr inalloca(i8) %val)1748 1749 ret void1750}1751 1752define void @instructions.call_notail() {1753 notail call void @f1()1754 ; CHECK: notail call void @f1()1755 1756 ret void1757}1758 1759define void @instructions.landingpad() personality i32 -2 {1760 invoke void @llvm.donothing() to label %proceed unwind label %catch11761 invoke void @llvm.donothing() to label %proceed unwind label %catch21762 invoke void @llvm.donothing() to label %proceed unwind label %catch31763 invoke void @llvm.donothing() to label %proceed unwind label %catch41764 1765catch1:1766 landingpad i321767 ; CHECK: landingpad i321768 cleanup1769 ; CHECK: cleanup1770 br label %proceed1771 1772catch2:1773 landingpad i321774 ; CHECK: landingpad i321775 cleanup1776 ; CHECK: cleanup1777 catch ptr null1778 ; CHECK: catch ptr null1779 br label %proceed1780 1781catch3:1782 landingpad i321783 ; CHECK: landingpad i321784 cleanup1785 ; CHECK: cleanup1786 catch ptr null1787 ; CHECK: catch ptr null1788 catch ptr null1789 ; CHECK: catch ptr null1790 br label %proceed1791 1792catch4:1793 landingpad i321794 ; CHECK: landingpad i321795 filter [2 x i32] zeroinitializer1796 ; CHECK: filter [2 x i32] zeroinitializer1797 br label %proceed1798 1799proceed:1800 ret void1801}1802 1803;; Intrinsic Functions1804 1805; Intrinsic Functions -- Variable Argument Handling1806declare void @llvm.va_start(ptr)1807declare void @llvm.va_copy(ptr, ptr)1808declare void @llvm.va_end(ptr)1809define void @instructions.va_arg(ptr %v, ...) {1810 %ap = alloca ptr1811 1812 call void @llvm.va_start(ptr %ap)1813 ; CHECK: call void @llvm.va_start.p0(ptr %ap)1814 1815 va_arg ptr %ap, i321816 ; CHECK: va_arg ptr %ap, i321817 1818 call void @llvm.va_copy(ptr %v, ptr %ap)1819 ; CHECK: call void @llvm.va_copy.p0(ptr %v, ptr %ap)1820 1821 call void @llvm.va_end(ptr %ap)1822 ; CHECK: call void @llvm.va_end.p0(ptr %ap)1823 1824 ret void1825}1826 1827; Intrinsic Functions -- Accurate Garbage Collection1828declare void @llvm.gcroot(ptr, ptr)1829declare ptr @llvm.gcread(ptr, ptr)1830declare void @llvm.gcwrite(ptr, ptr, ptr)1831define void @intrinsics.gc() gc "shadow-stack" {1832 %ptrloc = alloca ptr1833 call void @llvm.gcroot(ptr %ptrloc, ptr null)1834 ; CHECK: call void @llvm.gcroot(ptr %ptrloc, ptr null)1835 1836 call ptr @llvm.gcread(ptr null, ptr %ptrloc)1837 ; CHECK: call ptr @llvm.gcread(ptr null, ptr %ptrloc)1838 1839 %ref = alloca i81840 call void @llvm.gcwrite(ptr %ref, ptr null, ptr %ptrloc)1841 ; CHECK: call void @llvm.gcwrite(ptr %ref, ptr null, ptr %ptrloc)1842 1843 ret void1844}1845 1846; Intrinsic Functions -- Code Generation1847declare ptr @llvm.returnaddress(i32)1848declare ptr @llvm.frameaddress(i32)1849declare i32 @llvm.read_register.i32(metadata)1850declare i64 @llvm.read_register.i64(metadata)1851declare void @llvm.write_register.i32(metadata, i32)1852declare void @llvm.write_register.i64(metadata, i64)1853declare ptr @llvm.stacksave()1854declare void @llvm.stackrestore(ptr)1855declare void @llvm.prefetch.p0(ptr, i32, i32, i32)1856declare void @llvm.pcmarker(i32)1857declare i64 @llvm.readcyclecounter()1858declare void @llvm.clear_cache(ptr, ptr)1859declare void @llvm.instrprof_increment(ptr, i64, i32, i32)1860 1861!10 = !{!"rax"}1862define void @intrinsics.codegen() {1863 call ptr @llvm.returnaddress(i32 1)1864 ; CHECK: call ptr @llvm.returnaddress(i32 1)1865 call ptr @llvm.frameaddress(i32 1)1866 ; CHECK: call ptr @llvm.frameaddress.p0(i32 1)1867 1868 call i32 @llvm.read_register.i32(metadata !10)1869 ; CHECK: call i32 @llvm.read_register.i32(metadata !10)1870 call i64 @llvm.read_register.i64(metadata !10)1871 ; CHECK: call i64 @llvm.read_register.i64(metadata !10)1872 call void @llvm.write_register.i32(metadata !10, i32 0)1873 ; CHECK: call void @llvm.write_register.i32(metadata !10, i32 0)1874 call void @llvm.write_register.i64(metadata !10, i64 0)1875 ; CHECK: call void @llvm.write_register.i64(metadata !10, i64 0)1876 1877 %stack = call ptr @llvm.stacksave()1878 ; CHECK: %stack = call ptr @llvm.stacksave.p0()1879 call void @llvm.stackrestore(ptr %stack)1880 ; CHECK: call void @llvm.stackrestore.p0(ptr %stack)1881 1882 call void @llvm.prefetch.p0(ptr %stack, i32 0, i32 3, i32 0)1883 ; CHECK: call void @llvm.prefetch.p0(ptr %stack, i32 0, i32 3, i32 0)1884 1885 call void @llvm.pcmarker(i32 1)1886 ; CHECK: call void @llvm.pcmarker(i32 1)1887 1888 call i64 @llvm.readcyclecounter()1889 ; CHECK: call i64 @llvm.readcyclecounter()1890 1891 call void @llvm.clear_cache(ptr null, ptr null)1892 ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)1893 1894 call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)1895 ; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)1896 1897 ret void1898}1899 1900declare void @llvm.localescape(...)1901declare ptr @llvm.localrecover(ptr %func, ptr %fp, i32 %idx)1902define void @intrinsics.localescape() {1903 %static.alloca = alloca i321904 call void (...) @llvm.localescape(ptr %static.alloca)1905 ; CHECK: call void (...) @llvm.localescape(ptr %static.alloca)1906 1907 call void @intrinsics.localrecover()1908 1909 ret void1910}1911define void @intrinsics.localrecover() {1912 %fp = call ptr @llvm.frameaddress(i32 1)1913 call ptr @llvm.localrecover(ptr @intrinsics.localescape, ptr %fp, i32 0)1914 ; CHECK: call ptr @llvm.localrecover(ptr @intrinsics.localescape, ptr %fp, i32 0)1915 1916 ret void1917}1918 1919; We need this function to provide `uses' for some metadata tests.1920define void @misc.metadata() {1921 call void @f1(), !srcloc !111922 call void @f1(), !srcloc !121923 call void @f1(), !srcloc !131924 call void @f1(), !srcloc !141925 ret void1926}1927 1928declare void @op_bundle_callee_0()1929declare void @op_bundle_callee_1(i32,i32)1930 1931define void @call_with_operand_bundle0(ptr %ptr) {1932; CHECK-LABEL: call_with_operand_bundle0(1933 entry:1934 %l = load i32, ptr %ptr1935 %x = add i32 42, 11936 call void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ]1937; CHECK: call void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ]1938 ret void1939}1940 1941define void @call_with_operand_bundle1(ptr %ptr) {1942; CHECK-LABEL: call_with_operand_bundle1(1943 entry:1944 %l = load i32, ptr %ptr1945 %x = add i32 42, 11946 1947 call void @op_bundle_callee_0()1948 call void @op_bundle_callee_0() [ "foo"() ]1949 call void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ]1950; CHECK: @op_bundle_callee_0(){{$}}1951; CHECK-NEXT: call void @op_bundle_callee_0() [ "foo"() ]1952; CHECK-NEXT: call void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ]1953 ret void1954}1955 1956define void @call_with_operand_bundle2(ptr %ptr) {1957; CHECK-LABEL: call_with_operand_bundle2(1958 entry:1959 call void @op_bundle_callee_0() [ "foo"() ]1960; CHECK: call void @op_bundle_callee_0() [ "foo"() ]1961 ret void1962}1963 1964define void @call_with_operand_bundle3(ptr %ptr) {1965; CHECK-LABEL: call_with_operand_bundle3(1966 entry:1967 %l = load i32, ptr %ptr1968 %x = add i32 42, 11969 call void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]1970; CHECK: call void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]1971 ret void1972}1973 1974define void @call_with_operand_bundle4(ptr %ptr) {1975; CHECK-LABEL: call_with_operand_bundle4(1976 entry:1977 %l = load i32, ptr %ptr1978 %x = add i32 42, 11979 call void @op_bundle_callee_1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]1980; CHECK: call void @op_bundle_callee_1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]1981 ret void1982}1983 1984; Invoke versions of the above tests:1985 1986 1987define void @invoke_with_operand_bundle0(ptr %ptr) personality i8 3 {1988; CHECK-LABEL: @invoke_with_operand_bundle0(1989 entry:1990 %l = load i32, ptr %ptr1991 %x = add i32 42, 11992 invoke void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] to label %normal unwind label %exception1993; CHECK: invoke void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ]1994 1995exception:1996 %cleanup = landingpad i8 cleanup1997 br label %normal1998normal:1999 ret void2000}2001 2002define void @invoke_with_operand_bundle1(ptr %ptr) personality i8 3 {2003; CHECK-LABEL: @invoke_with_operand_bundle1(2004 entry:2005 %l = load i32, ptr %ptr2006 %x = add i32 42, 12007 2008 invoke void @op_bundle_callee_0() to label %normal unwind label %exception2009; CHECK: invoke void @op_bundle_callee_0(){{$}}2010 2011exception:2012 %cleanup = landingpad i8 cleanup2013 br label %normal2014 2015normal:2016 invoke void @op_bundle_callee_0() [ "foo"() ] to label %normal1 unwind label %exception12017; CHECK: invoke void @op_bundle_callee_0() [ "foo"() ]2018 2019exception1:2020 %cleanup1 = landingpad i8 cleanup2021 br label %normal12022 2023normal1:2024 invoke void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] to label %normal2 unwind label %exception22025; CHECK: invoke void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]2026 2027exception2:2028 %cleanup2 = landingpad i8 cleanup2029 br label %normal22030 2031normal2:2032 ret void2033}2034 2035define void @invoke_with_operand_bundle2(ptr %ptr) personality i8 3 {2036; CHECK-LABEL: @invoke_with_operand_bundle2(2037 entry:2038 invoke void @op_bundle_callee_0() [ "foo"() ] to label %normal unwind label %exception2039; CHECK: invoke void @op_bundle_callee_0() [ "foo"() ]2040 2041exception:2042 %cleanup = landingpad i8 cleanup2043 br label %normal2044normal:2045 ret void2046}2047 2048define void @invoke_with_operand_bundle3(ptr %ptr) personality i8 3 {2049; CHECK-LABEL: @invoke_with_operand_bundle3(2050 entry:2051 %l = load i32, ptr %ptr2052 %x = add i32 42, 12053 invoke void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] to label %normal unwind label %exception2054; CHECK: invoke void @op_bundle_callee_0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]2055 2056exception:2057 %cleanup = landingpad i8 cleanup2058 br label %normal2059normal:2060 ret void2061}2062 2063define void @invoke_with_operand_bundle4(ptr %ptr) personality i8 3 {2064; CHECK-LABEL: @invoke_with_operand_bundle4(2065 entry:2066 %l = load i32, ptr %ptr2067 %x = add i32 42, 12068 invoke void @op_bundle_callee_1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]2069 to label %normal unwind label %exception2070; CHECK: invoke void @op_bundle_callee_1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]2071 2072exception:2073 %cleanup = landingpad i8 cleanup2074 br label %normal2075normal:2076 ret void2077}2078 2079declare void @vaargs_func(...)2080define void @invoke_with_operand_bundle_vaarg(ptr %ptr) personality i8 3 {2081; CHECK-LABEL: @invoke_with_operand_bundle_vaarg(2082 entry:2083 %l = load i32, ptr %ptr2084 %x = add i32 42, 12085 invoke void (...) @vaargs_func(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]2086 to label %normal unwind label %exception2087; CHECK: invoke void (...) @vaargs_func(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ]2088 2089exception:2090 %cleanup = landingpad i8 cleanup2091 br label %normal2092normal:2093 ret void2094}2095 2096 2097declare void @f.writeonly() writeonly2098; CHECK: declare void @f.writeonly() #422099 2100declare void @f.speculatable() speculatable2101; CHECK: declare void @f.speculatable() #432102 2103;; Constant Expressions2104 2105define ptr @constexpr() {2106 ; CHECK: ret ptr getelementptr inbounds inrange(-16, 16) ({ [4 x ptr], [4 x ptr] }, ptr null, i32 0, i32 1, i32 2)2107 ret ptr getelementptr inbounds inrange(-16, 16) ({ [4 x ptr], [4 x ptr] }, ptr null, i32 0, i32 1, i32 2)2108}2109 2110define void @instructions.strictfp() strictfp {2111 call void @f.strictfp() strictfp2112 ; CHECK: call void @f.strictfp() #442113 2114 ret void2115}2116 2117declare void @f.nosanitize_coverage() nosanitize_coverage2118; CHECK: declare void @f.nosanitize_coverage() #452119 2120declare void @f.disable_sanitizer_instrumentation() disable_sanitizer_instrumentation2121; CHECK: declare void @f.disable_sanitizer_instrumentation() #462122 2123; immarg attribute2124declare void @llvm.test.immarg.intrinsic(i32 immarg)2125; CHECK: declare void @llvm.test.immarg.intrinsic(i32 immarg)2126 2127; byval attribute with type2128%named_type = type [8 x i8]2129declare void @byval_type(ptr byval(i32) align 2)2130declare void @byval_type2(ptr byval({ i8, ptr }))2131declare void @byval_named_type(ptr byval(%named_type))2132; CHECK: declare void @byval_type(ptr byval(i32) align 2)2133; CHECK: declare void @byval_type2(ptr byval({ i8, ptr }))2134; CHECK: declare void @byval_named_type(ptr byval([8 x i8]))2135 2136declare void @f.allocsize_one(i32) allocsize(0)2137declare void @f.allocsize_two(i32, i32) allocsize(1, 0)2138; CHECK: Function Attrs: allocsize(0)2139; CHECK: declare void @f.allocsize_one(i32)2140; CHECK: Function Attrs: allocsize(1,0)2141; CHECK: declare void @f.allocsize_two(i32, i32)2142 2143declare void @f.nosanitize_bounds() nosanitize_bounds2144; CHECK: declare void @f.nosanitize_bounds() #492145 2146declare void @f.allockind() allockind("alloc,uninitialized")2147; CHECK: declare void @f.allockind() #502148 2149declare void @f.sanitize_numerical_stability() sanitize_numerical_stability2150; CHECK: declare void @f.sanitize_numerical_stability() #512151 2152declare void @f.sanitize_realtime() sanitize_realtime2153; CHECK: declare void @f.sanitize_realtime() #522154 2155declare void @f.sanitize_realtime_blocking() sanitize_realtime_blocking2156; CHECK: declare void @f.sanitize_realtime_blocking() #532157 2158declare void @f.sanitize_alloc_token() sanitize_alloc_token2159; CHECK: declare void @f.sanitize_alloc_token() #542160 2161; CHECK: declare nofpclass(snan) float @nofpclass_snan(float nofpclass(snan))2162declare nofpclass(snan) float @nofpclass_snan(float nofpclass(snan))2163 2164; CHECK: declare nofpclass(qnan) float @nofpclass_qnan(float nofpclass(qnan))2165declare nofpclass(qnan) float @nofpclass_qnan(float nofpclass(qnan))2166 2167; CHECK: declare nofpclass(ninf) float @nofpclass_ninf(float nofpclass(ninf))2168declare nofpclass(ninf) float @nofpclass_ninf(float nofpclass(ninf))2169 2170; CHECK: declare nofpclass(nnorm) float @nofpclass_nnorm(float nofpclass(nnorm))2171declare nofpclass(nnorm) float @nofpclass_nnorm(float nofpclass(nnorm))2172 2173; CHECK: declare nofpclass(nsub) float @nofpclass_nsub(float nofpclass(nsub))2174declare nofpclass(nsub) float @nofpclass_nsub(float nofpclass(nsub))2175 2176; CHECK: declare nofpclass(nzero) float @nofpclass_nzero(float nofpclass(nzero))2177declare nofpclass(nzero) float @nofpclass_nzero(float nofpclass(nzero))2178 2179; CHECK: declare nofpclass(pzero) float @nofpclass_pzero(float nofpclass(pzero))2180declare nofpclass(pzero) float @nofpclass_pzero(float nofpclass(pzero))2181 2182; CHECK: declare nofpclass(psub) float @nofpclass_psub(float nofpclass(psub))2183declare nofpclass(psub) float @nofpclass_psub(float nofpclass(psub))2184 2185; CHECK: declare nofpclass(pnorm) float @nofpclass_pnorm(float nofpclass(pnorm))2186declare nofpclass(pnorm) float @nofpclass_pnorm(float nofpclass(pnorm))2187 2188; CHECK: declare nofpclass(pinf) float @nofpclass_pinf(float nofpclass(pinf))2189declare nofpclass(pinf) float @nofpclass_pinf(float nofpclass(pinf))2190 2191; CHECK: declare nofpclass(nan) float @nofpclass_nan(float nofpclass(nan))2192declare nofpclass(nan) float @nofpclass_nan(float nofpclass(nan))2193 2194; CHECK: declare nofpclass(inf) float @nofpclass_inf(float nofpclass(inf))2195declare nofpclass(inf) float @nofpclass_inf(float nofpclass(inf))2196 2197; CHECK: declare nofpclass(norm) float @nofpclass_norm(float nofpclass(norm))2198declare nofpclass(norm) float @nofpclass_norm(float nofpclass(norm))2199 2200; CHECK: declare nofpclass(zero) float @nofpclass_zero(float nofpclass(zero))2201declare nofpclass(zero) float @nofpclass_zero(float nofpclass(zero))2202 2203; CHECK: declare nofpclass(sub) float @nofpclass_sub(float nofpclass(sub))2204declare nofpclass(sub) float @nofpclass_sub(float nofpclass(sub))2205 2206; CHECK: declare nofpclass(all) float @nofpclass_all(float nofpclass(all))2207declare nofpclass(all) float @nofpclass_all(float nofpclass(all))2208 2209; CHECK: declare nofpclass(zero sub) float @nofpclass_sub_zero(float nofpclass(zero sub))2210declare nofpclass(sub zero) float @nofpclass_sub_zero(float nofpclass(sub zero))2211 2212; CHECK: declare nofpclass(inf sub) float @nofpclass_sub_inf(float nofpclass(inf sub))2213declare nofpclass(sub inf) float @nofpclass_sub_inf(float nofpclass(sub inf))2214 2215; CHECK: declare nofpclass(nan) { float, float } @nofpclass_struct({ double } nofpclass(nan))2216declare nofpclass(nan) { float, float } @nofpclass_struct({ double } nofpclass(nan))2217 2218declare float @unknown_fpclass_func(float)2219 2220declare { <4 x double>, <4 x double>, <4 x double> } @unknown_fpclass_struct_func({ float })2221 2222define float @nofpclass_callsites(float %arg, { float } %arg1) {2223 ; CHECK: %call0 = call nofpclass(nan) float @unknown_fpclass_func(float nofpclass(ninf) %arg)2224 %call0 = call nofpclass(nan) float @unknown_fpclass_func(float nofpclass(ninf) %arg)2225 2226 ; CHECK: %call1 = call nofpclass(inf) float @unknown_fpclass_func(float nofpclass(inf) %arg)2227 %call1 = call nofpclass(inf) float @unknown_fpclass_func(float nofpclass(inf) %arg)2228 2229 ; CHECK: %call2 = call nofpclass(zero) float @unknown_fpclass_func(float nofpclass(norm) %arg)2230 %call2 = call nofpclass(zero) float @unknown_fpclass_func(float nofpclass(norm) %arg)2231 2232 ; CHECK: %call3 = call nofpclass(pinf) { <4 x double>, <4 x double>, <4 x double> } @unknown_fpclass_struct_func({ float } nofpclass(all) %arg1)2233 %call3 = call nofpclass(pinf) { <4 x double>, <4 x double>, <4 x double> } @unknown_fpclass_struct_func({ float } nofpclass(all) %arg1)2234 2235 %add0 = fadd float %call0, %call12236 %add1 = fadd float %add0, %call22237 ret float %add12238}2239 2240; CHECK: attributes #0 = { alignstack=4 }2241; CHECK: attributes #1 = { alignstack=8 }2242; CHECK: attributes #2 = { alwaysinline }2243; CHECK: attributes #3 = { cold }2244; CHECK: attributes #4 = { convergent }2245; CHECK: attributes #5 = { inlinehint }2246; CHECK: attributes #6 = { jumptable }2247; CHECK: attributes #7 = { minsize }2248; CHECK: attributes #8 = { naked }2249; CHECK: attributes #9 = { nobuiltin }2250; CHECK: attributes #10 = { noduplicate }2251; CHECK: attributes #11 = { noimplicitfloat }2252; CHECK: attributes #12 = { noinline }2253; CHECK: attributes #13 = { nonlazybind }2254; CHECK: attributes #14 = { noredzone }2255; CHECK: attributes #15 = { noreturn }2256; CHECK: attributes #16 = { nounwind }2257; CHECK: attributes #17 = { noinline optnone }2258; CHECK: attributes #18 = { optsize }2259; CHECK: attributes #19 = { memory(none) }2260; CHECK: attributes #20 = { memory(read) }2261; CHECK: attributes #21 = { returns_twice }2262; CHECK: attributes #22 = { safestack }2263; CHECK: attributes #23 = { sanitize_address }2264; CHECK: attributes #24 = { sanitize_memory }2265; CHECK: attributes #25 = { sanitize_thread }2266; CHECK: attributes #26 = { ssp }2267; CHECK: attributes #27 = { sspreq }2268; CHECK: attributes #28 = { sspstrong }2269; CHECK: attributes #29 = { "thunk" }2270; CHECK: attributes #30 = { uwtable }2271; CHECK: attributes #31 = { "cpu"="cortex-a8" }2272; CHECK: attributes #32 = { norecurse }2273; CHECK: attributes #33 = { memory(inaccessiblemem: readwrite) }2274; CHECK: attributes #34 = { memory(argmem: readwrite, inaccessiblemem: readwrite) }2275; CHECK: attributes #35 = { nocallback nofree nosync nounwind willreturn memory(none) }2276; CHECK: attributes #36 = { nounwind memory(argmem: read) }2277; CHECK: attributes #37 = { nounwind memory(argmem: readwrite) }2278; CHECK: attributes #38 = { nocallback nofree nosync nounwind willreturn memory(read) }2279; CHECK: attributes #39 = { nocallback nounwind }2280; CHECK: attributes #40 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite, inaccessiblemem: readwrite) }2281; CHECK: attributes #41 = { nocallback nofree nosync nounwind willreturn }2282; CHECK: attributes #42 = { memory(write) }2283; CHECK: attributes #43 = { speculatable }2284; CHECK: attributes #44 = { strictfp }2285; CHECK: attributes #45 = { nosanitize_coverage }2286; CHECK: attributes #46 = { disable_sanitizer_instrumentation }2287; CHECK: attributes #47 = { allocsize(0) }2288; CHECK: attributes #48 = { allocsize(1,0) }2289; CHECK: attributes #49 = { nosanitize_bounds }2290; CHECK: attributes #50 = { allockind("alloc,uninitialized") }2291; CHECK: attributes #51 = { sanitize_numerical_stability }2292; CHECK: attributes #52 = { sanitize_realtime }2293; CHECK: attributes #53 = { sanitize_realtime_blocking }2294; CHECK: attributes #54 = { sanitize_alloc_token }2295; CHECK: attributes #55 = { builtin }2296 2297;; Metadata2298 2299; Metadata -- Module flags2300!llvm.module.flags = !{!0, !1, !2, !4, !5, !6}2301; CHECK: !llvm.module.flags = !{!0, !1, !2, !4, !5, !6}2302 2303!0 = !{i32 1, !"mod1", i32 0}2304; CHECK: !0 = !{i32 1, !"mod1", i32 0}2305!1 = !{i32 2, !"mod2", i32 0}2306; CHECK: !1 = !{i32 2, !"mod2", i32 0}2307!2 = !{i32 3, !"mod3", !3}2308; CHECK: !2 = !{i32 3, !"mod3", !3}2309!3 = !{!"mod6", !0}2310; CHECK: !3 = !{!"mod6", !0}2311!4 = !{i32 4, !"mod4", i32 0}2312; CHECK: !4 = !{i32 4, !"mod4", i32 0}2313!5 = !{i32 5, !"mod5", !0}2314; CHECK: !5 = !{i32 5, !"mod5", !0}2315!6 = !{i32 6, !"mod6", !0}2316; CHECK: !6 = !{i32 6, !"mod6", !0}2317 2318; Metadata -- Check `distinct'2319!11 = distinct !{}2320; CHECK: !11 = distinct !{}2321!12 = distinct !{}2322; CHECK: !12 = distinct !{}2323!13 = !{!11}2324; CHECK: !13 = !{!11}2325!14 = !{!12}2326; CHECK: !14 = !{!12}2327