1e7bac3b9SVitaly Buka; RUN: opt < %s -S -passes='module(msan)' 2>&1 | FileCheck %s 203e88205SEvgenii Stepanov 303e88205SEvgenii Stepanovtarget 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" 403e88205SEvgenii Stepanovtarget triple = "x86_64-unknown-linux-gnu" 503e88205SEvgenii Stepanov 603e88205SEvgenii Stepanov 703e88205SEvgenii Stepanovdeclare void @a_() sanitize_memory readnone 803e88205SEvgenii Stepanovdeclare void @b_() sanitize_memory readonly 903e88205SEvgenii Stepanovdeclare void @c_() sanitize_memory writeonly 10*21c3df4bSMatt Arsenaultdeclare void @d_(ptr %p) sanitize_memory writeonly argmemonly 1103e88205SEvgenii Stepanovdeclare void @e_() sanitize_memory speculatable 1203e88205SEvgenii Stepanov 1303e88205SEvgenii Stepanovdefine void @a() sanitize_memory readnone { 1403e88205SEvgenii Stepanoventry: 1503e88205SEvgenii Stepanov call void @a_() 16f2c04239SEvgenii Stepanov call void @a_() readnone 1703e88205SEvgenii Stepanov ret void 1803e88205SEvgenii Stepanov} 1903e88205SEvgenii Stepanov 2003e88205SEvgenii Stepanovdefine void @b() sanitize_memory readonly { 2103e88205SEvgenii Stepanoventry: 2203e88205SEvgenii Stepanov call void @b_() 23f2c04239SEvgenii Stepanov call void @b_() readonly 2403e88205SEvgenii Stepanov ret void 2503e88205SEvgenii Stepanov} 2603e88205SEvgenii Stepanov 2703e88205SEvgenii Stepanovdefine void @c() sanitize_memory writeonly { 2803e88205SEvgenii Stepanoventry: 2903e88205SEvgenii Stepanov call void @c_() 30f2c04239SEvgenii Stepanov call void @c_() writeonly 3103e88205SEvgenii Stepanov ret void 3203e88205SEvgenii Stepanov} 3303e88205SEvgenii Stepanov 34*21c3df4bSMatt Arsenaultdefine void @d(ptr %p) sanitize_memory writeonly argmemonly { 3503e88205SEvgenii Stepanoventry: 36*21c3df4bSMatt Arsenault call void @d_(ptr %p) 37*21c3df4bSMatt Arsenault call void @d_(ptr %p) writeonly argmemonly 3803e88205SEvgenii Stepanov ret void 3903e88205SEvgenii Stepanov} 4003e88205SEvgenii Stepanov 4103e88205SEvgenii Stepanovdefine void @e() sanitize_memory speculatable { 4203e88205SEvgenii Stepanoventry: 4303e88205SEvgenii Stepanov call void @e_() 4403e88205SEvgenii Stepanov ret void 4503e88205SEvgenii Stepanov} 4603e88205SEvgenii Stepanov 47304f1d59SNikita Popov; CHECK-NOT: memory( 4803e88205SEvgenii Stepanov; CHECK-NOT: speculatable 4905e3ab41SGui Andrade 50304f1d59SNikita Popov; CHECK: Function Attrs: nocallback nofree nosync nounwind willreturn memory(none) 5105e3ab41SGui Andrade; CHECK-NEXT: declare void @llvm.donothing 52