You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.167
Former-commit-id: 289509151e0fee68a1b591a20c9f109c3c789d3a
This commit is contained in:
parent
e19d552987
commit
b084638f15
@ -1,8 +0,0 @@
|
||||
fun:discard*=uninstrumented
|
||||
fun:discard*=discard
|
||||
|
||||
fun:functional=uninstrumented
|
||||
fun:functional=functional
|
||||
|
||||
fun:custom*=uninstrumented
|
||||
fun:custom*=custom
|
@ -1,2 +0,0 @@
|
||||
fun:main=uninstrumented
|
||||
fun:main=discard
|
@ -1,8 +0,0 @@
|
||||
fun:dfsan_get_label=uninstrumented
|
||||
fun:dfsan_get_label=custom
|
||||
|
||||
fun:k2=uninstrumented
|
||||
fun:k2=custom
|
||||
|
||||
fun:k4=uninstrumented
|
||||
fun:k4=custom
|
@ -1,100 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -dfsan-args-abi -dfsan-abilist=%S/Inputs/abilist.txt -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; CHECK: i32 @discard(i32 %a, i32 %b)
|
||||
define i32 @discard(i32 %a, i32 %b) {
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
; CHECK: i32 @functional(i32 %a, i32 %b)
|
||||
define i32 @functional(i32 %a, i32 %b) {
|
||||
%c = add i32 %a, %b
|
||||
ret i32 %c
|
||||
}
|
||||
|
||||
; CHECK: define i32 (i32, i32)* @discardg(i32)
|
||||
; CHECK: %[[CALL:.*]] = call { i32 (i32, i32)*, i16 } @"dfs$g"(i32 %0, i16 0)
|
||||
; CHECK: %[[XVAL:.*]] = extractvalue { i32 (i32, i32)*, i16 } %[[CALL]], 0
|
||||
; CHECK: ret {{.*}} %[[XVAL]]
|
||||
@discardg = alias i32 (i32, i32)* (i32), i32 (i32, i32)* (i32)* @g
|
||||
|
||||
declare void @custom1(i32 %a, i32 %b)
|
||||
|
||||
; CHECK: define linkonce_odr { i32, i16 } @"dfsw$custom2"(i32, i32, i16, i16)
|
||||
; CHECK: %[[LABELRETURN2:.*]] = alloca i16
|
||||
; CHECK: %[[RV:.*]] = call i32 @__dfsw_custom2
|
||||
; CHECK: %[[RVSHADOW:.*]] = load i16, i16* %[[LABELRETURN2]]
|
||||
; CHECK: insertvalue {{.*}}[[RV]], 0
|
||||
; CHECK: insertvalue {{.*}}[[RVSHADOW]], 1
|
||||
; CHECK: ret { i32, i16 }
|
||||
declare i32 @custom2(i32 %a, i32 %b)
|
||||
|
||||
; CHECK: define linkonce_odr void @"dfsw$custom3"(i32, i16, i16*, ...)
|
||||
; CHECK: call void @__dfsan_vararg_wrapper(i8*
|
||||
; CHECK: unreachable
|
||||
declare void @custom3(i32 %a, ...)
|
||||
|
||||
declare i32 @custom4(i32 %a, ...)
|
||||
|
||||
declare void @customcb(i32 (i32)* %cb)
|
||||
|
||||
declare i32 @cb(i32)
|
||||
|
||||
; CHECK: @"dfs$f"
|
||||
define void @f(i32 %x) {
|
||||
; CHECK: %[[LABELVA2:.*]] = alloca [2 x i16]
|
||||
; CHECK: %[[LABELVA1:.*]] = alloca [2 x i16]
|
||||
; CHECK: %[[LABELRETURN:.*]] = alloca i16
|
||||
|
||||
; CHECK: call void @__dfsw_custom1(i32 1, i32 2, i16 zeroext 0, i16 zeroext 0)
|
||||
call void @custom1(i32 1, i32 2)
|
||||
|
||||
; CHECK: call i32 @__dfsw_custom2(i32 1, i32 2, i16 zeroext 0, i16 zeroext 0, i16* %[[LABELRETURN]])
|
||||
call i32 @custom2(i32 1, i32 2)
|
||||
|
||||
; CHECK: call void @__dfsw_customcb({{.*}} @"dfst0$customcb", i8* bitcast ({{.*}} @"dfs$cb" to i8*), i16 zeroext 0)
|
||||
call void @customcb(i32 (i32)* @cb)
|
||||
|
||||
; CHECK: %[[LABELVA1_0:.*]] = getelementptr inbounds [2 x i16], [2 x i16]* %[[LABELVA1]], i32 0, i32 0
|
||||
; CHECK: store i16 0, i16* %[[LABELVA1_0]]
|
||||
; CHECK: %[[LABELVA1_1:.*]] = getelementptr inbounds [2 x i16], [2 x i16]* %[[LABELVA1]], i32 0, i32 1
|
||||
; CHECK: store i16 %{{.*}}, i16* %[[LABELVA1_1]]
|
||||
; CHECK: %[[LABELVA1_0A:.*]] = getelementptr inbounds [2 x i16], [2 x i16]* %[[LABELVA1]], i32 0, i32 0
|
||||
; CHECK: call void (i32, i16, i16*, ...) @__dfsw_custom3(i32 1, i16 zeroext 0, i16* %[[LABELVA1_0A]], i32 2, i32 %{{.*}})
|
||||
call void (i32, ...) @custom3(i32 1, i32 2, i32 %x)
|
||||
|
||||
; CHECK: %[[LABELVA2_0:.*]] = getelementptr inbounds [2 x i16], [2 x i16]* %[[LABELVA2]], i32 0, i32 0
|
||||
; CHECK: %[[LABELVA2_0A:.*]] = getelementptr inbounds [2 x i16], [2 x i16]* %[[LABELVA2]], i32 0, i32 0
|
||||
; CHECK: call i32 (i32, i16, i16*, i16*, ...) @__dfsw_custom4(i32 1, i16 zeroext 0, i16* %[[LABELVA2_0A]], i16* %[[LABELRETURN]], i32 2, i32 3)
|
||||
call i32 (i32, ...) @custom4(i32 1, i32 2, i32 3)
|
||||
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: @"dfs$g"
|
||||
define i32 (i32, i32)* @g(i32) {
|
||||
; CHECK: ret {{.*}} @"dfsw$custom2"
|
||||
ret i32 (i32, i32)* @custom2
|
||||
}
|
||||
|
||||
; CHECK: define { i32, i16 } @"dfs$adiscard"(i32, i32, i16, i16)
|
||||
; CHECK: %[[CALL:.*]] = call i32 @discard(i32 %0, i32 %1)
|
||||
; CHECK: %[[IVAL0:.*]] = insertvalue { i32, i16 } undef, i32 %[[CALL]], 0
|
||||
; CHECK: %[[IVAL1:.*]] = insertvalue { i32, i16 } %[[IVAL0]], i16 0, 1
|
||||
; CHECK: ret { i32, i16 } %[[IVAL1]]
|
||||
@adiscard = alias i32 (i32, i32), i32 (i32, i32)* @discard
|
||||
|
||||
; CHECK: declare void @__dfsw_custom1(i32, i32, i16, i16)
|
||||
; CHECK: declare i32 @__dfsw_custom2(i32, i32, i16, i16, i16*)
|
||||
|
||||
; CHECK-LABEL: define linkonce_odr i32 @"dfst0$customcb"(i32 (i32)*, i32, i16, i16*)
|
||||
; CHECK: %[[BC:.*]] = bitcast i32 (i32)* %0 to { i32, i16 } (i32, i16)*
|
||||
; CHECK: %[[CALL:.*]] = call { i32, i16 } %[[BC]](i32 %1, i16 %2)
|
||||
; CHECK: %[[XVAL0:.*]] = extractvalue { i32, i16 } %[[CALL]], 0
|
||||
; CHECK: %[[XVAL1:.*]] = extractvalue { i32, i16 } %[[CALL]], 1
|
||||
; CHECK: store i16 %[[XVAL1]], i16* %3
|
||||
; CHECK: ret i32 %[[XVAL0]]
|
||||
|
||||
; CHECK: declare void @__dfsw_custom3(i32, i16, i16*, ...)
|
||||
; CHECK: declare i32 @__dfsw_custom4(i32, i16, i16*, i16*, ...)
|
@ -1,31 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -verify -dfsan-args-abi -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; CHECK-LABEL: @"dfs$unreachable_bb1"
|
||||
define i8 @unreachable_bb1() {
|
||||
; CHECK: ret { i8, i16 } { i8 1, i16 0 }
|
||||
; CHECK-NOT: bb2:
|
||||
; CHECK-NOT: bb3:
|
||||
; CHECK-NOT: bb4:
|
||||
ret i8 1
|
||||
|
||||
bb2:
|
||||
ret i8 2
|
||||
|
||||
bb3:
|
||||
br label %bb4
|
||||
|
||||
bb4:
|
||||
br label %bb3
|
||||
}
|
||||
|
||||
declare void @abort() noreturn
|
||||
|
||||
; CHECK-LABEL: @"dfs$unreachable_bb2"
|
||||
define i8 @unreachable_bb2() {
|
||||
call void @abort() noreturn
|
||||
; CHECK-NOT: i8 12
|
||||
; CHECK: unreachable
|
||||
ret i8 12
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define i8 @add(i8 %a, i8 %b) {
|
||||
; CHECK: @"dfs$add"
|
||||
; CHECK-DAG: %[[ALABEL:.*]] = load{{.*}}__dfsan_arg_tls, i64 0, i64 0
|
||||
; CHECK-DAG: %[[BLABEL:.*]] = load{{.*}}__dfsan_arg_tls, i64 0, i64 1
|
||||
; CHECK: %[[UNION:.*]] = call{{.*}}__dfsan_union(i16 zeroext %[[ALABEL]], i16 zeroext %[[BLABEL]])
|
||||
; CHECK: %[[ADDLABEL:.*]] = phi i16 [ %[[UNION]], {{.*}} ], [ %[[ALABEL]], {{.*}} ]
|
||||
; CHECK: add i8
|
||||
; CHECK: store i16 %[[ADDLABEL]], i16* @__dfsan_retval_tls
|
||||
; CHECK: ret i8
|
||||
%c = add i8 %a, %b
|
||||
ret i8 %c
|
||||
}
|
||||
|
||||
define i8 @sub(i8 %a, i8 %b) {
|
||||
; CHECK: @"dfs$sub"
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
; CHECK: sub i8
|
||||
; CHECK: store{{.*}}__dfsan_retval_tls
|
||||
; CHECK: ret i8
|
||||
%c = sub i8 %a, %b
|
||||
ret i8 %c
|
||||
}
|
||||
|
||||
define i8 @mul(i8 %a, i8 %b) {
|
||||
; CHECK: @"dfs$mul"
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
; CHECK: mul i8
|
||||
; CHECK: store{{.*}}__dfsan_retval_tls
|
||||
; CHECK: ret i8
|
||||
%c = mul i8 %a, %b
|
||||
ret i8 %c
|
||||
}
|
||||
|
||||
define i8 @sdiv(i8 %a, i8 %b) {
|
||||
; CHECK: @"dfs$sdiv"
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
; CHECK: sdiv i8
|
||||
; CHECK: store{{.*}}__dfsan_retval_tls
|
||||
; CHECK: ret i8
|
||||
%c = sdiv i8 %a, %b
|
||||
ret i8 %c
|
||||
}
|
||||
|
||||
define i8 @udiv(i8 %a, i8 %b) {
|
||||
; CHECK: @"dfs$udiv"
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: load{{.*}}__dfsan_arg_tls
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
; CHECK: udiv i8
|
||||
; CHECK: store{{.*}}__dfsan_retval_tls
|
||||
; CHECK: ret i8
|
||||
%c = udiv i8 %a, %b
|
||||
ret i8 %c
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; CHECK-LABEL: @__dfsan_arg_tls
|
||||
; CHECK: = external thread_local(initialexec) global [64 x i16]
|
||||
|
||||
; CHECK-LABEL: @__dfsan_retval_tls
|
||||
; CHECK: = external thread_local(initialexec) global i16
|
||||
|
||||
declare i32 @f(i32)
|
||||
declare float @llvm.sqrt.f32(float)
|
||||
|
||||
; CHECK-LABEL: @"dfs$call"
|
||||
define i32 @call() {
|
||||
; CHECK: store{{.*}}__dfsan_arg_tls
|
||||
; CHECK: call{{.*}}@"dfs$f"
|
||||
; CHECK: load{{.*}}__dfsan_retval_tls
|
||||
%r = call i32 @f(i32 0)
|
||||
|
||||
; CHECK-NOT: store{{.*}}__dfsan_arg_tls
|
||||
%i = call float @llvm.sqrt.f32(float -1.0)
|
||||
|
||||
; CHECK: store{{.*}}__dfsan_retval_tls
|
||||
; CHECK: ret i32
|
||||
ret i32 %r
|
||||
}
|
||||
|
||||
declare i32 @__gxx_personality_v0(...)
|
||||
|
||||
declare i8* @__cxa_begin_catch(i8*)
|
||||
|
||||
declare void @__cxa_end_catch()
|
||||
|
||||
declare void @g(...)
|
||||
|
||||
; CHECK-LABEL: @"dfs$h"
|
||||
; CHECK: personality {{.*}} @"dfs$__gxx_personality_v0" {{.*}} {
|
||||
define i32 @h() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
|
||||
entry:
|
||||
; CHECK: invoke void (...) @"dfs$g"(i32 42)
|
||||
invoke void (...) @g(i32 42)
|
||||
to label %try.cont unwind label %lpad
|
||||
|
||||
lpad:
|
||||
%0 = landingpad { i8*, i32 }
|
||||
catch i8* null
|
||||
%1 = extractvalue { i8*, i32 } %0, 0
|
||||
|
||||
; CHECK: store {{.*}} @__dfsan_arg_tls
|
||||
; CHECK: call {{.*}} @"dfs$__cxa_begin_catch"
|
||||
; CHECK: load {{.*}} @__dfsan_retval_tls
|
||||
%2 = tail call i8* @__cxa_begin_catch(i8* %1)
|
||||
|
||||
; CHECK: call {{.*}} @"dfs$__cxa_end_catch"
|
||||
tail call void @__cxa_end_catch()
|
||||
br label %try.cont
|
||||
|
||||
try.cont:
|
||||
ret i32 0
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -dfsan-args-abi -dfsan-debug-nonzero-labels -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
declare i32 @g()
|
||||
|
||||
; CHECK: define { i32, i16 } @"dfs$f"(i32, i32, i16, i16)
|
||||
define i32 @f(i32, i32) {
|
||||
; CHECK: [[LOCALLABELALLOCA:%.*]] = alloca i16
|
||||
%i = alloca i32
|
||||
; CHECK: [[ARGCMP1:%.*]] = icmp ne i16 %3, 0
|
||||
; CHECK: br i1 [[ARGCMP1]]
|
||||
; CHECK: [[ARGCMP2:%.*]] = icmp ne i16 %2, 0
|
||||
; CHECK: br i1 [[ARGCMP2]]
|
||||
%x = add i32 %0, %1
|
||||
store i32 %x, i32* %i
|
||||
; CHECK: [[CALL:%.*]] = call { i32, i16 } @"dfs$g"()
|
||||
; CHECK: [[CALLLABEL:%.*]] = extractvalue { i32, i16 } [[CALL]], 1
|
||||
; CHECK: [[CALLCMP:%.*]] = icmp ne i16 [[CALLLABEL]], 0
|
||||
; CHECK: br i1 [[CALLCMP]]
|
||||
%call = call i32 @g()
|
||||
; CHECK: [[LOCALLABEL:%.*]] = load i16, i16* [[LOCALLABELALLOCA]]
|
||||
; CHECK: [[LOCALCMP:%.*]] = icmp ne i16 [[LOCALLABEL]], 0
|
||||
; CHECK: br i1 [[LOCALCMP]]
|
||||
%load = load i32, i32* %i
|
||||
ret i32 %load
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -dfsan-abilist=%S/Inputs/debuglist.txt -S | FileCheck %s
|
||||
|
||||
; CHECK: define i32 @main() {{.*}} !dbg [[SP:![0-9]+]]
|
||||
; CHECK: [[SP]] = distinct !DISubprogram(name: "main"
|
||||
|
||||
; Generated from a simple source file compiled with clang -g:
|
||||
; int main() {
|
||||
; }
|
||||
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; Function Attrs: nounwind uwtable
|
||||
define i32 @main() #0 !dbg !4 {
|
||||
entry:
|
||||
ret i32 0, !dbg !12
|
||||
}
|
||||
|
||||
attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!9, !10}
|
||||
!llvm.ident = !{!11}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.6.0 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
||||
!1 = !DIFile(filename: "debug.cpp", directory: "/tmp/dbginfo")
|
||||
!2 = !{}
|
||||
!4 = distinct !DISubprogram(name: "main", line: 1, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !5, type: !6, variables: !2)
|
||||
!5 = !DIFile(filename: "debug.cpp", directory: "/tmp/dbginfo")
|
||||
!6 = !DISubroutineType(types: !7)
|
||||
!7 = !{!8}
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!9 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!10 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!11 = !{!"clang version 3.6.0 "}
|
||||
!12 = !DILocation(line: 2, column: 1, scope: !4)
|
@ -1,14 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -S | FileCheck %s
|
||||
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
|
||||
target triple = "aarch64-unknown-linux-gnu"
|
||||
|
||||
define i32 @test(i32 %a, i32* nocapture readonly %b) #0 {
|
||||
; CHECK: @"dfs$test"
|
||||
; CHECK: %[[RV:.*]] load{{.*}}__dfsan_shadow_ptr_mask
|
||||
; CHECK: ptrtoint i32* {{.*}} to i64
|
||||
; CHECK: and {{.*}}%[[RV:.*]]
|
||||
; CHECK: mul i64
|
||||
%1 = load i32, i32* %b, align 4
|
||||
%2 = add nsw i32 %1, %a
|
||||
ret i32 %2
|
||||
}
|
@ -1,168 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-load=1 -S | FileCheck %s --check-prefix=COMBINE_PTR_LABEL
|
||||
; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-load=0 -S | FileCheck %s --check-prefix=NO_COMBINE_PTR_LABEL
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define {} @load0({}* %p) {
|
||||
; COMBINE_PTR_LABEL: @"dfs$load0"
|
||||
; COMBINE_PTR_LABEL: load
|
||||
; COMBINE_PTR_LABEL-NOT: load
|
||||
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$load0"
|
||||
; NO_COMBINE_PTR_LABEL: load
|
||||
; NO_COMBINE_PTR_LABEL-NOT: load
|
||||
%a = load {}, {}* %p
|
||||
ret {} %a
|
||||
}
|
||||
|
||||
define i8 @load8(i8* %p) {
|
||||
; COMBINE_PTR_LABEL: @"dfs$load8"
|
||||
; COMBINE_PTR_LABEL: load i16, i16*
|
||||
; COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} to i64
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64
|
||||
; COMBINE_PTR_LABEL: load i16, i16*
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call zeroext i16 @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: load i8, i8*
|
||||
; COMBINE_PTR_LABEL: store i16 {{.*}} @__dfsan_retval_tls
|
||||
; COMBINE_PTR_LABEL: ret i8
|
||||
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$load8"
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i8*
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} to i16*
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: load i8, i8*
|
||||
; NO_COMBINE_PTR_LABEL: store i16 {{.*}} @__dfsan_retval_tls
|
||||
; NO_COMBINE_PTR_LABEL: ret i8
|
||||
|
||||
%a = load i8, i8* %p
|
||||
ret i8 %a
|
||||
}
|
||||
|
||||
define i16 @load16(i16* %p) {
|
||||
; COMBINE_PTR_LABEL: @"dfs$load16"
|
||||
; COMBINE_PTR_LABEL: ptrtoint i16*
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; COMBINE_PTR_LABEL: getelementptr i16
|
||||
; COMBINE_PTR_LABEL: load i16, i16*
|
||||
; COMBINE_PTR_LABEL: load i16, i16*
|
||||
; COMBINE_PTR_LABEL: icmp ne
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: load i16, i16*
|
||||
; COMBINE_PTR_LABEL: store {{.*}} @__dfsan_retval_tls
|
||||
; COMBINE_PTR_LABEL: ret i16
|
||||
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$load16"
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i16*
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: icmp ne i16
|
||||
; NO_COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16 {{.*}} @__dfsan_retval_tls
|
||||
; NO_COMBINE_PTR_LABEL: ret i16
|
||||
|
||||
%a = load i16, i16* %p
|
||||
ret i16 %a
|
||||
}
|
||||
|
||||
define i32 @load32(i32* %p) {
|
||||
; COMBINE_PTR_LABEL: @"dfs$load32"
|
||||
; COMBINE_PTR_LABEL: ptrtoint i32*
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; COMBINE_PTR_LABEL: bitcast i16* {{.*}} i64*
|
||||
; COMBINE_PTR_LABEL: load i64, i64*
|
||||
; COMBINE_PTR_LABEL: trunc i64 {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: shl i64
|
||||
; COMBINE_PTR_LABEL: lshr i64
|
||||
; COMBINE_PTR_LABEL: or i64
|
||||
; COMBINE_PTR_LABEL: icmp eq i64
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: load i32, i32*
|
||||
; COMBINE_PTR_LABEL: store i16 {{.*}} @__dfsan_retval_tls
|
||||
; COMBINE_PTR_LABEL: ret i32
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union_load
|
||||
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$load32"
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i32*
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; NO_COMBINE_PTR_LABEL: bitcast i16* {{.*}} i64*
|
||||
; NO_COMBINE_PTR_LABEL: load i64, i64*
|
||||
; NO_COMBINE_PTR_LABEL: trunc i64 {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: shl i64
|
||||
; NO_COMBINE_PTR_LABEL: lshr i64
|
||||
; NO_COMBINE_PTR_LABEL: or i64
|
||||
; NO_COMBINE_PTR_LABEL: icmp eq i64
|
||||
; NO_COMBINE_PTR_LABEL: load i32, i32*
|
||||
; NO_COMBINE_PTR_LABEL: store i16 {{.*}} @__dfsan_retval_tls
|
||||
; NO_COMBINE_PTR_LABEL: ret i32
|
||||
; NO_COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union_load
|
||||
|
||||
|
||||
%a = load i32, i32* %p
|
||||
ret i32 %a
|
||||
}
|
||||
|
||||
define i64 @load64(i64* %p) {
|
||||
; COMBINE_PTR_LABEL: @"dfs$load64"
|
||||
; COMBINE_PTR_LABEL: ptrtoint i64*
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; COMBINE_PTR_LABEL: bitcast i16* {{.*}} i64*
|
||||
; COMBINE_PTR_LABEL: load i64, i64*
|
||||
; COMBINE_PTR_LABEL: trunc i64 {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: shl i64
|
||||
; COMBINE_PTR_LABEL: lshr i64
|
||||
; COMBINE_PTR_LABEL: or i64
|
||||
; COMBINE_PTR_LABEL: icmp eq i64
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: load i64, i64*
|
||||
; COMBINE_PTR_LABEL: store i16 {{.*}} @__dfsan_retval_tls
|
||||
; COMBINE_PTR_LABEL: ret i64
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union_load
|
||||
; COMBINE_PTR_LABEL: getelementptr i64, i64* {{.*}} i64
|
||||
; COMBINE_PTR_LABEL: load i64, i64*
|
||||
; COMBINE_PTR_LABEL: icmp eq i64
|
||||
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$load64"
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i64*
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; NO_COMBINE_PTR_LABEL: bitcast i16* {{.*}} i64*
|
||||
; NO_COMBINE_PTR_LABEL: load i64, i64*
|
||||
; NO_COMBINE_PTR_LABEL: trunc i64 {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: shl i64
|
||||
; NO_COMBINE_PTR_LABEL: lshr i64
|
||||
; NO_COMBINE_PTR_LABEL: or i64
|
||||
; NO_COMBINE_PTR_LABEL: icmp eq i64
|
||||
; NO_COMBINE_PTR_LABEL: load i64, i64*
|
||||
; NO_COMBINE_PTR_LABEL: store i16 {{.*}} @__dfsan_retval_tls
|
||||
; NO_COMBINE_PTR_LABEL: ret i64
|
||||
; NO_COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union_load
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i64, i64* {{.*}} i64
|
||||
; NO_COMBINE_PTR_LABEL: load i64, i64*
|
||||
; NO_COMBINE_PTR_LABEL: icmp eq i64
|
||||
|
||||
%a = load i64, i64* %p
|
||||
ret i64 %a
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -dfsan-args-abi -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1)
|
||||
|
||||
define void @ms(i8* %p, i8 %v) {
|
||||
; CHECK-LABEL: @"dfs$ms"(i8*, i8, i16, i16)
|
||||
; CHECK: call void @__dfsan_set_label(i16 %3, i8* %0, i64 1)
|
||||
call void @llvm.memset.p0i8.i64(i8* %p, i8 %v, i64 1, i32 1, i1 1)
|
||||
ret void
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -S | FileCheck %s
|
||||
; RUN: opt < %s -dfsan -dfsan-args-abi -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; CHECK: module asm ".symver dfs$f1,dfs$f@@version1"
|
||||
module asm ".symver f1,f@@version1"
|
||||
|
||||
; CHECK: @"dfs$f2" = alias {{.*}} @"dfs$f1"
|
||||
@f2 = alias void (), void ()* @f1
|
||||
|
||||
; CHECK: @"dfs$g2" = alias {{.*}} @"dfs$g1"
|
||||
@g2 = alias void (i16*), bitcast (void (i8*)* @g1 to void (i16*)*)
|
||||
|
||||
; CHECK: define void @"dfs$f1"
|
||||
define void @f1() {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: define void @"dfs$g1"
|
||||
define void @g1(i8*) {
|
||||
ret void
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
; RUN: opt -mtriple=x86_64-unknown-linux-gnu < %s -dfsan -S --dfsan-abilist=%S/Inputs/shadow-args-abilist.txt | FileCheck %s
|
||||
|
||||
; REQUIRES: x86-registered-target
|
||||
|
||||
; Test that the custom abi marks shadow parameters as zero extended.
|
||||
|
||||
define i32 @m() {
|
||||
entry:
|
||||
%call = call zeroext i16 @dfsan_get_label(i64 signext 56)
|
||||
%conv = zext i16 %call to i32
|
||||
ret i32 %conv
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @"dfs$m"
|
||||
; CHECK: %{{.*}} = call zeroext i16 @__dfsw_dfsan_get_label(i64 signext 56, i16 zeroext 0, i16* %{{.*}})
|
||||
|
||||
define i32 @k() {
|
||||
entry:
|
||||
%call = call zeroext i16 @k2(i64 signext 56, i64 signext 67)
|
||||
%conv = zext i16 %call to i32
|
||||
ret i32 %conv
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @"dfs$k"
|
||||
; CHECK: %{{.*}} = call zeroext i16 @__dfsw_k2(i64 signext 56, i64 signext 67, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16* %{{.*}})
|
||||
|
||||
define i32 @k3() {
|
||||
entry:
|
||||
%call = call zeroext i16 @k4(i64 signext 56, i64 signext 67, i64 signext 78, i64 signext 89)
|
||||
%conv = zext i16 %call to i32
|
||||
ret i32 %conv
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @"dfs$k3"
|
||||
; CHECK: %{{.*}} = call zeroext i16 @__dfsw_k4(i64 signext 56, i64 signext 67, i64 signext 78, i64 signext 89, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16* %{{.*}})
|
||||
|
||||
declare zeroext i16 @dfsan_get_label(i64 signext)
|
||||
|
||||
; CHECK-LABEL: @"dfsw$dfsan_get_label"
|
||||
; CHECK: %{{.*}} = call i16 @__dfsw_dfsan_get_label(i64 %0, i16 zeroext %1, i16* %{{.*}})
|
||||
|
||||
declare zeroext i16 @k2(i64 signext, i64 signext)
|
||||
; CHECK-LABEL: @"dfsw$k2"
|
||||
; CHECK: %{{.*}} = call i16 @__dfsw_k2(i64 %{{.*}}, i64 %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16* %{{.*}})
|
||||
|
||||
declare zeroext i16 @k4(i64 signext, i64 signext, i64 signext, i64 signext)
|
||||
|
||||
; CHECK-LABEL: @"dfsw$k4"
|
||||
; CHECK: %{{.*}} = call i16 @__dfsw_k4(i64 %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16* %{{.*}})
|
||||
|
||||
|
||||
; CHECK: declare zeroext i16 @__dfsw_dfsan_get_label(i64 signext, i16, i16*)
|
||||
; CHECK: declare zeroext i16 @__dfsw_k2(i64 signext, i64 signext, i16, i16, i16*)
|
||||
; CHECK: declare zeroext i16 @__dfsw_k4(i64 signext, i64 signext, i64 signext, i64 signext, i16, i16, i16, i16, i16*)
|
@ -1,160 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=1 -S | FileCheck %s --check-prefix=COMBINE_PTR_LABEL
|
||||
; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=0 -S | FileCheck %s --check-prefix=NO_COMBINE_PTR_LABEL
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define void @store0({} %v, {}* %p) {
|
||||
; COMBINE_PTR_LABEL: @"dfs$store0"
|
||||
; COMBINE_PTR_LABEL: store
|
||||
; COMBINE_PTR_LABEL-NOT: store
|
||||
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$store0"
|
||||
; NO_COMBINE_PTR_LABEL: store
|
||||
; NO_COMBINE_PTR_LABEL-NOT: store
|
||||
|
||||
store {} %v, {}* %p
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @store8(i8 %v, i8* %p) {
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$store8"
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
; NO_COMBINE_PTR_LABEL: store i8
|
||||
|
||||
; COMBINE_PTR_LABEL: @"dfs$store8"
|
||||
; COMBINE_PTR_LABEL: load i16, i16*
|
||||
; COMBINE_PTR_LABEL: load i16, i16*
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
; COMBINE_PTR_LABEL: store i8
|
||||
|
||||
store i8 %v, i8* %p
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @store16(i16 %v, i16* %p) {
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$store16"
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
|
||||
; COMBINE_PTR_LABEL: @"dfs$store16"
|
||||
; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
; COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
|
||||
store i16 %v, i16* %p
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @store32(i32 %v, i32* %p) {
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$store32"
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; NO_COMBINE_PTR_LABEL: store i16
|
||||
; NO_COMBINE_PTR_LABEL: store i32
|
||||
|
||||
; COMBINE_PTR_LABEL: @"dfs$store32"
|
||||
; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
; COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
; COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
; COMBINE_PTR_LABEL: getelementptr i16, i16*
|
||||
; COMBINE_PTR_LABEL: store i16
|
||||
; COMBINE_PTR_LABEL: store i32
|
||||
|
||||
store i32 %v, i32* %p
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @store64(i64 %v, i64* %p) {
|
||||
; NO_COMBINE_PTR_LABEL: @"dfs$store64"
|
||||
; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; NO_COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
|
||||
; NO_COMBINE_PTR_LABEL: and i64
|
||||
; NO_COMBINE_PTR_LABEL: mul i64
|
||||
; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; NO_COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
|
||||
; NO_COMBINE_PTR_LABEL: store i64
|
||||
|
||||
; COMBINE_PTR_LABEL: @"dfs$store64"
|
||||
; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
|
||||
; COMBINE_PTR_LABEL: icmp ne i16
|
||||
; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
|
||||
; COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
|
||||
; COMBINE_PTR_LABEL: and i64
|
||||
; COMBINE_PTR_LABEL: mul i64
|
||||
; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: insertelement {{.*}} i16
|
||||
; COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
|
||||
; COMBINE_PTR_LABEL: store <8 x i16>
|
||||
; COMBINE_PTR_LABEL: store i64
|
||||
|
||||
store i64 %v, i64* %p
|
||||
ret void
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,53 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -S | FileCheck %s
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
@a = common global i32 0
|
||||
@b = common global i32 0
|
||||
|
||||
; Check that we reuse unions where possible.
|
||||
|
||||
; CHECK-LABEL: @"dfs$f"
|
||||
define void @f(i32 %x, i32 %y) {
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
%xay = add i32 %x, %y
|
||||
store i32 %xay, i32* @a
|
||||
; CHECK-NOT: call{{.*}}__dfsan_union
|
||||
%xmy = mul i32 %x, %y
|
||||
store i32 %xmy, i32* @b
|
||||
ret void
|
||||
}
|
||||
|
||||
; In this case, we compute the unions on both sides because neither block
|
||||
; dominates the other.
|
||||
|
||||
; CHECK-LABEL: @"dfs$g"
|
||||
define void @g(i1 %p, i32 %x, i32 %y) {
|
||||
br i1 %p, label %l1, label %l2
|
||||
|
||||
l1:
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
%xay = add i32 %x, %y
|
||||
store i32 %xay, i32* @a
|
||||
br label %l3
|
||||
|
||||
l2:
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
%xmy = mul i32 %x, %y
|
||||
store i32 %xmy, i32* @b
|
||||
br label %l3
|
||||
|
||||
l3:
|
||||
ret void
|
||||
}
|
||||
|
||||
; In this case, we know that the label for %xayax subsumes the label for %xay.
|
||||
|
||||
; CHECK-LABEL: @"dfs$h"
|
||||
define i32 @h(i32 %x, i32 %y) {
|
||||
; CHECK: call{{.*}}__dfsan_union
|
||||
%xay = add i32 %x, %y
|
||||
; CHECK-NOT: call{{.*}}__dfsan_union
|
||||
%xayax = add i32 %xay, %x
|
||||
ret i32 %xayax
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
; RUN: opt < %s -dfsan -dfsan-args-abi -S | FileCheck %s
|
||||
|
||||
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"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
;; Placeholder tests that will fail once element atomic @llvm.mem[move|set] instrinsics have
|
||||
;; been added to the MemIntrinsic class hierarchy. These will act as a reminder to
|
||||
;; verify that dfsan handles these intrinsics properly once they have been
|
||||
;; added to that class hierarchy.
|
||||
|
||||
declare void @llvm.memset.element.unordered.atomic.p0i8.i64(i8* nocapture writeonly, i8, i64, i32) nounwind
|
||||
declare void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32) nounwind
|
||||
declare void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32) nounwind
|
||||
|
||||
define void @test_memcpy(i8* nocapture, i8* nocapture) {
|
||||
; CHECK-LABEL: dfs$test_memcpy
|
||||
; CHECK: call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 16, i32 1)
|
||||
; CHECK: ret void
|
||||
call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 16, i32 1)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test_memmove(i8* nocapture, i8* nocapture) {
|
||||
; CHECK-LABEL: dfs$test_memmove
|
||||
; CHECK: call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 16, i32 1)
|
||||
; CHECK: ret void
|
||||
call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 16, i32 1)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test_memset(i8* nocapture) {
|
||||
; CHECK-LABEL: dfs$test_memset
|
||||
; CHECK: call void @llvm.memset.element.unordered.atomic.p0i8.i64(i8* align 1 %0, i8 88, i64 16, i32 1)
|
||||
; CHECK: ret void
|
||||
call void @llvm.memset.element.unordered.atomic.p0i8.i64(i8* align 1 %0, i8 88, i64 16, i32 1)
|
||||
ret void
|
||||
}
|
Reference in New Issue
Block a user