xref: /llvm-project/llvm/test/Instrumentation/DataFlowSanitizer/arith.ll (revision ecb85b5cd89f9797c538675ee3ab93e350c57bd5)
1; RUN: opt < %s -passes=dfsan -S | FileCheck %s
2target 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"
3target triple = "x86_64-unknown-linux-gnu"
4
5define i8 @add(i8 %a, i8 %b) {
6  ; CHECK: @add.dfsan
7  ; CHECK-DAG: %[[#ALABEL:]] = load i8, ptr @__dfsan_arg_tls, align [[ALIGN:2]]
8  ; CHECK-DAG: %[[#BLABEL:]] = load i8, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__dfsan_arg_tls to i64), i64 2) to ptr), align [[ALIGN]]
9  ; CHECK: %[[#UNION:]] = or i8 %[[#ALABEL]], %[[#BLABEL]]
10  ; CHECK: %c = add i8 %a, %b
11  ; CHECK: store i8 %[[#UNION]], ptr @__dfsan_retval_tls, align [[ALIGN]]
12  ; CHECK: ret i8 %c
13  %c = add i8 %a, %b
14  ret i8 %c
15}
16
17define i8 @sub(i8 %a, i8 %b) {
18  ; CHECK: @sub.dfsan
19  ; CHECK: load{{.*}}__dfsan_arg_tls
20  ; CHECK: load{{.*}}__dfsan_arg_tls
21  ; CHECK: or i8
22  ; CHECK: %c = sub i8 %a, %b
23  ; CHECK: store{{.*}}__dfsan_retval_tls
24  ; CHECK: ret i8 %c
25  %c = sub i8 %a, %b
26  ret i8 %c
27}
28
29define i8 @mul(i8 %a, i8 %b) {
30  ; CHECK: @mul.dfsan
31  ; CHECK: load{{.*}}__dfsan_arg_tls
32  ; CHECK: load{{.*}}__dfsan_arg_tls
33  ; CHECK: or i8
34  ; CHECK: %c = mul i8 %a, %b
35  ; CHECK: store{{.*}}__dfsan_retval_tls
36  ; CHECK: ret i8 %c
37  %c = mul i8 %a, %b
38  ret i8 %c
39}
40
41define i8 @sdiv(i8 %a, i8 %b) {
42  ; CHECK: @sdiv.dfsan
43  ; CHECK: load{{.*}}__dfsan_arg_tls
44  ; CHECK: load{{.*}}__dfsan_arg_tls
45  ; CHECK: or i8
46  ; CHECK: %c = sdiv i8 %a, %b
47  ; CHECK: store{{.*}}__dfsan_retval_tls
48  ; CHECK: ret i8 %c
49  %c = sdiv i8 %a, %b
50  ret i8 %c
51}
52
53define i8 @udiv(i8 %a, i8 %b) {
54  ; CHECK: @udiv.dfsan
55  ; CHECK: load{{.*}}__dfsan_arg_tls
56  ; CHECK: load{{.*}}__dfsan_arg_tls
57  ; CHECK: or i8
58  ; CHECK: %c = udiv i8 %a, %b
59  ; CHECK: store{{.*}}__dfsan_retval_tls
60  ; CHECK: ret i8 %c
61  %c = udiv i8 %a, %b
62  ret i8 %c
63}
64
65define double @fneg(double %a) {
66  ; CHECK: @fneg.dfsan
67  ; CHECK: load{{.*}}__dfsan_arg_tls
68  ; CHECK: %c = fneg double %a
69  ; CHECK: store{{.*}}__dfsan_retval_tls
70  ; CHECK: ret double %c
71  %c = fneg double %a
72  ret double %c
73}
74