225 lines · plain
1; Test to make sure intrinsics are automatically upgraded.2; RUN: llvm-as < %s | llvm-dis | FileCheck %s3; RUN: verify-uselistorder %s4 5%0 = type opaque;6 7declare i8 @llvm.ctlz.i8(i8)8declare i16 @llvm.ctlz.i16(i16)9declare i32 @llvm.ctlz.i32(i32)10declare i42 @llvm.ctlz.i42(i42) ; Not a power-of-211 12 13define void @test.ctlz(i8 %a, i16 %b, i32 %c, i42 %d) {14; CHECK: @test.ctlz15 16entry:17 ; CHECK: call i8 @llvm.ctlz.i8(i8 %a, i1 false)18 call i8 @llvm.ctlz.i8(i8 %a)19 ; CHECK: call i16 @llvm.ctlz.i16(i16 %b, i1 false)20 call i16 @llvm.ctlz.i16(i16 %b)21 ; CHECK: call i32 @llvm.ctlz.i32(i32 %c, i1 false)22 call i32 @llvm.ctlz.i32(i32 %c)23 ; CHECK: call i42 @llvm.ctlz.i42(i42 %d, i1 false)24 call i42 @llvm.ctlz.i42(i42 %d)25 26 ret void27}28 29declare i8 @llvm.cttz.i8(i8)30declare i16 @llvm.cttz.i16(i16)31declare i32 @llvm.cttz.i32(i32)32declare i42 @llvm.cttz.i42(i42) ; Not a power-of-233 34define void @test.cttz(i8 %a, i16 %b, i32 %c, i42 %d) {35; CHECK: @test.cttz36 37entry:38 ; CHECK: call i8 @llvm.cttz.i8(i8 %a, i1 false)39 call i8 @llvm.cttz.i8(i8 %a)40 ; CHECK: call i16 @llvm.cttz.i16(i16 %b, i1 false)41 call i16 @llvm.cttz.i16(i16 %b)42 ; CHECK: call i32 @llvm.cttz.i32(i32 %c, i1 false)43 call i32 @llvm.cttz.i32(i32 %c)44 ; CHECK: call i42 @llvm.cttz.i42(i42 %d, i1 false)45 call i42 @llvm.cttz.i42(i42 %d)46 47 ret void48}49 50declare void @llvm.coro.end(ptr, i1)51define void @test.coro.end(ptr %ptr) {52; CHECK-LABEL: @test.coro.end(53; CHECK: call void @llvm.coro.end(ptr %ptr, i1 false, token none)54 call void @llvm.coro.end(ptr %ptr, i1 false)55 ret void56}57 58@a = private global [60 x i8] zeroinitializer, align 159 60declare i32 @llvm.objectsize.i32(ptr, i1) nounwind readonly61define i32 @test.objectsize() {62; CHECK-LABEL: @test.objectsize(63; CHECK: @llvm.objectsize.i32.p0(ptr @a, i1 false, i1 false, i1 false)64 %s = call i32 @llvm.objectsize.i32(ptr @a, i1 false)65 ret i32 %s66}67 68declare i64 @llvm.objectsize.i64.p0(ptr, i1) nounwind readonly69define i64 @test.objectsize.2() {70; CHECK-LABEL: @test.objectsize.2(71; CHECK: @llvm.objectsize.i64.p0(ptr @a, i1 false, i1 false, i1 false)72 %s = call i64 @llvm.objectsize.i64.p0(ptr @a, i1 false)73 ret i64 %s74}75 76@u = private global [60 x ptr] zeroinitializer, align 177 78declare i32 @llvm.objectsize.i32.unnamed(ptr, i1) nounwind readonly79define i32 @test.objectsize.unnamed() {80; CHECK-LABEL: @test.objectsize.unnamed(81; CHECK: @llvm.objectsize.i32.p0(ptr @u, i1 false, i1 false, i1 false)82 %s = call i32 @llvm.objectsize.i32.unnamed(ptr @u, i1 false)83 ret i32 %s84}85 86define i64 @test.objectsize.unnamed.2() {87; CHECK-LABEL: @test.objectsize.unnamed.2(88; CHECK: @llvm.objectsize.i64.p0(ptr @u, i1 false, i1 false, i1 false)89 %s = call i64 @llvm.objectsize.i64.p0(ptr @u, i1 false)90 ret i64 %s91}92 93declare <2 x double> @llvm.masked.load.v2f64(ptr %ptrs, i32, <2 x i1> %mask, <2 x double> %src0)94 95define <2 x double> @tests.masked.load(ptr %ptr, <2 x i1> %mask, <2 x double> %passthru) {96; CHECK-LABEL: @tests.masked.load(97; CHECK: @llvm.masked.load.v2f64.p098 %res = call <2 x double> @llvm.masked.load.v2f64(ptr %ptr, i32 1, <2 x i1> %mask, <2 x double> %passthru)99 ret <2 x double> %res100}101 102declare void @llvm.masked.store.v2f64(<2 x double> %val, ptr %ptrs, i32, <2 x i1> %mask)103 104define void @tests.masked.store(ptr %ptr, <2 x i1> %mask, <2 x double> %val) {105; CHECK-LABEL: @tests.masked.store(106; CHECK: @llvm.masked.store.v2f64.p0107 call void @llvm.masked.store.v2f64(<2 x double> %val, ptr %ptr, i32 4, <2 x i1> %mask)108 ret void109}110 111declare <2 x double> @llvm.masked.gather.v2f64(<2 x ptr> %ptrs, i32, <2 x i1> %mask, <2 x double> %src0)112 113define <2 x double> @tests.masked.gather(<2 x ptr> %ptr, <2 x i1> %mask, <2 x double> %passthru) {114; CHECK-LABEL: @tests.masked.gather(115; CHECK: @llvm.masked.gather.v2f64.v2p0116 %res = call <2 x double> @llvm.masked.gather.v2f64(<2 x ptr> %ptr, i32 1, <2 x i1> %mask, <2 x double> %passthru)117 ret <2 x double> %res118}119 120declare void @llvm.masked.scatter.v2f64(<2 x double> %val, <2 x ptr> %ptrs, i32, <2 x i1> %mask)121 122define void @tests.masked.scatter(<2 x ptr> %ptr, <2 x i1> %mask, <2 x double> %val) {123; CHECK-LABEL: @tests.masked.scatter(124; CHECK: @llvm.masked.scatter.v2f64.v2p0125 call void @llvm.masked.scatter.v2f64(<2 x double> %val, <2 x ptr> %ptr, i32 1, <2 x i1> %mask)126 ret void127}128 129declare ptr @llvm.invariant.start(i64, ptr nocapture) nounwind readonly130declare void @llvm.invariant.end(ptr, i64, ptr nocapture) nounwind131 132define void @tests.invariant.start.end() {133 ; CHECK-LABEL: @tests.invariant.start.end(134 %a = alloca i8135 %i = call ptr @llvm.invariant.start(i64 1, ptr %a)136 ; CHECK: call ptr @llvm.invariant.start.p0137 store i8 0, ptr %a138 call void @llvm.invariant.end(ptr %i, i64 1, ptr %a)139 ; CHECK: call void @llvm.invariant.end.p0140 ret void141}142 143declare ptr @llvm.invariant.start.unnamed(i64, ptr nocapture) nounwind readonly144declare void @llvm.invariant.end.unnamed(ptr, i64, ptr nocapture) nounwind145 146define void @tests.invariant.start.end.unnamed() {147 ; CHECK-LABEL: @tests.invariant.start.end.unnamed(148 %a = alloca ptr149 %i = call ptr @llvm.invariant.start.unnamed(i64 1, ptr %a)150 ; CHECK: call ptr @llvm.invariant.start.p0151 store ptr null, ptr %a152 call void @llvm.invariant.end.unnamed(ptr %i, i64 1, ptr %a)153 ; CHECK: call void @llvm.invariant.end.p0154 ret void155}156 157@__stack_chk_guard = external global ptr158declare void @llvm.stackprotectorcheck(ptr)159 160define void @test.stackprotectorcheck() {161; CHECK-LABEL: @test.stackprotectorcheck(162; CHECK-NEXT: ret void163 call void @llvm.stackprotectorcheck(ptr @__stack_chk_guard)164 ret void165}166 167declare void @llvm.lifetime.start(i64, ptr nocapture) nounwind readonly168declare void @llvm.lifetime.end(i64, ptr nocapture) nounwind169 170define void @tests.lifetime.start.end() {171 ; CHECK-LABEL: @tests.lifetime.start.end(172 %a = alloca i8173 call void @llvm.lifetime.start(i64 1, ptr %a)174 ; CHECK: call void @llvm.lifetime.start.p0(ptr %a)175 store i8 0, ptr %a176 call void @llvm.lifetime.end(i64 1, ptr %a)177 ; CHECK: call void @llvm.lifetime.end.p0(ptr %a)178 ret void179}180 181declare void @llvm.lifetime.start.unnamed(i64, ptr nocapture) nounwind readonly182declare void @llvm.lifetime.end.unnamed(i64, ptr nocapture) nounwind183 184define void @tests.lifetime.start.end.unnamed() {185 ; CHECK-LABEL: @tests.lifetime.start.end.unnamed(186 %a = alloca ptr187 call void @llvm.lifetime.start.unnamed(i64 1, ptr %a)188 ; CHECK: call void @llvm.lifetime.start.p0(ptr %a)189 store ptr null, ptr %a190 call void @llvm.lifetime.end.unnamed(i64 1, ptr %a)191 ; CHECK: call void @llvm.lifetime.end.p0(ptr %a)192 ret void193}194 195declare void @llvm.prefetch(ptr, i32, i32, i32)196define void @test.prefetch(ptr %ptr) {197; CHECK-LABEL: @test.prefetch(198; CHECK: @llvm.prefetch.p0(ptr %ptr, i32 0, i32 3, i32 1)199 call void @llvm.prefetch(ptr %ptr, i32 0, i32 3, i32 1)200 ret void201}202 203declare void @llvm.prefetch.p0(ptr, i32, i32, i32)204define void @test.prefetch.2(ptr %ptr) {205; CHECK-LABEL: @test.prefetch.2(206; CHECK: @llvm.prefetch.p0(ptr %ptr, i32 0, i32 3, i32 1)207 call void @llvm.prefetch(ptr %ptr, i32 0, i32 3, i32 1)208 ret void209}210 211declare void @llvm.prefetch.unnamed(ptr, i32, i32, i32)212define void @test.prefetch.unnamed(ptr %ptr) {213; CHECK-LABEL: @test.prefetch.unnamed(214; CHECK: @llvm.prefetch.p0(ptr %ptr, i32 0, i32 3, i32 1)215 call void @llvm.prefetch.unnamed(ptr %ptr, i32 0, i32 3, i32 1)216 ret void217}218 219; This is part of @test.objectsize(), since llvm.objectsize declaration gets220; emitted at the end.221; CHECK: declare i32 @llvm.objectsize.i32.p0222 223; CHECK: declare void @llvm.lifetime.start.p0(ptr captures(none))224; CHECK: declare void @llvm.lifetime.end.p0(ptr captures(none))225