62 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt < %s -passes=dfsan -dfsan-track-origins=1 -dfsan-add-global-name-suffix=0 -S | FileCheck %s3target 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"4target triple = "x86_64-unknown-linux-gnu"5 6declare void @llvm.memcpy.p0.p0.i32(ptr, ptr, i32, i1)7declare void @llvm.memmove.p0.p0.i32(ptr, ptr, i32, i1)8declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1)9 10define void @memcpy(ptr %d, ptr %s, i32 %l) {11; CHECK-LABEL: define void @memcpy(12; CHECK-SAME: ptr [[D:%.*]], ptr [[S:%.*]], i32 [[L:%.*]]) {13; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[L]] to i6414; CHECK-NEXT: call void @__dfsan_mem_origin_transfer(ptr [[D]], ptr [[S]], i64 [[TMP1]])15; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[D]] to i6416; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 8796093022208017; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr18; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[S]] to i6419; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 8796093022208020; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr21; CHECK-NEXT: [[TMP8:%.*]] = mul i32 [[L]], 122; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 1 [[TMP4]], ptr align 1 [[TMP7]], i32 [[TMP8]], i1 false)23; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr [[D]], ptr [[S]], i32 [[L]], i1 false)24; CHECK-NEXT: ret void25;26 call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 %l, i1 0)27 ret void28}29 30define void @memmove(ptr %d, ptr %s, i32 %l) {31; CHECK-LABEL: define void @memmove(32; CHECK-SAME: ptr [[D:%.*]], ptr [[S:%.*]], i32 [[L:%.*]]) {33; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[L]] to i6434; CHECK-NEXT: call void @__dfsan_mem_origin_transfer(ptr [[D]], ptr [[S]], i64 [[TMP1]])35; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[D]] to i6436; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 8796093022208037; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr38; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[S]] to i6439; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 8796093022208040; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr41; CHECK-NEXT: [[TMP8:%.*]] = mul i32 [[L]], 142; CHECK-NEXT: call void @llvm.memmove.p0.p0.i32(ptr align 1 [[TMP4]], ptr align 1 [[TMP7]], i32 [[TMP8]], i1 false)43; CHECK-NEXT: call void @llvm.memmove.p0.p0.i32(ptr [[D]], ptr [[S]], i32 [[L]], i1 false)44; CHECK-NEXT: ret void45;46 call void @llvm.memmove.p0.p0.i32(ptr %d, ptr %s, i32 %l, i1 0)47 ret void48}49 50define void @memset(ptr %p, i8 %v) {51; CHECK-LABEL: define void @memset(52; CHECK-SAME: ptr [[P:%.*]], i8 [[V:%.*]]) {53; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr getelementptr inbounds ([200 x i32], ptr @__dfsan_arg_origin_tls, i64 0, i64 1), align 454; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr getelementptr (i8, ptr @__dfsan_arg_tls, i64 2), align 255; CHECK-NEXT: call void @__dfsan_set_label(i8 [[TMP2]], i32 [[TMP1]], ptr [[P]], i64 1)56; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr [[P]], i8 [[V]], i64 1, i1 true)57; CHECK-NEXT: ret void58;59 call void @llvm.memset.p0.i64(ptr %p, i8 %v, i64 1, i1 1)60 ret void61}62