blob: 6362cb757edccd575baae67fb2016110acc34e88 [file] [log] [blame]
Rafael Espindola39dd3282012-03-24 00:14:51 +00001; RUN: llvm-as < %s -o /dev/null
2
3define i8 @f1(i8* %x) {
4entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +00005 %y = load i8, i8* %x, align 1, !range !0
Rafael Espindola39dd3282012-03-24 00:14:51 +00006 ret i8 %y
7}
Duncan P. N. Exon Smith1ef70ff2014-12-15 19:07:53 +00008!0 = !{i8 0, i8 1}
Rafael Espindola39dd3282012-03-24 00:14:51 +00009
10define i8 @f2(i8* %x) {
11entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +000012 %y = load i8, i8* %x, align 1, !range !1
Rafael Espindola39dd3282012-03-24 00:14:51 +000013 ret i8 %y
14}
Duncan P. N. Exon Smith1ef70ff2014-12-15 19:07:53 +000015!1 = !{i8 255, i8 1}
Rafael Espindola39dd3282012-03-24 00:14:51 +000016
17define i8 @f3(i8* %x) {
18entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +000019 %y = load i8, i8* %x, align 1, !range !2
Rafael Espindola39dd3282012-03-24 00:14:51 +000020 ret i8 %y
21}
Duncan P. N. Exon Smith1ef70ff2014-12-15 19:07:53 +000022!2 = !{i8 1, i8 3, i8 5, i8 42}
Rafael Espindolac49b29e2012-05-31 13:45:46 +000023
24define i8 @f4(i8* %x) {
25entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +000026 %y = load i8, i8* %x, align 1, !range !3
Rafael Espindolac49b29e2012-05-31 13:45:46 +000027 ret i8 %y
28}
Duncan P. N. Exon Smith1ef70ff2014-12-15 19:07:53 +000029!3 = !{i8 -1, i8 0, i8 1, i8 2}
Rafael Espindolac49b29e2012-05-31 13:45:46 +000030
31define i8 @f5(i8* %x) {
32entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +000033 %y = load i8, i8* %x, align 1, !range !4
Rafael Espindolac49b29e2012-05-31 13:45:46 +000034 ret i8 %y
35}
Duncan P. N. Exon Smith1ef70ff2014-12-15 19:07:53 +000036!4 = !{i8 -1, i8 0, i8 1, i8 -2}
Jingyue Wue4d0a5e2014-06-19 16:50:16 +000037
38; We can annotate the range of the return value of a CALL.
39define void @call_all(i8* %x) {
40entry:
41 %v1 = call i8 @f1(i8* %x), !range !0
42 %v2 = call i8 @f2(i8* %x), !range !1
43 %v3 = call i8 @f3(i8* %x), !range !2
44 %v4 = call i8 @f4(i8* %x), !range !3
45 %v5 = call i8 @f5(i8* %x), !range !4
46 ret void
47}
48
49; We can annotate the range of the return value of an INVOKE.
David Majnemercc714e22015-06-17 20:52:32 +000050define void @invoke_all(i8* %x) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
Jingyue Wue4d0a5e2014-06-19 16:50:16 +000051entry:
52 %v1 = invoke i8 @f1(i8* %x) to label %cont unwind label %lpad, !range !0
53 %v2 = invoke i8 @f2(i8* %x) to label %cont unwind label %lpad, !range !1
54 %v3 = invoke i8 @f3(i8* %x) to label %cont unwind label %lpad, !range !2
55 %v4 = invoke i8 @f4(i8* %x) to label %cont unwind label %lpad, !range !3
56 %v5 = invoke i8 @f5(i8* %x) to label %cont unwind label %lpad, !range !4
57
58cont:
59 ret void
60
61lpad:
David Majnemercc714e22015-06-17 20:52:32 +000062 %4 = landingpad { i8*, i32 }
Jingyue Wue4d0a5e2014-06-19 16:50:16 +000063 filter [0 x i8*] zeroinitializer
64 ret void
65}
66declare i32 @__gxx_personality_v0(...)