|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
1 | 2 | ; NOTE: Assertions have mostly been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
2 | 3 | ; RUN: opt < %s -S -passes=msan -msan-precise-disjoint-or=false 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-IMPRECISE |
3 | 4 | ; RUN: opt < %s -S -passes=msan -msan-precise-disjoint-or=true 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PRECISE |
@@ -29,30 +30,41 @@ define i8 @test_or(i8 %a, i8 %b) sanitize_memory { |
29 | 30 | } |
30 | 31 |
|
31 | 32 | define i8 @test_disjoint_or(i8 %a, i8 %b) sanitize_memory { |
32 | | -; CHECK-LABEL: define i8 @test_disjoint_or( |
33 | | -; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) #[[ATTR0]] { |
34 | | -; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr @__msan_param_tls, align 8 |
35 | | -; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8 |
36 | | -; CHECK-NEXT: call void @llvm.donothing() |
37 | | -; CHECK-NEXT: [[TMP3:%.*]] = xor i8 [[A]], -1 |
38 | | -; CHECK-NEXT: [[TMP4:%.*]] = xor i8 [[B]], -1 |
39 | | -; CHECK-NEXT: [[TMP5:%.*]] = and i8 [[TMP1]], [[TMP2]] |
40 | | -; CHECK-NEXT: [[TMP6:%.*]] = and i8 [[TMP3]], [[TMP2]] |
41 | | -; CHECK-NEXT: [[TMP7:%.*]] = and i8 [[TMP1]], [[TMP4]] |
42 | | -; CHECK-NEXT: [[TMP8:%.*]] = or i8 [[TMP5]], [[TMP6]] |
43 | | -; CHECK-NEXT: [[TMP9:%.*]] = or i8 [[TMP8]], [[TMP7]] |
44 | | -; |
45 | | -; CHECK-IMPRECISE: [[C:%.*]] = or disjoint i8 [[A]], [[B]] |
46 | | -; CHECK-IMPRECISE-NEXT: store i8 [[TMP9]], ptr @__msan_retval_tls, align 8 |
| 33 | +; CHECK-IMPRECISE-LABEL: define i8 @test_disjoint_or( |
| 34 | +; CHECK-IMPRECISE-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) #[[ATTR0]] { |
| 35 | +; CHECK-IMPRECISE-NEXT: [[TMP1:%.*]] = load i8, ptr @__msan_param_tls, align 8 |
| 36 | +; CHECK-IMPRECISE-NEXT: [[TMP2:%.*]] = load i8, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8 |
| 37 | +; CHECK-IMPRECISE-NEXT: call void @llvm.donothing() |
| 38 | +; CHECK-IMPRECISE-NEXT: [[TMP3:%.*]] = xor i8 [[A]], -1 |
| 39 | +; CHECK-IMPRECISE-NEXT: [[TMP4:%.*]] = xor i8 [[B]], -1 |
| 40 | +; CHECK-IMPRECISE-NEXT: [[TMP5:%.*]] = and i8 [[TMP1]], [[TMP2]] |
| 41 | +; CHECK-IMPRECISE-NEXT: [[TMP6:%.*]] = and i8 [[TMP3]], [[TMP2]] |
| 42 | +; CHECK-IMPRECISE-NEXT: [[TMP7:%.*]] = and i8 [[TMP1]], [[TMP4]] |
| 43 | +; CHECK-IMPRECISE-NEXT: [[TMP8:%.*]] = or i8 [[TMP5]], [[TMP6]] |
| 44 | +; CHECK-IMPRECISE-NEXT: [[TMP9:%.*]] = or i8 [[TMP8]], [[TMP7]] |
| 45 | +; CHECK-IMPRECISE-NEXT: [[C:%.*]] = or disjoint i8 [[A]], [[B]] |
| 46 | +; CHECK-IMPRECISE-NEXT: store i8 [[TMP9]], ptr @__msan_retval_tls, align 8 |
| 47 | +; CHECK-IMPRECISE-NEXT: ret i8 [[C]] |
47 | 48 | ; |
| 49 | +; CHECK-PRECISE-LABEL: define i8 @test_disjoint_or( |
| 50 | +; CHECK-PRECISE-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) #[[ATTR0]] { |
| 51 | +; CHECK-PRECISE-NEXT: [[TMP1:%.*]] = load i8, ptr @__msan_param_tls, align 8 |
| 52 | +; CHECK-PRECISE-NEXT: [[TMP2:%.*]] = load i8, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8 |
| 53 | +; CHECK-PRECISE-NEXT: call void @llvm.donothing() |
| 54 | +; CHECK-PRECISE-NEXT: [[TMP3:%.*]] = xor i8 [[A]], -1 |
| 55 | +; CHECK-PRECISE-NEXT: [[TMP4:%.*]] = xor i8 [[B]], -1 |
| 56 | +; CHECK-PRECISE-NEXT: [[TMP5:%.*]] = and i8 [[TMP1]], [[TMP2]] |
| 57 | +; CHECK-PRECISE-NEXT: [[TMP6:%.*]] = and i8 [[TMP3]], [[TMP2]] |
| 58 | +; CHECK-PRECISE-NEXT: [[TMP7:%.*]] = and i8 [[TMP1]], [[TMP4]] |
| 59 | +; CHECK-PRECISE-NEXT: [[TMP8:%.*]] = or i8 [[TMP5]], [[TMP6]] |
| 60 | +; CHECK-PRECISE-NEXT: [[TMP9:%.*]] = or i8 [[TMP8]], [[TMP7]] |
48 | 61 | ; CHECK-PRECISE-NEXT: [[TMP10:%.*]] = and i8 [[A]], [[B]] |
49 | 62 | ; CHECK-PRECISE-NEXT: [[TMP11:%.*]] = icmp ne i8 [[TMP10]], 0 |
50 | 63 | ; CHECK-PRECISE-NEXT: [[TMP12:%.*]] = sext i1 [[TMP11]] to i8 |
51 | 64 | ; CHECK-PRECISE-NEXT: [[_MS_DISJOINT:%.*]] = or i8 [[TMP9]], [[TMP12]] |
52 | 65 | ; CHECK-PRECISE-NEXT: [[C:%.*]] = or disjoint i8 [[A]], [[B]] |
53 | 66 | ; CHECK-PRECISE-NEXT: store i8 [[_MS_DISJOINT]], ptr @__msan_retval_tls, align 8 |
54 | | -; |
55 | | -; CHECK-NEXT: ret i8 [[C]] |
| 67 | +; CHECK-PRECISE-NEXT: ret i8 [[C]] |
56 | 68 | ; |
57 | 69 | %c = or disjoint i8 %a, %b |
58 | 70 | ret i8 %c |
|
0 commit comments