Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: test/Transforms/NaCl/expand-indirectbr.ll

Issue 120773002: PNaCl: Implement computed gotos (indirectbr) by expanding out to switches (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Cleanup Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 ; RUN: opt %s -expand-indirectbr -S | FileCheck %s
2
3
4 @addresses = global [2 x i8*]
5 [i8* blockaddress(@indirectbr_example, %label1),
6 i8* blockaddress(@indirectbr_example, %label2)]
7 ; CHECK: @addresses = global [2 x i8*] [i8* inttoptr (i32 1 to i8*), i8* inttopt r (i32 2 to i8*)]
8
9
10 define i32 @indirectbr_example(i8* %addr) {
11 indirectbr i8* %addr, [label %label1, label %label2]
12 label1:
13 ret i32 100
14 label2:
15 ret i32 200
16 }
17 ; CHECK: define i32 @indirectbr_example
18 ; CHECK-NEXT: %indirectbr_cast = ptrtoint i8* %addr to i32
19 ; CHECK-NEXT: switch i32 %indirectbr_cast, label %indirectbr_default [
20 ; CHECK-NEXT: i32 1, label %label1
21 ; CHECK-NEXT: i32 2, label %label2
22 ; CHECK-NEXT: ]
23 ; CHECK: indirectbr_default:
24 ; CHECK-NEXT: unreachable
25
26
27 define i32 @label_appears_twice(i8* %addr) {
28 entry:
29 indirectbr i8* %addr, [label %label, label %label]
30 label:
31 %val = phi i32 [ 123, %entry ], [ 123, %entry ]
32 ret i32 %val
33 }
34 ; CHECK: define i32 @label_appears_twice
35 ; CHECK: switch i32 %indirectbr_cast, label %indirectbr_default [
36 ; CHECK-NEXT: i32 1, label %label
37 ; CHECK-NEXT: ]
38 ; CHECK: %val = phi i32 [ 123, %entry ]
39
40
41 define i8* @unused_blockaddress() {
42 ret i8* blockaddress (@unused_blockaddress, %dead_label)
43 dead_label:
44 ret i8* null
45 }
46 ; CHECK: define i8* @unused_blockaddress
47 ; CHECK-NEXT: ret i8* inttoptr (i32 -1 to i8*)
48
49
50 ; Check that the label is given a consistent switch value across all
51 ; indirectbr expansions.
52 define i32 @multiple_indirectbr(i8* %addr) {
53 indirectbr i8* %addr, [label %label]
54 indirectbr i8* %addr, [label %label]
55 label:
56 ret i32 100
57 }
58 ; CHECK: define i32 @multiple_indirectbr
59 ; CHECK: switch i32 %indirectbr_cast{{[0-9]*}}, label %indirectbr_default [
60 ; CHECK-NEXT: i32 1, label %label
61 ; CHECK: switch i32 %indirectbr_cast{{[0-9]*}}, label %indirectbr_default [
62 ; CHECK-NEXT: i32 1, label %label
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698