Skip to content

Commit e8e0b3d

Browse files
committed
[MemorySanitizer] Generate some test checks (NFC)
1 parent 870e4f9 commit e8e0b3d

File tree

3 files changed

+478
-206
lines changed

3 files changed

+478
-206
lines changed

llvm/test/Instrumentation/MemorySanitizer/array_types.ll

Lines changed: 150 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,194 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
12
; RUN: opt < %s -msan-check-access-address=0 -S -passes=msan 2>&1 | FileCheck %s
2-
; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=1 -S -passes=msan 2>&1 | FileCheck -check-prefix=CHECK %s --allow-empty
3+
; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=1 -S -passes=msan 2>&1 | FileCheck -check-prefix=CHECK-ORIGIN %s
34

45
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
56
target triple = "x86_64-unknown-linux-gnu"
67

78
define [2 x i32] @InsertValue(i32 %x, i32 %y) sanitize_memory {
9+
; CHECK-LABEL: define [2 x i32] @InsertValue(
10+
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
11+
; CHECK-NEXT: [[ENTRY:.*:]]
12+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @__msan_param_tls, align 8
13+
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
14+
; CHECK-NEXT: call void @llvm.donothing()
15+
; CHECK-NEXT: [[TMP2:%.*]] = insertvalue [2 x i32] [i32 -1, i32 -1], i32 [[TMP0]], 0
16+
; CHECK-NEXT: [[A:%.*]] = insertvalue [2 x i32] undef, i32 [[X]], 0
17+
; CHECK-NEXT: [[TMP3:%.*]] = insertvalue [2 x i32] [[TMP2]], i32 [[TMP1]], 1
18+
; CHECK-NEXT: [[B:%.*]] = insertvalue [2 x i32] [[A]], i32 [[Y]], 1
19+
; CHECK-NEXT: store [2 x i32] [[TMP3]], ptr @__msan_retval_tls, align 8
20+
; CHECK-NEXT: ret [2 x i32] [[B]]
21+
;
22+
; CHECK-ORIGIN-LABEL: define [2 x i32] @InsertValue(
23+
; CHECK-ORIGIN-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
24+
; CHECK-ORIGIN-NEXT: [[ENTRY:.*:]]
25+
; CHECK-ORIGIN-NEXT: [[TMP0:%.*]] = load i32, ptr @__msan_param_tls, align 8
26+
; CHECK-ORIGIN-NEXT: [[TMP1:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
27+
; CHECK-ORIGIN-NEXT: [[TMP2:%.*]] = load i32, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
28+
; CHECK-ORIGIN-NEXT: [[TMP3:%.*]] = load i32, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_origin_tls to i64), i64 8) to ptr), align 4
29+
; CHECK-ORIGIN-NEXT: call void @llvm.donothing()
30+
; CHECK-ORIGIN-NEXT: [[TMP4:%.*]] = insertvalue [2 x i32] [i32 -1, i32 -1], i32 [[TMP0]], 0
31+
; CHECK-ORIGIN-NEXT: [[TMP5:%.*]] = icmp ne i32 [[TMP0]], 0
32+
; CHECK-ORIGIN-NEXT: [[TMP6:%.*]] = select i1 [[TMP5]], i32 [[TMP1]], i32 0
33+
; CHECK-ORIGIN-NEXT: [[A:%.*]] = insertvalue [2 x i32] undef, i32 [[X]], 0
34+
; CHECK-ORIGIN-NEXT: [[TMP7:%.*]] = insertvalue [2 x i32] [[TMP4]], i32 [[TMP2]], 1
35+
; CHECK-ORIGIN-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP2]], 0
36+
; CHECK-ORIGIN-NEXT: [[TMP9:%.*]] = select i1 [[TMP8]], i32 [[TMP3]], i32 [[TMP6]]
37+
; CHECK-ORIGIN-NEXT: [[B:%.*]] = insertvalue [2 x i32] [[A]], i32 [[Y]], 1
38+
; CHECK-ORIGIN-NEXT: store [2 x i32] [[TMP7]], ptr @__msan_retval_tls, align 8
39+
; CHECK-ORIGIN-NEXT: store i32 [[TMP9]], ptr @__msan_retval_origin_tls, align 4
40+
; CHECK-ORIGIN-NEXT: ret [2 x i32] [[B]]
41+
;
842
entry:
943
%a = insertvalue [2 x i32] undef, i32 %x, 0
1044
%b = insertvalue [2 x i32] %a, i32 %y, 1
1145
ret [2 x i32] %b
1246
}
1347

14-
; CHECK-LABEL: @InsertValue(
15-
; CHECK-DAG: [[Sx:%.*]] = load i32, ptr @__msan_param_tls
16-
; CHECK-DAG: [[Sy:%.*]] = load i32, ptr {{.*}}@__msan_param_tls to i64), i64 8)
17-
; CHECK: [[A:%.*]] = insertvalue [2 x i32] [i32 -1, i32 -1], i32 [[Sx]], 0
18-
; CHECK: [[B:%.*]] = insertvalue [2 x i32] [[A]], i32 [[Sy]], 1
19-
; CHECK: store [2 x i32] [[B]], ptr {{.*}}@__msan_retval_tls
20-
; CHECK: ret [2 x i32]
21-
22-
2348
define [2 x double] @InsertValueDouble(double %x, double %y) sanitize_memory {
49+
; CHECK-LABEL: define [2 x double] @InsertValueDouble(
50+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) #[[ATTR0]] {
51+
; CHECK-NEXT: [[ENTRY:.*:]]
52+
; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 8
53+
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
54+
; CHECK-NEXT: call void @llvm.donothing()
55+
; CHECK-NEXT: [[TMP2:%.*]] = insertvalue [2 x i64] [i64 -1, i64 -1], i64 [[TMP0]], 0
56+
; CHECK-NEXT: [[A:%.*]] = insertvalue [2 x double] undef, double [[X]], 0
57+
; CHECK-NEXT: [[TMP3:%.*]] = insertvalue [2 x i64] [[TMP2]], i64 [[TMP1]], 1
58+
; CHECK-NEXT: [[B:%.*]] = insertvalue [2 x double] [[A]], double [[Y]], 1
59+
; CHECK-NEXT: store [2 x i64] [[TMP3]], ptr @__msan_retval_tls, align 8
60+
; CHECK-NEXT: ret [2 x double] [[B]]
61+
;
62+
; CHECK-ORIGIN-LABEL: define [2 x double] @InsertValueDouble(
63+
; CHECK-ORIGIN-SAME: double [[X:%.*]], double [[Y:%.*]]) #[[ATTR0]] {
64+
; CHECK-ORIGIN-NEXT: [[ENTRY:.*:]]
65+
; CHECK-ORIGIN-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 8
66+
; CHECK-ORIGIN-NEXT: [[TMP1:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
67+
; CHECK-ORIGIN-NEXT: [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
68+
; CHECK-ORIGIN-NEXT: [[TMP3:%.*]] = load i32, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_origin_tls to i64), i64 8) to ptr), align 4
69+
; CHECK-ORIGIN-NEXT: call void @llvm.donothing()
70+
; CHECK-ORIGIN-NEXT: [[TMP4:%.*]] = insertvalue [2 x i64] [i64 -1, i64 -1], i64 [[TMP0]], 0
71+
; CHECK-ORIGIN-NEXT: [[TMP5:%.*]] = icmp ne i64 [[TMP0]], 0
72+
; CHECK-ORIGIN-NEXT: [[TMP6:%.*]] = select i1 [[TMP5]], i32 [[TMP1]], i32 0
73+
; CHECK-ORIGIN-NEXT: [[A:%.*]] = insertvalue [2 x double] undef, double [[X]], 0
74+
; CHECK-ORIGIN-NEXT: [[TMP7:%.*]] = insertvalue [2 x i64] [[TMP4]], i64 [[TMP2]], 1
75+
; CHECK-ORIGIN-NEXT: [[TMP8:%.*]] = icmp ne i64 [[TMP2]], 0
76+
; CHECK-ORIGIN-NEXT: [[TMP9:%.*]] = select i1 [[TMP8]], i32 [[TMP3]], i32 [[TMP6]]
77+
; CHECK-ORIGIN-NEXT: [[B:%.*]] = insertvalue [2 x double] [[A]], double [[Y]], 1
78+
; CHECK-ORIGIN-NEXT: store [2 x i64] [[TMP7]], ptr @__msan_retval_tls, align 8
79+
; CHECK-ORIGIN-NEXT: store i32 [[TMP9]], ptr @__msan_retval_origin_tls, align 4
80+
; CHECK-ORIGIN-NEXT: ret [2 x double] [[B]]
81+
;
2482
entry:
2583
%a = insertvalue [2 x double] undef, double %x, 0
2684
%b = insertvalue [2 x double] %a, double %y, 1
2785
ret [2 x double] %b
2886
}
2987

30-
; CHECK-LABEL: @InsertValueDouble(
31-
; CHECK-DAG: [[Sx:%.*]] = load i64, ptr @__msan_param_tls
32-
; CHECK-DAG: [[Sy:%.*]] = load i64, ptr {{.*}}@__msan_param_tls to i64), i64 8)
33-
; CHECK: [[A:%.*]] = insertvalue [2 x i64] [i64 -1, i64 -1], i64 [[Sx]], 0
34-
; CHECK: [[B:%.*]] = insertvalue [2 x i64] [[A]], i64 [[Sy]], 1
35-
; CHECK: store [2 x i64] [[B]], ptr {{.*}}@__msan_retval_tls
36-
; CHECK: ret [2 x double]
37-
38-
3988
define i32 @ExtractValue([2 x i32] %a) sanitize_memory {
89+
; CHECK-LABEL: define i32 @ExtractValue(
90+
; CHECK-SAME: [2 x i32] [[A:%.*]]) #[[ATTR0]] {
91+
; CHECK-NEXT: [[ENTRY:.*:]]
92+
; CHECK-NEXT: [[TMP0:%.*]] = load [2 x i32], ptr @__msan_param_tls, align 8
93+
; CHECK-NEXT: call void @llvm.donothing()
94+
; CHECK-NEXT: [[TMP1:%.*]] = extractvalue [2 x i32] [[TMP0]], 1
95+
; CHECK-NEXT: [[X:%.*]] = extractvalue [2 x i32] [[A]], 1
96+
; CHECK-NEXT: store i32 [[TMP1]], ptr @__msan_retval_tls, align 8
97+
; CHECK-NEXT: ret i32 [[X]]
98+
;
99+
; CHECK-ORIGIN-LABEL: define i32 @ExtractValue(
100+
; CHECK-ORIGIN-SAME: [2 x i32] [[A:%.*]]) #[[ATTR0]] {
101+
; CHECK-ORIGIN-NEXT: [[ENTRY:.*:]]
102+
; CHECK-ORIGIN-NEXT: [[TMP0:%.*]] = load [2 x i32], ptr @__msan_param_tls, align 8
103+
; CHECK-ORIGIN-NEXT: [[TMP1:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
104+
; CHECK-ORIGIN-NEXT: call void @llvm.donothing()
105+
; CHECK-ORIGIN-NEXT: [[TMP2:%.*]] = extractvalue [2 x i32] [[TMP0]], 1
106+
; CHECK-ORIGIN-NEXT: [[X:%.*]] = extractvalue [2 x i32] [[A]], 1
107+
; CHECK-ORIGIN-NEXT: store i32 [[TMP2]], ptr @__msan_retval_tls, align 8
108+
; CHECK-ORIGIN-NEXT: store i32 [[TMP1]], ptr @__msan_retval_origin_tls, align 4
109+
; CHECK-ORIGIN-NEXT: ret i32 [[X]]
110+
;
40111
entry:
41112
%x = extractvalue [2 x i32] %a, 1
42113
ret i32 %x
43114
}
44115

45-
; CHECK-LABEL: @ExtractValue(
46-
; CHECK: [[Sa:%.*]] = load [2 x i32], ptr @__msan_param_tls
47-
; CHECK: [[Sx:%.*]] = extractvalue [2 x i32] [[Sa]], 1
48-
; CHECK: store i32 [[Sx]], ptr @__msan_retval_tls
49-
; CHECK: ret i32
50-
51-
52116
; Regression test for PR20493.
53117

54118
%MyStruct = type { i32, i32, [3 x i32] }
55119

56120
define i32 @ArrayInStruct(%MyStruct %s) sanitize_memory {
121+
; CHECK-LABEL: define i32 @ArrayInStruct(
122+
; CHECK-SAME: [[MYSTRUCT:%.*]] [[S:%.*]]) #[[ATTR0]] {
123+
; CHECK-NEXT: [[TMP1:%.*]] = load { i32, i32, [3 x i32] }, ptr @__msan_param_tls, align 8
124+
; CHECK-NEXT: call void @llvm.donothing()
125+
; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { i32, i32, [3 x i32] } [[TMP1]], 2, 1
126+
; CHECK-NEXT: [[X:%.*]] = extractvalue [[MYSTRUCT]] [[S]], 2, 1
127+
; CHECK-NEXT: store i32 [[TMP2]], ptr @__msan_retval_tls, align 8
128+
; CHECK-NEXT: ret i32 [[X]]
129+
;
130+
; CHECK-ORIGIN-LABEL: define i32 @ArrayInStruct(
131+
; CHECK-ORIGIN-SAME: [[MYSTRUCT:%.*]] [[S:%.*]]) #[[ATTR0]] {
132+
; CHECK-ORIGIN-NEXT: [[TMP1:%.*]] = load { i32, i32, [3 x i32] }, ptr @__msan_param_tls, align 8
133+
; CHECK-ORIGIN-NEXT: [[TMP2:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
134+
; CHECK-ORIGIN-NEXT: call void @llvm.donothing()
135+
; CHECK-ORIGIN-NEXT: [[TMP3:%.*]] = extractvalue { i32, i32, [3 x i32] } [[TMP1]], 2, 1
136+
; CHECK-ORIGIN-NEXT: [[X:%.*]] = extractvalue [[MYSTRUCT]] [[S]], 2, 1
137+
; CHECK-ORIGIN-NEXT: store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
138+
; CHECK-ORIGIN-NEXT: store i32 [[TMP2]], ptr @__msan_retval_origin_tls, align 4
139+
; CHECK-ORIGIN-NEXT: ret i32 [[X]]
140+
;
57141
%x = extractvalue %MyStruct %s, 2, 1
58142
ret i32 %x
59143
}
60144

61-
; CHECK-LABEL: @ArrayInStruct(
62-
; CHECK: [[Ss:%.*]] = load { i32, i32, [3 x i32] }, ptr @__msan_param_tls
63-
; CHECK: [[Sx:%.*]] = extractvalue { i32, i32, [3 x i32] } [[Ss]], 2, 1
64-
; CHECK: store i32 [[Sx]], ptr @__msan_retval_tls
65-
; CHECK: ret i32
66-
67-
68145
define i32 @ArrayOfStructs([3 x { i32, i32 }] %a) sanitize_memory {
146+
; CHECK-LABEL: define i32 @ArrayOfStructs(
147+
; CHECK-SAME: [3 x { i32, i32 }] [[A:%.*]]) #[[ATTR0]] {
148+
; CHECK-NEXT: [[TMP1:%.*]] = load [3 x { i32, i32 }], ptr @__msan_param_tls, align 8
149+
; CHECK-NEXT: call void @llvm.donothing()
150+
; CHECK-NEXT: [[TMP2:%.*]] = extractvalue [3 x { i32, i32 }] [[TMP1]], 2, 1
151+
; CHECK-NEXT: [[X:%.*]] = extractvalue [3 x { i32, i32 }] [[A]], 2, 1
152+
; CHECK-NEXT: store i32 [[TMP2]], ptr @__msan_retval_tls, align 8
153+
; CHECK-NEXT: ret i32 [[X]]
154+
;
155+
; CHECK-ORIGIN-LABEL: define i32 @ArrayOfStructs(
156+
; CHECK-ORIGIN-SAME: [3 x { i32, i32 }] [[A:%.*]]) #[[ATTR0]] {
157+
; CHECK-ORIGIN-NEXT: [[TMP1:%.*]] = load [3 x { i32, i32 }], ptr @__msan_param_tls, align 8
158+
; CHECK-ORIGIN-NEXT: [[TMP2:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
159+
; CHECK-ORIGIN-NEXT: call void @llvm.donothing()
160+
; CHECK-ORIGIN-NEXT: [[TMP3:%.*]] = extractvalue [3 x { i32, i32 }] [[TMP1]], 2, 1
161+
; CHECK-ORIGIN-NEXT: [[X:%.*]] = extractvalue [3 x { i32, i32 }] [[A]], 2, 1
162+
; CHECK-ORIGIN-NEXT: store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
163+
; CHECK-ORIGIN-NEXT: store i32 [[TMP2]], ptr @__msan_retval_origin_tls, align 4
164+
; CHECK-ORIGIN-NEXT: ret i32 [[X]]
165+
;
69166
%x = extractvalue [3 x { i32, i32 }] %a, 2, 1
70167
ret i32 %x
71168
}
72169

73-
; CHECK-LABEL: @ArrayOfStructs(
74-
; CHECK: [[Ss:%.*]] = load [3 x { i32, i32 }], ptr @__msan_param_tls
75-
; CHECK: [[Sx:%.*]] = extractvalue [3 x { i32, i32 }] [[Ss]], 2, 1
76-
; CHECK: store i32 [[Sx]], ptr @__msan_retval_tls
77-
; CHECK: ret i32
78-
79-
80170
define <8 x i16> @ArrayOfVectors([3 x <8 x i16>] %a) sanitize_memory {
171+
; CHECK-LABEL: define <8 x i16> @ArrayOfVectors(
172+
; CHECK-SAME: [3 x <8 x i16>] [[A:%.*]]) #[[ATTR0]] {
173+
; CHECK-NEXT: [[TMP1:%.*]] = load [3 x <8 x i16>], ptr @__msan_param_tls, align 8
174+
; CHECK-NEXT: call void @llvm.donothing()
175+
; CHECK-NEXT: [[TMP2:%.*]] = extractvalue [3 x <8 x i16>] [[TMP1]], 1
176+
; CHECK-NEXT: [[X:%.*]] = extractvalue [3 x <8 x i16>] [[A]], 1
177+
; CHECK-NEXT: store <8 x i16> [[TMP2]], ptr @__msan_retval_tls, align 8
178+
; CHECK-NEXT: ret <8 x i16> [[X]]
179+
;
180+
; CHECK-ORIGIN-LABEL: define <8 x i16> @ArrayOfVectors(
181+
; CHECK-ORIGIN-SAME: [3 x <8 x i16>] [[A:%.*]]) #[[ATTR0]] {
182+
; CHECK-ORIGIN-NEXT: [[TMP1:%.*]] = load [3 x <8 x i16>], ptr @__msan_param_tls, align 8
183+
; CHECK-ORIGIN-NEXT: [[TMP2:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
184+
; CHECK-ORIGIN-NEXT: call void @llvm.donothing()
185+
; CHECK-ORIGIN-NEXT: [[TMP3:%.*]] = extractvalue [3 x <8 x i16>] [[TMP1]], 1
186+
; CHECK-ORIGIN-NEXT: [[X:%.*]] = extractvalue [3 x <8 x i16>] [[A]], 1
187+
; CHECK-ORIGIN-NEXT: store <8 x i16> [[TMP3]], ptr @__msan_retval_tls, align 8
188+
; CHECK-ORIGIN-NEXT: store i32 [[TMP2]], ptr @__msan_retval_origin_tls, align 4
189+
; CHECK-ORIGIN-NEXT: ret <8 x i16> [[X]]
190+
;
81191
%x = extractvalue [3 x <8 x i16>] %a, 1
82192
ret <8 x i16> %x
83193
}
84194

85-
; CHECK-LABEL: @ArrayOfVectors(
86-
; CHECK: [[Ss:%.*]] = load [3 x <8 x i16>], ptr @__msan_param_tls
87-
; CHECK: [[Sx:%.*]] = extractvalue [3 x <8 x i16>] [[Ss]], 1
88-
; CHECK: store <8 x i16> [[Sx]], ptr @__msan_retval_tls
89-
; CHECK: ret <8 x i16>

0 commit comments

Comments
 (0)