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