blob: f4c539800fbbf0c8f2ca4eb97670036610a0e135 [file] [log] [blame]
Sanjoy Das69fad072015-06-15 18:44:27 +00001; RUN: llc -O3 -mtriple=x86_64-apple-macosx -enable-implicit-null-checks < %s | FileCheck %s
2
3define i32 @imp_null_check_load(i32* %x) {
4; CHECK-LABEL: _imp_null_check_load:
5; CHECK: Ltmp1:
6; CHECK: movl (%rdi), %eax
7; CHECK: retq
8; CHECK: Ltmp0:
9; CHECK: movl $42, %eax
10; CHECK: retq
11
12 entry:
13 %c = icmp eq i32* %x, null
14 br i1 %c, label %is_null, label %not_null
15
16 is_null:
17 ret i32 42
18
19 not_null:
20 %t = load i32, i32* %x
21 ret i32 %t
22}
23
24define i32 @imp_null_check_gep_load(i32* %x) {
25; CHECK-LABEL: _imp_null_check_gep_load:
26; CHECK: Ltmp3:
27; CHECK: movl 128(%rdi), %eax
28; CHECK: retq
29; CHECK: Ltmp2:
30; CHECK: movl $42, %eax
31; CHECK: retq
32
33 entry:
34 %c = icmp eq i32* %x, null
35 br i1 %c, label %is_null, label %not_null
36
37 is_null:
38 ret i32 42
39
40 not_null:
41 %x.gep = getelementptr i32, i32* %x, i32 32
42 %t = load i32, i32* %x.gep
43 ret i32 %t
44}
45
46define i32 @imp_null_check_add_result(i32* %x, i32 %p) {
47; CHECK-LABEL: _imp_null_check_add_result:
48; CHECK: Ltmp5:
49; CHECK: addl (%rdi), %esi
50; CHECK: movl %esi, %eax
51; CHECK: retq
52; CHECK: Ltmp4:
53; CHECK: movl $42, %eax
54; CHECK: retq
55
56 entry:
57 %c = icmp eq i32* %x, null
58 br i1 %c, label %is_null, label %not_null
59
60 is_null:
61 ret i32 42
62
63 not_null:
64 %t = load i32, i32* %x
65 %p1 = add i32 %t, %p
66 ret i32 %p1
67}
68
69; CHECK-LABEL: __LLVM_FaultMaps:
70
71; Version:
72; CHECK-NEXT: .byte 1
73
74; Reserved x2
75; CHECK-NEXT: .byte 0
76; CHECK-NEXT: .short 0
77
78; # functions:
79; CHECK-NEXT: .long 3
80
81; FunctionAddr:
82; CHECK-NEXT: .quad _imp_null_check_add_result
83; NumFaultingPCs
84; CHECK-NEXT: .long 1
85; Reserved:
86; CHECK-NEXT: .long 0
87; Fault[0].Type:
88; CHECK-NEXT: .long 1
89; Fault[0].FaultOffset:
90; CHECK-NEXT: .long Ltmp5-_imp_null_check_add_result
91; Fault[0].HandlerOffset:
92; CHECK-NEXT: .long Ltmp4-_imp_null_check_add_result
93
94; FunctionAddr:
95; CHECK-NEXT: .quad _imp_null_check_gep_load
96; NumFaultingPCs
97; CHECK-NEXT: .long 1
98; Reserved:
99; CHECK-NEXT: .long 0
100; Fault[0].Type:
101; CHECK-NEXT: .long 1
102; Fault[0].FaultOffset:
103; CHECK-NEXT: .long Ltmp3-_imp_null_check_gep_load
104; Fault[0].HandlerOffset:
105; CHECK-NEXT: .long Ltmp2-_imp_null_check_gep_load
106
107; FunctionAddr:
108; CHECK-NEXT: .quad _imp_null_check_load
109; NumFaultingPCs
110; CHECK-NEXT: .long 1
111; Reserved:
112; CHECK-NEXT: .long 0
113; Fault[0].Type:
114; CHECK-NEXT: .long 1
115; Fault[0].FaultOffset:
116; CHECK-NEXT: .long Ltmp1-_imp_null_check_load
117; Fault[0].HandlerOffset:
118; CHECK-NEXT: .long Ltmp0-_imp_null_check_load