brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · a91ac26 Raw
90 lines · plain
1; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=1 -S -passes=msan 2>&1 | FileCheck %s2 3target 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 6 7; Test origin for longer stores.8 9define void @Store8(ptr nocapture %p, i64 %x) sanitize_memory {10entry:11  store i64 %x, ptr %p, align 812  ret void13}14 15; Single 8-byte origin store16; CHECK-LABEL: define void @Store8(17; CHECK: store i64 {{.*}}, align 818; CHECK: store i64 {{.*}}, align 819; CHECK: store i64 {{.*}}, align 820; CHECK: ret void21 22define void @Store8_align4(ptr nocapture %p, i64 %x) sanitize_memory {23entry:24  store i64 %x, ptr %p, align 425  ret void26}27 28; Two 4-byte origin stores29; CHECK-LABEL: define void @Store8_align4(30; CHECK: store i64 {{.*}}, align 431; CHECK: store i32 {{.*}}, align 432; CHECK: getelementptr i32, ptr {{.*}}, i32 133; CHECK: store i32 {{.*}}, align 434; CHECK: store i64 {{.*}}, align 435; CHECK: ret void36 37%struct.S = type { i32, i32, i32 }38 39define void @StoreAgg(ptr nocapture %p, %struct.S %x) sanitize_memory {40entry:41  store %struct.S %x, ptr %p, align 442  ret void43}44 45; Three 4-byte origin stores46; CHECK-LABEL: define void @StoreAgg(47; CHECK: store { i32, i32, i32 }  {{.*}}, align 448; CHECK: store i32 {{.*}}, align 449; CHECK: getelementptr i32, ptr {{.*}}, i32 150; CHECK: store i32 {{.*}}, align 451; CHECK: getelementptr i32, ptr {{.*}}, i32 252; CHECK: store i32 {{.*}}, align 453; CHECK: store %struct.S {{.*}}, align 454; CHECK: ret void55 56 57define void @StoreAgg8(ptr nocapture %p, %struct.S %x) sanitize_memory {58entry:59  store %struct.S %x, ptr %p, align 860  ret void61}62 63; 8-byte + 4-byte origin stores64; CHECK-LABEL: define void @StoreAgg8(65; CHECK: store { i32, i32, i32 }  {{.*}}, align 866; CHECK: store i64 {{.*}}, align 867; CHECK: getelementptr i32, ptr {{.*}}, i32 268; CHECK: store i32 {{.*}}, align 869; CHECK: store %struct.S {{.*}}, align 870; CHECK: ret void71 72 73%struct.Q = type { i64, i64, i64 }74define void @StoreAgg24(ptr nocapture %p, %struct.Q %x) sanitize_memory {75entry:76  store %struct.Q %x, ptr %p, align 877  ret void78}79 80; 3 8-byte origin stores81; CHECK-LABEL: define void @StoreAgg24(82; CHECK: store { i64, i64, i64 }  {{.*}}, align 883; CHECK: store i64 {{.*}}, align 884; CHECK: getelementptr i64, ptr {{.*}}, i32 185; CHECK: store i64 {{.*}}, align 886; CHECK: getelementptr i64, ptr {{.*}}, i32 287; CHECK: store i64 {{.*}}, align 888; CHECK: store %struct.Q {{.*}}, align 889; CHECK: ret void90