Rafael Espindola | 39dd328 | 2012-03-24 00:14:51 +0000 | [diff] [blame] | 1 | ; RUN: llvm-as < %s -o /dev/null |
| 2 | |
| 3 | define i8 @f1(i8* %x) { |
| 4 | entry: |
David Blaikie | 7c9c6ed | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 5 | %y = load i8, i8* %x, align 1, !range !0 |
Rafael Espindola | 39dd328 | 2012-03-24 00:14:51 +0000 | [diff] [blame] | 6 | ret i8 %y |
| 7 | } |
Duncan P. N. Exon Smith | 1ef70ff | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 8 | !0 = !{i8 0, i8 1} |
Rafael Espindola | 39dd328 | 2012-03-24 00:14:51 +0000 | [diff] [blame] | 9 | |
| 10 | define i8 @f2(i8* %x) { |
| 11 | entry: |
David Blaikie | 7c9c6ed | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 12 | %y = load i8, i8* %x, align 1, !range !1 |
Rafael Espindola | 39dd328 | 2012-03-24 00:14:51 +0000 | [diff] [blame] | 13 | ret i8 %y |
| 14 | } |
Duncan P. N. Exon Smith | 1ef70ff | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 15 | !1 = !{i8 255, i8 1} |
Rafael Espindola | 39dd328 | 2012-03-24 00:14:51 +0000 | [diff] [blame] | 16 | |
| 17 | define i8 @f3(i8* %x) { |
| 18 | entry: |
David Blaikie | 7c9c6ed | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 19 | %y = load i8, i8* %x, align 1, !range !2 |
Rafael Espindola | 39dd328 | 2012-03-24 00:14:51 +0000 | [diff] [blame] | 20 | ret i8 %y |
| 21 | } |
Duncan P. N. Exon Smith | 1ef70ff | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 22 | !2 = !{i8 1, i8 3, i8 5, i8 42} |
Rafael Espindola | c49b29e | 2012-05-31 13:45:46 +0000 | [diff] [blame] | 23 | |
| 24 | define i8 @f4(i8* %x) { |
| 25 | entry: |
David Blaikie | 7c9c6ed | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 26 | %y = load i8, i8* %x, align 1, !range !3 |
Rafael Espindola | c49b29e | 2012-05-31 13:45:46 +0000 | [diff] [blame] | 27 | ret i8 %y |
| 28 | } |
Duncan P. N. Exon Smith | 1ef70ff | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 29 | !3 = !{i8 -1, i8 0, i8 1, i8 2} |
Rafael Espindola | c49b29e | 2012-05-31 13:45:46 +0000 | [diff] [blame] | 30 | |
| 31 | define i8 @f5(i8* %x) { |
| 32 | entry: |
David Blaikie | 7c9c6ed | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 33 | %y = load i8, i8* %x, align 1, !range !4 |
Rafael Espindola | c49b29e | 2012-05-31 13:45:46 +0000 | [diff] [blame] | 34 | ret i8 %y |
| 35 | } |
Duncan P. N. Exon Smith | 1ef70ff | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 36 | !4 = !{i8 -1, i8 0, i8 1, i8 -2} |
Jingyue Wu | e4d0a5e | 2014-06-19 16:50:16 +0000 | [diff] [blame] | 37 | |
| 38 | ; We can annotate the range of the return value of a CALL. |
| 39 | define void @call_all(i8* %x) { |
| 40 | entry: |
| 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 Majnemer | cc714e2 | 2015-06-17 20:52:32 +0000 | [diff] [blame] | 50 | define void @invoke_all(i8* %x) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { |
Jingyue Wu | e4d0a5e | 2014-06-19 16:50:16 +0000 | [diff] [blame] | 51 | entry: |
| 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 | |
| 58 | cont: |
| 59 | ret void |
| 60 | |
| 61 | lpad: |
David Majnemer | cc714e2 | 2015-06-17 20:52:32 +0000 | [diff] [blame] | 62 | %4 = landingpad { i8*, i32 } |
Jingyue Wu | e4d0a5e | 2014-06-19 16:50:16 +0000 | [diff] [blame] | 63 | filter [0 x i8*] zeroinitializer |
| 64 | ret void |
| 65 | } |
| 66 | declare i32 @__gxx_personality_v0(...) |