1773 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -msan-check-access-address=0 -S -passes=msan 2>&1 | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5target triple = "aarch64-grtev4-linux-gnu"6 7%struct.IntInt = type { i32, i32 }8%struct.Int64Int64 = type { i64, i64 }9%struct.DoubleDouble = type { double, double }10%struct.Double4 = type { [4 x double] }11%struct.DoubleFloat = type { double, float }12%struct.LongDouble2 = type { [2 x fp128] }13%struct.LongDouble4 = type { [4 x fp128] }14%"struct.std::__va_list" = type { ptr, ptr, ptr, i32, i32 }15 16define linkonce_odr dso_local void @_Z4testIcEvT_(i8 noundef %arg) sanitize_memory {17; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testIcEvT_(18; CHECK-SAME: i8 noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {19; CHECK-NEXT: entry:20; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr @__msan_param_tls, align 821; CHECK-NEXT: call void @llvm.donothing()22; CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca i8, align 423; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i6424; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 19351404648857625; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr26; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 4 [[TMP3]], i8 -1, i64 1, i1 false)27; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i6428; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 19351404648857629; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr30; CHECK-NEXT: store i8 [[TMP0]], ptr [[TMP6]], align 431; CHECK-NEXT: store i8 [[ARG]], ptr [[ARG_ADDR]], align 432; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 833; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG_ADDR]])34; CHECK-NEXT: [[TMP7:%.*]] = load i8, ptr [[ARG_ADDR]], align 435; CHECK-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i6436; CHECK-NEXT: [[TMP9:%.*]] = xor i64 [[TMP8]], 19351404648857637; CHECK-NEXT: [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr38; CHECK-NEXT: [[_MSLD:%.*]] = load i8, ptr [[TMP10]], align 439; CHECK-NEXT: [[_MSPROP:%.*]] = zext i8 [[_MSLD]] to i3240; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[TMP7]] to i3241; CHECK-NEXT: store i8 [[_MSLD]], ptr @__msan_param_tls, align 842; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 843; CHECK-NEXT: store i32 [[_MSPROP]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 844; CHECK-NEXT: store i32 [[_MSPROP]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 16), align 845; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 846; CHECK-NEXT: call void (i8, i32, ...) @_Z5test2IcEvT_iz(i8 noundef [[TMP7]], i32 noundef 1, i32 noundef [[CONV]])47; CHECK-NEXT: ret void48;49entry:50 %arg.addr = alloca i8, align 451 store i8 %arg, ptr %arg.addr, align 452 call void @_Z3usePv(ptr noundef nonnull %arg.addr)53 %0 = load i8, ptr %arg.addr, align 454 %conv = zext i8 %0 to i3255 call void (i8, i32, ...) @_Z5test2IcEvT_iz(i8 noundef %0, i32 noundef 1, i32 noundef %conv)56 ret void57}58 59define linkonce_odr dso_local void @_Z4testIiEvT_(i32 noundef %arg) sanitize_memory {60; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testIiEvT_(61; CHECK-SAME: i32 noundef [[ARG:%.*]]) #[[ATTR0]] {62; CHECK-NEXT: entry:63; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @__msan_param_tls, align 864; CHECK-NEXT: call void @llvm.donothing()65; CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca i32, align 466; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i6467; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 19351404648857668; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr69; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 4 [[TMP3]], i8 -1, i64 4, i1 false)70; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i6471; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 19351404648857672; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr73; CHECK-NEXT: store i32 [[TMP0]], ptr [[TMP6]], align 474; CHECK-NEXT: store i32 [[ARG]], ptr [[ARG_ADDR]], align 475; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 876; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG_ADDR]])77; CHECK-NEXT: [[TMP7:%.*]] = load i32, ptr [[ARG_ADDR]], align 478; CHECK-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i6479; CHECK-NEXT: [[TMP9:%.*]] = xor i64 [[TMP8]], 19351404648857680; CHECK-NEXT: [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr81; CHECK-NEXT: [[_MSLD:%.*]] = load i32, ptr [[TMP10]], align 482; CHECK-NEXT: store i32 [[_MSLD]], ptr @__msan_param_tls, align 883; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 884; CHECK-NEXT: store i32 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 885; CHECK-NEXT: store i32 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 16), align 886; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 887; CHECK-NEXT: call void (i32, i32, ...) @_Z5test2IiEvT_iz(i32 noundef [[TMP7]], i32 noundef 1, i32 noundef [[TMP7]])88; CHECK-NEXT: ret void89;90entry:91 %arg.addr = alloca i32, align 492 store i32 %arg, ptr %arg.addr, align 493 call void @_Z3usePv(ptr noundef nonnull %arg.addr)94 %0 = load i32, ptr %arg.addr, align 495 call void (i32, i32, ...) @_Z5test2IiEvT_iz(i32 noundef %0, i32 noundef 1, i32 noundef %0)96 ret void97}98 99define linkonce_odr dso_local void @_Z4testIfEvT_(float noundef %arg) sanitize_memory {100; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testIfEvT_(101; CHECK-SAME: float noundef [[ARG:%.*]]) #[[ATTR0]] {102; CHECK-NEXT: entry:103; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @__msan_param_tls, align 8104; CHECK-NEXT: call void @llvm.donothing()105; CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca float, align 4106; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64107; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576108; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr109; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 4 [[TMP3]], i8 -1, i64 4, i1 false)110; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64111; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576112; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr113; CHECK-NEXT: store i32 [[TMP0]], ptr [[TMP6]], align 4114; CHECK-NEXT: store float [[ARG]], ptr [[ARG_ADDR]], align 4115; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8116; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG_ADDR]])117; CHECK-NEXT: [[TMP7:%.*]] = load float, ptr [[ARG_ADDR]], align 4118; CHECK-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64119; CHECK-NEXT: [[TMP9:%.*]] = xor i64 [[TMP8]], 193514046488576120; CHECK-NEXT: [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr121; CHECK-NEXT: [[_MSLD:%.*]] = load i32, ptr [[TMP10]], align 4122; CHECK-NEXT: [[TMP11:%.*]] = zext i32 [[_MSLD]] to i64123; CHECK-NEXT: [[CONV:%.*]] = fpext float [[TMP7]] to double124; CHECK-NEXT: store i32 [[_MSLD]], ptr @__msan_param_tls, align 8125; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8126; CHECK-NEXT: store i64 [[TMP11]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8127; CHECK-NEXT: store i64 [[TMP11]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 80), align 8128; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8129; CHECK-NEXT: call void (float, i32, ...) @_Z5test2IfEvT_iz(float noundef [[TMP7]], i32 noundef 1, double noundef [[CONV]])130; CHECK-NEXT: ret void131;132entry:133 %arg.addr = alloca float, align 4134 store float %arg, ptr %arg.addr, align 4135 call void @_Z3usePv(ptr noundef nonnull %arg.addr)136 %0 = load float, ptr %arg.addr, align 4137 %conv = fpext float %0 to double138 call void (float, i32, ...) @_Z5test2IfEvT_iz(float noundef %0, i32 noundef 1, double noundef %conv)139 ret void140}141 142define linkonce_odr dso_local void @_Z4testIdEvT_(double noundef %arg) sanitize_memory {143; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testIdEvT_(144; CHECK-SAME: double noundef [[ARG:%.*]]) #[[ATTR0]] {145; CHECK-NEXT: entry:146; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 8147; CHECK-NEXT: call void @llvm.donothing()148; CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca double, align 8149; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64150; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576151; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr152; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 -1, i64 8, i1 false)153; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64154; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576155; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr156; CHECK-NEXT: store i64 [[TMP0]], ptr [[TMP6]], align 8157; CHECK-NEXT: store double [[ARG]], ptr [[ARG_ADDR]], align 8158; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8159; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG_ADDR]])160; CHECK-NEXT: [[TMP7:%.*]] = load double, ptr [[ARG_ADDR]], align 8161; CHECK-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64162; CHECK-NEXT: [[TMP9:%.*]] = xor i64 [[TMP8]], 193514046488576163; CHECK-NEXT: [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr164; CHECK-NEXT: [[_MSLD:%.*]] = load i64, ptr [[TMP10]], align 8165; CHECK-NEXT: store i64 [[_MSLD]], ptr @__msan_param_tls, align 8166; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8167; CHECK-NEXT: store i64 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8168; CHECK-NEXT: store i64 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 80), align 8169; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8170; CHECK-NEXT: call void (double, i32, ...) @_Z5test2IdEvT_iz(double noundef [[TMP7]], i32 noundef 1, double noundef [[TMP7]])171; CHECK-NEXT: ret void172;173entry:174 %arg.addr = alloca double, align 8175 store double %arg, ptr %arg.addr, align 8176 call void @_Z3usePv(ptr noundef nonnull %arg.addr)177 %0 = load double, ptr %arg.addr, align 8178 call void (double, i32, ...) @_Z5test2IdEvT_iz(double noundef %0, i32 noundef 1, double noundef %0)179 ret void180}181 182define linkonce_odr dso_local void @_Z4testIeEvT_(fp128 noundef %arg) sanitize_memory {183; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testIeEvT_(184; CHECK-SAME: fp128 noundef [[ARG:%.*]]) #[[ATTR0]] {185; CHECK-NEXT: entry:186; CHECK-NEXT: [[TMP0:%.*]] = load i128, ptr @__msan_param_tls, align 8187; CHECK-NEXT: call void @llvm.donothing()188; CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca fp128, align 16189; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64190; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576191; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr192; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 16 [[TMP3]], i8 -1, i64 16, i1 false)193; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64194; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576195; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr196; CHECK-NEXT: store i128 [[TMP0]], ptr [[TMP6]], align 16197; CHECK-NEXT: store fp128 [[ARG]], ptr [[ARG_ADDR]], align 16198; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8199; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG_ADDR]])200; CHECK-NEXT: [[TMP7:%.*]] = load fp128, ptr [[ARG_ADDR]], align 16201; CHECK-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[ARG_ADDR]] to i64202; CHECK-NEXT: [[TMP9:%.*]] = xor i64 [[TMP8]], 193514046488576203; CHECK-NEXT: [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr204; CHECK-NEXT: [[_MSLD:%.*]] = load i128, ptr [[TMP10]], align 16205; CHECK-NEXT: store i128 [[_MSLD]], ptr @__msan_param_tls, align 8206; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8207; CHECK-NEXT: store i128 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8208; CHECK-NEXT: store i128 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 80), align 8209; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8210; CHECK-NEXT: call void (fp128, i32, ...) @_Z5test2IeEvT_iz(fp128 noundef [[TMP7]], i32 noundef 1, fp128 noundef [[TMP7]])211; CHECK-NEXT: ret void212;213entry:214 %arg.addr = alloca fp128, align 16215 store fp128 %arg, ptr %arg.addr, align 16216 call void @_Z3usePv(ptr noundef nonnull %arg.addr)217 %0 = load fp128, ptr %arg.addr, align 16218 call void (fp128, i32, ...) @_Z5test2IeEvT_iz(fp128 noundef %0, i32 noundef 1, fp128 noundef %0)219 ret void220}221 222define linkonce_odr dso_local void @_Z4testI6IntIntEvT_(i64 %arg.coerce) sanitize_memory {223; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testI6IntIntEvT_(224; CHECK-SAME: i64 [[ARG_COERCE:%.*]]) #[[ATTR0]] {225; CHECK-NEXT: entry:226; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 8227; CHECK-NEXT: call void @llvm.donothing()228; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_INTINT:%.*]], align 8229; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i64230; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576231; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr232; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 -1, i64 8, i1 false)233; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARG]] to i64234; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576235; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr236; CHECK-NEXT: store i64 [[TMP0]], ptr [[TMP6]], align 8237; CHECK-NEXT: store i64 [[ARG_COERCE]], ptr [[ARG]], align 8238; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8239; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])240; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load i64, ptr [[ARG]], align 8241; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARG]] to i64242; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 193514046488576243; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr244; CHECK-NEXT: [[_MSLD:%.*]] = load i64, ptr [[TMP9]], align 8245; CHECK-NEXT: store i64 [[_MSLD]], ptr @__msan_param_tls, align 8246; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8247; CHECK-NEXT: store i64 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8248; CHECK-NEXT: store i64 [[_MSLD]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 16), align 8249; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8250; CHECK-NEXT: call void (i64, i32, ...) @_Z5test2I6IntIntEvT_iz(i64 [[AGG_TMP_SROA_0_0_COPYLOAD]], i32 noundef 1, i64 [[AGG_TMP_SROA_0_0_COPYLOAD]])251; CHECK-NEXT: ret void252;253entry:254 %arg = alloca %struct.IntInt, align 8255 store i64 %arg.coerce, ptr %arg, align 8256 call void @_Z3usePv(ptr noundef nonnull %arg)257 %agg.tmp.sroa.0.0.copyload = load i64, ptr %arg, align 8258 call void (i64, i32, ...) @_Z5test2I6IntIntEvT_iz(i64 %agg.tmp.sroa.0.0.copyload, i32 noundef 1, i64 %agg.tmp.sroa.0.0.copyload)259 ret void260}261 262define linkonce_odr dso_local void @_Z4testI10Int64Int64EvT_([2 x i64] %arg.coerce) sanitize_memory {263; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testI10Int64Int64EvT_(264; CHECK-SAME: [2 x i64] [[ARG_COERCE:%.*]]) #[[ATTR0]] {265; CHECK-NEXT: entry:266; CHECK-NEXT: [[TMP0:%.*]] = load [2 x i64], ptr @__msan_param_tls, align 8267; CHECK-NEXT: call void @llvm.donothing()268; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_INT64INT64:%.*]], align 8269; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i64270; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576271; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr272; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 -1, i64 16, i1 false)273; CHECK-NEXT: [[TMP4:%.*]] = extractvalue [2 x i64] [[TMP0]], 0274; CHECK-NEXT: [[ARG_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x i64] [[ARG_COERCE]], 0275; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[ARG]] to i64276; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576277; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr278; CHECK-NEXT: store i64 [[TMP4]], ptr [[TMP7]], align 8279; CHECK-NEXT: store i64 [[ARG_COERCE_FCA_0_EXTRACT]], ptr [[ARG]], align 8280; CHECK-NEXT: [[TMP8:%.*]] = extractvalue [2 x i64] [[TMP0]], 1281; CHECK-NEXT: [[ARG_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x i64] [[ARG_COERCE]], 1282; CHECK-NEXT: [[ARG_COERCE_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i64], ptr [[ARG]], i64 0, i64 1283; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64284; CHECK-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 193514046488576285; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr286; CHECK-NEXT: store i64 [[TMP8]], ptr [[TMP11]], align 8287; CHECK-NEXT: store i64 [[ARG_COERCE_FCA_1_EXTRACT]], ptr [[ARG_COERCE_FCA_1_GEP]], align 8288; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8289; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])290; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load i64, ptr [[ARG]], align 8291; CHECK-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARG]] to i64292; CHECK-NEXT: [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576293; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr294; CHECK-NEXT: [[_MSLD:%.*]] = load i64, ptr [[TMP14]], align 8295; CHECK-NEXT: [[AGG_TMP_SROA_2_0_COPYLOAD:%.*]] = load i64, ptr [[ARG_COERCE_FCA_1_GEP]], align 8296; CHECK-NEXT: [[TMP15:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64297; CHECK-NEXT: [[TMP16:%.*]] = xor i64 [[TMP15]], 193514046488576298; CHECK-NEXT: [[TMP17:%.*]] = inttoptr i64 [[TMP16]] to ptr299; CHECK-NEXT: [[_MSLD1:%.*]] = load i64, ptr [[TMP17]], align 8300; CHECK-NEXT: [[TMP18:%.*]] = insertvalue [2 x i64] [i64 -1, i64 -1], i64 [[_MSLD]], 0301; CHECK-NEXT: [[DOTFCA_0_INSERT2:%.*]] = insertvalue [2 x i64] poison, i64 [[AGG_TMP_SROA_0_0_COPYLOAD]], 0302; CHECK-NEXT: [[TMP19:%.*]] = insertvalue [2 x i64] [[TMP18]], i64 [[_MSLD1]], 1303; CHECK-NEXT: [[DOTFCA_1_INSERT3:%.*]] = insertvalue [2 x i64] [[DOTFCA_0_INSERT2]], i64 [[AGG_TMP_SROA_2_0_COPYLOAD]], 1304; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr @__msan_param_tls, align 8305; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8306; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8307; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 24), align 8308; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8309; CHECK-NEXT: call void ([2 x i64], i32, ...) @_Z5test2I10Int64Int64EvT_iz([2 x i64] [[DOTFCA_1_INSERT3]], i32 noundef 1, [2 x i64] [[DOTFCA_1_INSERT3]])310; CHECK-NEXT: ret void311;312entry:313 %arg = alloca %struct.Int64Int64, align 8314 %arg.coerce.fca.0.extract = extractvalue [2 x i64] %arg.coerce, 0315 store i64 %arg.coerce.fca.0.extract, ptr %arg, align 8316 %arg.coerce.fca.1.extract = extractvalue [2 x i64] %arg.coerce, 1317 %arg.coerce.fca.1.gep = getelementptr inbounds [2 x i64], ptr %arg, i64 0, i64 1318 store i64 %arg.coerce.fca.1.extract, ptr %arg.coerce.fca.1.gep, align 8319 call void @_Z3usePv(ptr noundef nonnull %arg)320 %agg.tmp.sroa.0.0.copyload = load i64, ptr %arg, align 8321 %agg.tmp.sroa.2.0.copyload = load i64, ptr %arg.coerce.fca.1.gep, align 8322 %.fca.0.insert2 = insertvalue [2 x i64] poison, i64 %agg.tmp.sroa.0.0.copyload, 0323 %.fca.1.insert3 = insertvalue [2 x i64] %.fca.0.insert2, i64 %agg.tmp.sroa.2.0.copyload, 1324 call void ([2 x i64], i32, ...) @_Z5test2I10Int64Int64EvT_iz([2 x i64] %.fca.1.insert3, i32 noundef 1, [2 x i64] %.fca.1.insert3)325 ret void326}327 328define linkonce_odr dso_local void @_Z4testI12DoubleDoubleEvT_([2 x double] alignstack(8) %arg.coerce) sanitize_memory {329; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testI12DoubleDoubleEvT_(330; CHECK-SAME: [2 x double] alignstack(8) [[ARG_COERCE:%.*]]) #[[ATTR0]] {331; CHECK-NEXT: entry:332; CHECK-NEXT: [[TMP0:%.*]] = load [2 x i64], ptr @__msan_param_tls, align 8333; CHECK-NEXT: call void @llvm.donothing()334; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_DOUBLEDOUBLE:%.*]], align 8335; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i64336; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576337; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr338; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 -1, i64 16, i1 false)339; CHECK-NEXT: [[TMP4:%.*]] = extractvalue [2 x i64] [[TMP0]], 0340; CHECK-NEXT: [[ARG_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x double] [[ARG_COERCE]], 0341; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[ARG]] to i64342; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576343; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr344; CHECK-NEXT: store i64 [[TMP4]], ptr [[TMP7]], align 8345; CHECK-NEXT: store double [[ARG_COERCE_FCA_0_EXTRACT]], ptr [[ARG]], align 8346; CHECK-NEXT: [[TMP8:%.*]] = extractvalue [2 x i64] [[TMP0]], 1347; CHECK-NEXT: [[ARG_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x double] [[ARG_COERCE]], 1348; CHECK-NEXT: [[ARG_COERCE_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x double], ptr [[ARG]], i64 0, i64 1349; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64350; CHECK-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 193514046488576351; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr352; CHECK-NEXT: store i64 [[TMP8]], ptr [[TMP11]], align 8353; CHECK-NEXT: store double [[ARG_COERCE_FCA_1_EXTRACT]], ptr [[ARG_COERCE_FCA_1_GEP]], align 8354; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8355; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])356; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load double, ptr [[ARG]], align 8357; CHECK-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARG]] to i64358; CHECK-NEXT: [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576359; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr360; CHECK-NEXT: [[_MSLD:%.*]] = load i64, ptr [[TMP14]], align 8361; CHECK-NEXT: [[AGG_TMP_SROA_2_0_COPYLOAD:%.*]] = load double, ptr [[ARG_COERCE_FCA_1_GEP]], align 8362; CHECK-NEXT: [[TMP15:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64363; CHECK-NEXT: [[TMP16:%.*]] = xor i64 [[TMP15]], 193514046488576364; CHECK-NEXT: [[TMP17:%.*]] = inttoptr i64 [[TMP16]] to ptr365; CHECK-NEXT: [[_MSLD1:%.*]] = load i64, ptr [[TMP17]], align 8366; CHECK-NEXT: [[TMP18:%.*]] = insertvalue [2 x i64] [i64 -1, i64 -1], i64 [[_MSLD]], 0367; CHECK-NEXT: [[DOTFCA_0_INSERT2:%.*]] = insertvalue [2 x double] poison, double [[AGG_TMP_SROA_0_0_COPYLOAD]], 0368; CHECK-NEXT: [[TMP19:%.*]] = insertvalue [2 x i64] [[TMP18]], i64 [[_MSLD1]], 1369; CHECK-NEXT: [[DOTFCA_1_INSERT3:%.*]] = insertvalue [2 x double] [[DOTFCA_0_INSERT2]], double [[AGG_TMP_SROA_2_0_COPYLOAD]], 1370; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr @__msan_param_tls, align 8371; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8372; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8373; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 96), align 8374; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8375; CHECK-NEXT: call void ([2 x double], i32, ...) @_Z5test2I12DoubleDoubleEvT_iz([2 x double] alignstack(8) [[DOTFCA_1_INSERT3]], i32 noundef 1, [2 x double] alignstack(8) [[DOTFCA_1_INSERT3]])376; CHECK-NEXT: ret void377;378entry:379 %arg = alloca %struct.DoubleDouble, align 8380 %arg.coerce.fca.0.extract = extractvalue [2 x double] %arg.coerce, 0381 store double %arg.coerce.fca.0.extract, ptr %arg, align 8382 %arg.coerce.fca.1.extract = extractvalue [2 x double] %arg.coerce, 1383 %arg.coerce.fca.1.gep = getelementptr inbounds [2 x double], ptr %arg, i64 0, i64 1384 store double %arg.coerce.fca.1.extract, ptr %arg.coerce.fca.1.gep, align 8385 call void @_Z3usePv(ptr noundef nonnull %arg)386 %agg.tmp.sroa.0.0.copyload = load double, ptr %arg, align 8387 %agg.tmp.sroa.2.0.copyload = load double, ptr %arg.coerce.fca.1.gep, align 8388 %.fca.0.insert2 = insertvalue [2 x double] poison, double %agg.tmp.sroa.0.0.copyload, 0389 %.fca.1.insert3 = insertvalue [2 x double] %.fca.0.insert2, double %agg.tmp.sroa.2.0.copyload, 1390 call void ([2 x double], i32, ...) @_Z5test2I12DoubleDoubleEvT_iz([2 x double] alignstack(8) %.fca.1.insert3, i32 noundef 1, [2 x double] alignstack(8) %.fca.1.insert3)391 ret void392}393 394define linkonce_odr dso_local void @_Z4testI7Double4EvT_([4 x double] alignstack(8) %arg.coerce) sanitize_memory {395; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testI7Double4EvT_(396; CHECK-SAME: [4 x double] alignstack(8) [[ARG_COERCE:%.*]]) #[[ATTR0]] {397; CHECK-NEXT: entry:398; CHECK-NEXT: [[TMP0:%.*]] = load [4 x i64], ptr @__msan_param_tls, align 8399; CHECK-NEXT: call void @llvm.donothing()400; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_DOUBLE4:%.*]], align 8401; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i64402; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576403; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr404; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 -1, i64 32, i1 false)405; CHECK-NEXT: [[TMP4:%.*]] = extractvalue [4 x i64] [[TMP0]], 0406; CHECK-NEXT: [[ARG_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x double] [[ARG_COERCE]], 0407; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[ARG]] to i64408; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576409; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr410; CHECK-NEXT: store i64 [[TMP4]], ptr [[TMP7]], align 8411; CHECK-NEXT: store double [[ARG_COERCE_FCA_0_EXTRACT]], ptr [[ARG]], align 8412; CHECK-NEXT: [[TMP8:%.*]] = extractvalue [4 x i64] [[TMP0]], 1413; CHECK-NEXT: [[ARG_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x double] [[ARG_COERCE]], 1414; CHECK-NEXT: [[ARG_COERCE_FCA_1_GEP:%.*]] = getelementptr inbounds [4 x double], ptr [[ARG]], i64 0, i64 1415; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64416; CHECK-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 193514046488576417; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr418; CHECK-NEXT: store i64 [[TMP8]], ptr [[TMP11]], align 8419; CHECK-NEXT: store double [[ARG_COERCE_FCA_1_EXTRACT]], ptr [[ARG_COERCE_FCA_1_GEP]], align 8420; CHECK-NEXT: [[TMP12:%.*]] = extractvalue [4 x i64] [[TMP0]], 2421; CHECK-NEXT: [[ARG_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x double] [[ARG_COERCE]], 2422; CHECK-NEXT: [[ARG_COERCE_FCA_2_GEP:%.*]] = getelementptr inbounds [4 x double], ptr [[ARG]], i64 0, i64 2423; CHECK-NEXT: [[TMP13:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_2_GEP]] to i64424; CHECK-NEXT: [[TMP14:%.*]] = xor i64 [[TMP13]], 193514046488576425; CHECK-NEXT: [[TMP15:%.*]] = inttoptr i64 [[TMP14]] to ptr426; CHECK-NEXT: store i64 [[TMP12]], ptr [[TMP15]], align 8427; CHECK-NEXT: store double [[ARG_COERCE_FCA_2_EXTRACT]], ptr [[ARG_COERCE_FCA_2_GEP]], align 8428; CHECK-NEXT: [[TMP16:%.*]] = extractvalue [4 x i64] [[TMP0]], 3429; CHECK-NEXT: [[ARG_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x double] [[ARG_COERCE]], 3430; CHECK-NEXT: [[ARG_COERCE_FCA_3_GEP:%.*]] = getelementptr inbounds [4 x double], ptr [[ARG]], i64 0, i64 3431; CHECK-NEXT: [[TMP17:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_3_GEP]] to i64432; CHECK-NEXT: [[TMP18:%.*]] = xor i64 [[TMP17]], 193514046488576433; CHECK-NEXT: [[TMP19:%.*]] = inttoptr i64 [[TMP18]] to ptr434; CHECK-NEXT: store i64 [[TMP16]], ptr [[TMP19]], align 8435; CHECK-NEXT: store double [[ARG_COERCE_FCA_3_EXTRACT]], ptr [[ARG_COERCE_FCA_3_GEP]], align 8436; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8437; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])438; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load double, ptr [[ARG]], align 8439; CHECK-NEXT: [[TMP20:%.*]] = ptrtoint ptr [[ARG]] to i64440; CHECK-NEXT: [[TMP21:%.*]] = xor i64 [[TMP20]], 193514046488576441; CHECK-NEXT: [[TMP22:%.*]] = inttoptr i64 [[TMP21]] to ptr442; CHECK-NEXT: [[_MSLD:%.*]] = load i64, ptr [[TMP22]], align 8443; CHECK-NEXT: [[AGG_TMP_SROA_2_0_COPYLOAD:%.*]] = load double, ptr [[ARG_COERCE_FCA_1_GEP]], align 8444; CHECK-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64445; CHECK-NEXT: [[TMP24:%.*]] = xor i64 [[TMP23]], 193514046488576446; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr447; CHECK-NEXT: [[_MSLD1:%.*]] = load i64, ptr [[TMP25]], align 8448; CHECK-NEXT: [[AGG_TMP_SROA_3_0_COPYLOAD:%.*]] = load double, ptr [[ARG_COERCE_FCA_2_GEP]], align 8449; CHECK-NEXT: [[TMP26:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_2_GEP]] to i64450; CHECK-NEXT: [[TMP27:%.*]] = xor i64 [[TMP26]], 193514046488576451; CHECK-NEXT: [[TMP28:%.*]] = inttoptr i64 [[TMP27]] to ptr452; CHECK-NEXT: [[_MSLD2:%.*]] = load i64, ptr [[TMP28]], align 8453; CHECK-NEXT: [[AGG_TMP_SROA_4_0_COPYLOAD:%.*]] = load double, ptr [[ARG_COERCE_FCA_3_GEP]], align 8454; CHECK-NEXT: [[TMP29:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_3_GEP]] to i64455; CHECK-NEXT: [[TMP30:%.*]] = xor i64 [[TMP29]], 193514046488576456; CHECK-NEXT: [[TMP31:%.*]] = inttoptr i64 [[TMP30]] to ptr457; CHECK-NEXT: [[_MSLD3:%.*]] = load i64, ptr [[TMP31]], align 8458; CHECK-NEXT: [[TMP32:%.*]] = insertvalue [4 x i64] [i64 -1, i64 -1, i64 -1, i64 -1], i64 [[_MSLD]], 0459; CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [4 x double] poison, double [[AGG_TMP_SROA_0_0_COPYLOAD]], 0460; CHECK-NEXT: [[TMP33:%.*]] = insertvalue [4 x i64] [[TMP32]], i64 [[_MSLD1]], 1461; CHECK-NEXT: [[DOTFCA_1_INSERT5:%.*]] = insertvalue [4 x double] [[DOTFCA_0_INSERT4]], double [[AGG_TMP_SROA_2_0_COPYLOAD]], 1462; CHECK-NEXT: [[TMP34:%.*]] = insertvalue [4 x i64] [[TMP33]], i64 [[_MSLD2]], 2463; CHECK-NEXT: [[DOTFCA_2_INSERT6:%.*]] = insertvalue [4 x double] [[DOTFCA_1_INSERT5]], double [[AGG_TMP_SROA_3_0_COPYLOAD]], 2464; CHECK-NEXT: [[TMP35:%.*]] = insertvalue [4 x i64] [[TMP34]], i64 [[_MSLD3]], 3465; CHECK-NEXT: [[DOTFCA_3_INSERT7:%.*]] = insertvalue [4 x double] [[DOTFCA_2_INSERT6]], double [[AGG_TMP_SROA_4_0_COPYLOAD]], 3466; CHECK-NEXT: store [4 x i64] [[TMP35]], ptr @__msan_param_tls, align 8467; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8468; CHECK-NEXT: store [4 x i64] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 40), align 8469; CHECK-NEXT: store [4 x i64] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 128), align 8470; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8471; CHECK-NEXT: call void ([4 x double], i32, ...) @_Z5test2I7Double4EvT_iz([4 x double] alignstack(8) [[DOTFCA_3_INSERT7]], i32 noundef 1, [4 x double] alignstack(8) [[DOTFCA_3_INSERT7]])472; CHECK-NEXT: ret void473;474entry:475 %arg = alloca %struct.Double4, align 8476 %arg.coerce.fca.0.extract = extractvalue [4 x double] %arg.coerce, 0477 store double %arg.coerce.fca.0.extract, ptr %arg, align 8478 %arg.coerce.fca.1.extract = extractvalue [4 x double] %arg.coerce, 1479 %arg.coerce.fca.1.gep = getelementptr inbounds [4 x double], ptr %arg, i64 0, i64 1480 store double %arg.coerce.fca.1.extract, ptr %arg.coerce.fca.1.gep, align 8481 %arg.coerce.fca.2.extract = extractvalue [4 x double] %arg.coerce, 2482 %arg.coerce.fca.2.gep = getelementptr inbounds [4 x double], ptr %arg, i64 0, i64 2483 store double %arg.coerce.fca.2.extract, ptr %arg.coerce.fca.2.gep, align 8484 %arg.coerce.fca.3.extract = extractvalue [4 x double] %arg.coerce, 3485 %arg.coerce.fca.3.gep = getelementptr inbounds [4 x double], ptr %arg, i64 0, i64 3486 store double %arg.coerce.fca.3.extract, ptr %arg.coerce.fca.3.gep, align 8487 call void @_Z3usePv(ptr noundef nonnull %arg)488 %agg.tmp.sroa.0.0.copyload = load double, ptr %arg, align 8489 %agg.tmp.sroa.2.0.copyload = load double, ptr %arg.coerce.fca.1.gep, align 8490 %agg.tmp.sroa.3.0.copyload = load double, ptr %arg.coerce.fca.2.gep, align 8491 %agg.tmp.sroa.4.0.copyload = load double, ptr %arg.coerce.fca.3.gep, align 8492 %.fca.0.insert4 = insertvalue [4 x double] poison, double %agg.tmp.sroa.0.0.copyload, 0493 %.fca.1.insert5 = insertvalue [4 x double] %.fca.0.insert4, double %agg.tmp.sroa.2.0.copyload, 1494 %.fca.2.insert6 = insertvalue [4 x double] %.fca.1.insert5, double %agg.tmp.sroa.3.0.copyload, 2495 %.fca.3.insert7 = insertvalue [4 x double] %.fca.2.insert6, double %agg.tmp.sroa.4.0.copyload, 3496 call void ([4 x double], i32, ...) @_Z5test2I7Double4EvT_iz([4 x double] alignstack(8) %.fca.3.insert7, i32 noundef 1, [4 x double] alignstack(8) %.fca.3.insert7)497 ret void498}499 500define linkonce_odr dso_local void @_Z4testI11DoubleFloatEvT_([2 x i64] %arg.coerce) sanitize_memory {501; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testI11DoubleFloatEvT_(502; CHECK-SAME: [2 x i64] [[ARG_COERCE:%.*]]) #[[ATTR0]] {503; CHECK-NEXT: entry:504; CHECK-NEXT: [[TMP0:%.*]] = load [2 x i64], ptr @__msan_param_tls, align 8505; CHECK-NEXT: call void @llvm.donothing()506; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_DOUBLEFLOAT:%.*]], align 8507; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i64508; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576509; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr510; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 -1, i64 16, i1 false)511; CHECK-NEXT: [[TMP4:%.*]] = extractvalue [2 x i64] [[TMP0]], 0512; CHECK-NEXT: [[ARG_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x i64] [[ARG_COERCE]], 0513; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[ARG]] to i64514; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576515; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr516; CHECK-NEXT: store i64 [[TMP4]], ptr [[TMP7]], align 8517; CHECK-NEXT: store i64 [[ARG_COERCE_FCA_0_EXTRACT]], ptr [[ARG]], align 8518; CHECK-NEXT: [[TMP8:%.*]] = extractvalue [2 x i64] [[TMP0]], 1519; CHECK-NEXT: [[ARG_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x i64] [[ARG_COERCE]], 1520; CHECK-NEXT: [[ARG_COERCE_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i64], ptr [[ARG]], i64 0, i64 1521; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64522; CHECK-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 193514046488576523; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr524; CHECK-NEXT: store i64 [[TMP8]], ptr [[TMP11]], align 8525; CHECK-NEXT: store i64 [[ARG_COERCE_FCA_1_EXTRACT]], ptr [[ARG_COERCE_FCA_1_GEP]], align 8526; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8527; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])528; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load i64, ptr [[ARG]], align 8529; CHECK-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARG]] to i64530; CHECK-NEXT: [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576531; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr532; CHECK-NEXT: [[_MSLD:%.*]] = load i64, ptr [[TMP14]], align 8533; CHECK-NEXT: [[AGG_TMP_SROA_2_0_COPYLOAD:%.*]] = load i64, ptr [[ARG_COERCE_FCA_1_GEP]], align 8534; CHECK-NEXT: [[TMP15:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64535; CHECK-NEXT: [[TMP16:%.*]] = xor i64 [[TMP15]], 193514046488576536; CHECK-NEXT: [[TMP17:%.*]] = inttoptr i64 [[TMP16]] to ptr537; CHECK-NEXT: [[_MSLD1:%.*]] = load i64, ptr [[TMP17]], align 8538; CHECK-NEXT: [[TMP18:%.*]] = insertvalue [2 x i64] [i64 -1, i64 -1], i64 [[_MSLD]], 0539; CHECK-NEXT: [[DOTFCA_0_INSERT2:%.*]] = insertvalue [2 x i64] poison, i64 [[AGG_TMP_SROA_0_0_COPYLOAD]], 0540; CHECK-NEXT: [[TMP19:%.*]] = insertvalue [2 x i64] [[TMP18]], i64 [[_MSLD1]], 1541; CHECK-NEXT: [[DOTFCA_1_INSERT3:%.*]] = insertvalue [2 x i64] [[DOTFCA_0_INSERT2]], i64 [[AGG_TMP_SROA_2_0_COPYLOAD]], 1542; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr @__msan_param_tls, align 8543; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8544; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8545; CHECK-NEXT: store [2 x i64] [[TMP19]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 24), align 8546; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8547; CHECK-NEXT: call void ([2 x i64], i32, ...) @_Z5test2I11DoubleFloatEvT_iz([2 x i64] [[DOTFCA_1_INSERT3]], i32 noundef 1, [2 x i64] [[DOTFCA_1_INSERT3]])548; CHECK-NEXT: ret void549;550entry:551 %arg = alloca %struct.DoubleFloat, align 8552 %arg.coerce.fca.0.extract = extractvalue [2 x i64] %arg.coerce, 0553 store i64 %arg.coerce.fca.0.extract, ptr %arg, align 8554 %arg.coerce.fca.1.extract = extractvalue [2 x i64] %arg.coerce, 1555 %arg.coerce.fca.1.gep = getelementptr inbounds [2 x i64], ptr %arg, i64 0, i64 1556 store i64 %arg.coerce.fca.1.extract, ptr %arg.coerce.fca.1.gep, align 8557 call void @_Z3usePv(ptr noundef nonnull %arg)558 %agg.tmp.sroa.0.0.copyload = load i64, ptr %arg, align 8559 %agg.tmp.sroa.2.0.copyload = load i64, ptr %arg.coerce.fca.1.gep, align 8560 %.fca.0.insert2 = insertvalue [2 x i64] poison, i64 %agg.tmp.sroa.0.0.copyload, 0561 %.fca.1.insert3 = insertvalue [2 x i64] %.fca.0.insert2, i64 %agg.tmp.sroa.2.0.copyload, 1562 call void ([2 x i64], i32, ...) @_Z5test2I11DoubleFloatEvT_iz([2 x i64] %.fca.1.insert3, i32 noundef 1, [2 x i64] %.fca.1.insert3)563 ret void564}565 566define linkonce_odr dso_local void @_Z4testI11LongDouble2EvT_([2 x fp128] alignstack(16) %arg.coerce) sanitize_memory {567; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testI11LongDouble2EvT_(568; CHECK-SAME: [2 x fp128] alignstack(16) [[ARG_COERCE:%.*]]) #[[ATTR0]] {569; CHECK-NEXT: entry:570; CHECK-NEXT: [[TMP0:%.*]] = load [2 x i128], ptr @__msan_param_tls, align 8571; CHECK-NEXT: call void @llvm.donothing()572; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_LONGDOUBLE2:%.*]], align 16573; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i64574; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576575; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr576; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 16 [[TMP3]], i8 -1, i64 32, i1 false)577; CHECK-NEXT: [[TMP4:%.*]] = extractvalue [2 x i128] [[TMP0]], 0578; CHECK-NEXT: [[ARG_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x fp128] [[ARG_COERCE]], 0579; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[ARG]] to i64580; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576581; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr582; CHECK-NEXT: store i128 [[TMP4]], ptr [[TMP7]], align 16583; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_0_EXTRACT]], ptr [[ARG]], align 16584; CHECK-NEXT: [[TMP8:%.*]] = extractvalue [2 x i128] [[TMP0]], 1585; CHECK-NEXT: [[ARG_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x fp128] [[ARG_COERCE]], 1586; CHECK-NEXT: [[ARG_COERCE_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x fp128], ptr [[ARG]], i64 0, i64 1587; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64588; CHECK-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 193514046488576589; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr590; CHECK-NEXT: store i128 [[TMP8]], ptr [[TMP11]], align 16591; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_1_EXTRACT]], ptr [[ARG_COERCE_FCA_1_GEP]], align 16592; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8593; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])594; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG]], align 16595; CHECK-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARG]] to i64596; CHECK-NEXT: [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576597; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr598; CHECK-NEXT: [[_MSLD:%.*]] = load i128, ptr [[TMP14]], align 16599; CHECK-NEXT: [[AGG_TMP_SROA_2_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG_COERCE_FCA_1_GEP]], align 16600; CHECK-NEXT: [[TMP15:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64601; CHECK-NEXT: [[TMP16:%.*]] = xor i64 [[TMP15]], 193514046488576602; CHECK-NEXT: [[TMP17:%.*]] = inttoptr i64 [[TMP16]] to ptr603; CHECK-NEXT: [[_MSLD1:%.*]] = load i128, ptr [[TMP17]], align 16604; CHECK-NEXT: [[TMP18:%.*]] = insertvalue [2 x i128] [i128 -1, i128 -1], i128 [[_MSLD]], 0605; CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [2 x fp128] poison, fp128 [[AGG_TMP_SROA_0_0_COPYLOAD]], 0606; CHECK-NEXT: [[TMP19:%.*]] = insertvalue [2 x i128] [[TMP18]], i128 [[_MSLD1]], 1607; CHECK-NEXT: [[DOTFCA_1_INSERT5:%.*]] = insertvalue [2 x fp128] [[DOTFCA_0_INSERT4]], fp128 [[AGG_TMP_SROA_2_0_COPYLOAD]], 1608; CHECK-NEXT: store [2 x i128] [[TMP19]], ptr @__msan_param_tls, align 8609; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8610; CHECK-NEXT: store [2 x i128] [[TMP19]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 40), align 8611; CHECK-NEXT: store [2 x i128] [[TMP19]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 96), align 8612; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8613; CHECK-NEXT: call void ([2 x fp128], i32, ...) @_Z5test2I11LongDouble2EvT_iz([2 x fp128] alignstack(16) [[DOTFCA_1_INSERT5]], i32 noundef 1, [2 x fp128] alignstack(16) [[DOTFCA_1_INSERT5]])614; CHECK-NEXT: ret void615;616entry:617 %arg = alloca %struct.LongDouble2, align 16618 %arg.coerce.fca.0.extract = extractvalue [2 x fp128] %arg.coerce, 0619 store fp128 %arg.coerce.fca.0.extract, ptr %arg, align 16620 %arg.coerce.fca.1.extract = extractvalue [2 x fp128] %arg.coerce, 1621 %arg.coerce.fca.1.gep = getelementptr inbounds [2 x fp128], ptr %arg, i64 0, i64 1622 store fp128 %arg.coerce.fca.1.extract, ptr %arg.coerce.fca.1.gep, align 16623 call void @_Z3usePv(ptr noundef nonnull %arg)624 %agg.tmp.sroa.0.0.copyload = load fp128, ptr %arg, align 16625 %agg.tmp.sroa.2.0.copyload = load fp128, ptr %arg.coerce.fca.1.gep, align 16626 %.fca.0.insert4 = insertvalue [2 x fp128] poison, fp128 %agg.tmp.sroa.0.0.copyload, 0627 %.fca.1.insert5 = insertvalue [2 x fp128] %.fca.0.insert4, fp128 %agg.tmp.sroa.2.0.copyload, 1628 call void ([2 x fp128], i32, ...) @_Z5test2I11LongDouble2EvT_iz([2 x fp128] alignstack(16) %.fca.1.insert5, i32 noundef 1, [2 x fp128] alignstack(16) %.fca.1.insert5)629 ret void630}631 632define linkonce_odr dso_local void @_Z4testI11LongDouble4EvT_([4 x fp128] alignstack(16) %arg.coerce) sanitize_memory {633; CHECK-LABEL: define linkonce_odr dso_local void @_Z4testI11LongDouble4EvT_(634; CHECK-SAME: [4 x fp128] alignstack(16) [[ARG_COERCE:%.*]]) #[[ATTR0]] {635; CHECK-NEXT: entry:636; CHECK-NEXT: [[TMP0:%.*]] = load [4 x i128], ptr @__msan_param_tls, align 8637; CHECK-NEXT: call void @llvm.donothing()638; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_LONGDOUBLE4:%.*]], align 16639; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i64640; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576641; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr642; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 16 [[TMP3]], i8 -1, i64 64, i1 false)643; CHECK-NEXT: [[TMP4:%.*]] = extractvalue [4 x i128] [[TMP0]], 0644; CHECK-NEXT: [[ARG_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 0645; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[ARG]] to i64646; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576647; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr648; CHECK-NEXT: store i128 [[TMP4]], ptr [[TMP7]], align 16649; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_0_EXTRACT]], ptr [[ARG]], align 16650; CHECK-NEXT: [[TMP8:%.*]] = extractvalue [4 x i128] [[TMP0]], 1651; CHECK-NEXT: [[ARG_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 1652; CHECK-NEXT: [[ARG_COERCE_FCA_1_GEP:%.*]] = getelementptr inbounds [4 x fp128], ptr [[ARG]], i64 0, i64 1653; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64654; CHECK-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 193514046488576655; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr656; CHECK-NEXT: store i128 [[TMP8]], ptr [[TMP11]], align 16657; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_1_EXTRACT]], ptr [[ARG_COERCE_FCA_1_GEP]], align 16658; CHECK-NEXT: [[TMP12:%.*]] = extractvalue [4 x i128] [[TMP0]], 2659; CHECK-NEXT: [[ARG_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 2660; CHECK-NEXT: [[ARG_COERCE_FCA_2_GEP:%.*]] = getelementptr inbounds [4 x fp128], ptr [[ARG]], i64 0, i64 2661; CHECK-NEXT: [[TMP13:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_2_GEP]] to i64662; CHECK-NEXT: [[TMP14:%.*]] = xor i64 [[TMP13]], 193514046488576663; CHECK-NEXT: [[TMP15:%.*]] = inttoptr i64 [[TMP14]] to ptr664; CHECK-NEXT: store i128 [[TMP12]], ptr [[TMP15]], align 16665; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_2_EXTRACT]], ptr [[ARG_COERCE_FCA_2_GEP]], align 16666; CHECK-NEXT: [[TMP16:%.*]] = extractvalue [4 x i128] [[TMP0]], 3667; CHECK-NEXT: [[ARG_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 3668; CHECK-NEXT: [[ARG_COERCE_FCA_3_GEP:%.*]] = getelementptr inbounds [4 x fp128], ptr [[ARG]], i64 0, i64 3669; CHECK-NEXT: [[TMP17:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_3_GEP]] to i64670; CHECK-NEXT: [[TMP18:%.*]] = xor i64 [[TMP17]], 193514046488576671; CHECK-NEXT: [[TMP19:%.*]] = inttoptr i64 [[TMP18]] to ptr672; CHECK-NEXT: store i128 [[TMP16]], ptr [[TMP19]], align 16673; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_3_EXTRACT]], ptr [[ARG_COERCE_FCA_3_GEP]], align 16674; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8675; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])676; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG]], align 16677; CHECK-NEXT: [[TMP20:%.*]] = ptrtoint ptr [[ARG]] to i64678; CHECK-NEXT: [[TMP21:%.*]] = xor i64 [[TMP20]], 193514046488576679; CHECK-NEXT: [[TMP22:%.*]] = inttoptr i64 [[TMP21]] to ptr680; CHECK-NEXT: [[_MSLD:%.*]] = load i128, ptr [[TMP22]], align 16681; CHECK-NEXT: [[AGG_TMP_SROA_2_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG_COERCE_FCA_1_GEP]], align 16682; CHECK-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i64683; CHECK-NEXT: [[TMP24:%.*]] = xor i64 [[TMP23]], 193514046488576684; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr685; CHECK-NEXT: [[_MSLD1:%.*]] = load i128, ptr [[TMP25]], align 16686; CHECK-NEXT: [[AGG_TMP_SROA_3_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG_COERCE_FCA_2_GEP]], align 16687; CHECK-NEXT: [[TMP26:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_2_GEP]] to i64688; CHECK-NEXT: [[TMP27:%.*]] = xor i64 [[TMP26]], 193514046488576689; CHECK-NEXT: [[TMP28:%.*]] = inttoptr i64 [[TMP27]] to ptr690; CHECK-NEXT: [[_MSLD2:%.*]] = load i128, ptr [[TMP28]], align 16691; CHECK-NEXT: [[AGG_TMP_SROA_4_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG_COERCE_FCA_3_GEP]], align 16692; CHECK-NEXT: [[TMP29:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_3_GEP]] to i64693; CHECK-NEXT: [[TMP30:%.*]] = xor i64 [[TMP29]], 193514046488576694; CHECK-NEXT: [[TMP31:%.*]] = inttoptr i64 [[TMP30]] to ptr695; CHECK-NEXT: [[_MSLD3:%.*]] = load i128, ptr [[TMP31]], align 16696; CHECK-NEXT: [[TMP32:%.*]] = insertvalue [4 x i128] [i128 -1, i128 -1, i128 -1, i128 -1], i128 [[_MSLD]], 0697; CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [4 x fp128] poison, fp128 [[AGG_TMP_SROA_0_0_COPYLOAD]], 0698; CHECK-NEXT: [[TMP33:%.*]] = insertvalue [4 x i128] [[TMP32]], i128 [[_MSLD1]], 1699; CHECK-NEXT: [[DOTFCA_1_INSERT5:%.*]] = insertvalue [4 x fp128] [[DOTFCA_0_INSERT4]], fp128 [[AGG_TMP_SROA_2_0_COPYLOAD]], 1700; CHECK-NEXT: [[TMP34:%.*]] = insertvalue [4 x i128] [[TMP33]], i128 [[_MSLD2]], 2701; CHECK-NEXT: [[DOTFCA_2_INSERT6:%.*]] = insertvalue [4 x fp128] [[DOTFCA_1_INSERT5]], fp128 [[AGG_TMP_SROA_3_0_COPYLOAD]], 2702; CHECK-NEXT: [[TMP35:%.*]] = insertvalue [4 x i128] [[TMP34]], i128 [[_MSLD3]], 3703; CHECK-NEXT: [[DOTFCA_3_INSERT7:%.*]] = insertvalue [4 x fp128] [[DOTFCA_2_INSERT6]], fp128 [[AGG_TMP_SROA_4_0_COPYLOAD]], 3704; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr @__msan_param_tls, align 8705; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 8706; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 72), align 8707; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 128), align 8708; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8709; CHECK-NEXT: call void ([4 x fp128], i32, ...) @_Z5test2I11LongDouble4EvT_iz([4 x fp128] alignstack(16) [[DOTFCA_3_INSERT7]], i32 noundef 1, [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT7]])710; CHECK-NEXT: ret void711;712entry:713 %arg = alloca %struct.LongDouble4, align 16714 %arg.coerce.fca.0.extract = extractvalue [4 x fp128] %arg.coerce, 0715 store fp128 %arg.coerce.fca.0.extract, ptr %arg, align 16716 %arg.coerce.fca.1.extract = extractvalue [4 x fp128] %arg.coerce, 1717 %arg.coerce.fca.1.gep = getelementptr inbounds [4 x fp128], ptr %arg, i64 0, i64 1718 store fp128 %arg.coerce.fca.1.extract, ptr %arg.coerce.fca.1.gep, align 16719 %arg.coerce.fca.2.extract = extractvalue [4 x fp128] %arg.coerce, 2720 %arg.coerce.fca.2.gep = getelementptr inbounds [4 x fp128], ptr %arg, i64 0, i64 2721 store fp128 %arg.coerce.fca.2.extract, ptr %arg.coerce.fca.2.gep, align 16722 %arg.coerce.fca.3.extract = extractvalue [4 x fp128] %arg.coerce, 3723 %arg.coerce.fca.3.gep = getelementptr inbounds [4 x fp128], ptr %arg, i64 0, i64 3724 store fp128 %arg.coerce.fca.3.extract, ptr %arg.coerce.fca.3.gep, align 16725 call void @_Z3usePv(ptr noundef nonnull %arg)726 %agg.tmp.sroa.0.0.copyload = load fp128, ptr %arg, align 16727 %agg.tmp.sroa.2.0.copyload = load fp128, ptr %arg.coerce.fca.1.gep, align 16728 %agg.tmp.sroa.3.0.copyload = load fp128, ptr %arg.coerce.fca.2.gep, align 16729 %agg.tmp.sroa.4.0.copyload = load fp128, ptr %arg.coerce.fca.3.gep, align 16730 %.fca.0.insert4 = insertvalue [4 x fp128] poison, fp128 %agg.tmp.sroa.0.0.copyload, 0731 %.fca.1.insert5 = insertvalue [4 x fp128] %.fca.0.insert4, fp128 %agg.tmp.sroa.2.0.copyload, 1732 %.fca.2.insert6 = insertvalue [4 x fp128] %.fca.1.insert5, fp128 %agg.tmp.sroa.3.0.copyload, 2733 %.fca.3.insert7 = insertvalue [4 x fp128] %.fca.2.insert6, fp128 %agg.tmp.sroa.4.0.copyload, 3734 call void ([4 x fp128], i32, ...) @_Z5test2I11LongDouble4EvT_iz([4 x fp128] alignstack(16) %.fca.3.insert7, i32 noundef 1, [4 x fp128] alignstack(16) %.fca.3.insert7)735 ret void736}737 738declare void @_Z3usePv(ptr noundef) local_unnamed_addr #2739 740define linkonce_odr dso_local void @_Z5test2IcEvT_iz(i8 noundef %t, i32 noundef %n, ...) sanitize_memory {741; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2IcEvT_iz(742; CHECK-SAME: i8 noundef [[T:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {743; CHECK-NEXT: entry:744; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8745; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]746; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 8747; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)748; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)749; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)750; CHECK-NEXT: call void @llvm.donothing()751; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 8752; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])753; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i64754; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576755; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr756; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)757; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i64758; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 193514046488576759; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr760; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)761; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])762; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 0763; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 8764; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr765; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 8766; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 8767; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 24768; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 4769; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i64770; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]771; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr772; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 16773; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 8774; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 28775; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4776; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i64777; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]778; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr779; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]780; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i64781; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 193514046488576782; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr783; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]784; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]785; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)786; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]787; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i64788; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 193514046488576789; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr790; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 64791; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]792; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]793; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)794; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i64795; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 193514046488576796; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr797; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 192798; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)799; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8800; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])801; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])802; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])803; CHECK-NEXT: ret void804;805entry:806 %args = alloca %"struct.std::__va_list", align 8807 call void @llvm.lifetime.start.p0(ptr nonnull %args) #5808 call void @llvm.va_start(ptr nonnull %args)809 call void @_Z3usePv(ptr noundef nonnull %args)810 call void @llvm.va_end(ptr nonnull %args)811 call void @llvm.lifetime.end.p0(ptr nonnull %args) #5812 ret void813}814 815declare void @llvm.lifetime.start.p0(ptr nocapture) #3816 817declare void @llvm.va_start(ptr) #4818 819declare void @llvm.va_end(ptr) #4820 821declare void @llvm.lifetime.end.p0(ptr nocapture) #3822 823define linkonce_odr dso_local void @_Z5test2IiEvT_iz(i32 noundef %t, i32 noundef %n, ...) sanitize_memory {824; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2IiEvT_iz(825; CHECK-SAME: i32 noundef [[T:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {826; CHECK-NEXT: entry:827; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8828; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]829; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 8830; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)831; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)832; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)833; CHECK-NEXT: call void @llvm.donothing()834; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 8835; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])836; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i64837; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576838; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr839; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)840; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i64841; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 193514046488576842; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr843; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)844; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])845; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 0846; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 8847; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr848; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 8849; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 8850; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 24851; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 4852; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i64853; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]854; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr855; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 16856; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 8857; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 28858; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4859; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i64860; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]861; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr862; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]863; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i64864; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 193514046488576865; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr866; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]867; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]868; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)869; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]870; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i64871; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 193514046488576872; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr873; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 64874; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]875; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]876; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)877; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i64878; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 193514046488576879; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr880; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 192881; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)882; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8883; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])884; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])885; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])886; CHECK-NEXT: ret void887;888entry:889 %args = alloca %"struct.std::__va_list", align 8890 call void @llvm.lifetime.start.p0(ptr nonnull %args) #5891 call void @llvm.va_start(ptr nonnull %args)892 call void @_Z3usePv(ptr noundef nonnull %args)893 call void @llvm.va_end(ptr nonnull %args)894 call void @llvm.lifetime.end.p0(ptr nonnull %args) #5895 ret void896}897 898define linkonce_odr dso_local void @_Z5test2IfEvT_iz(float noundef %t, i32 noundef %n, ...) sanitize_memory {899; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2IfEvT_iz(900; CHECK-SAME: float noundef [[T:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {901; CHECK-NEXT: entry:902; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8903; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]904; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 8905; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)906; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)907; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)908; CHECK-NEXT: call void @llvm.donothing()909; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 8910; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])911; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i64912; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576913; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr914; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)915; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i64916; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 193514046488576917; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr918; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)919; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])920; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 0921; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 8922; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr923; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 8924; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 8925; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 24926; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 4927; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i64928; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]929; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr930; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 16931; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 8932; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 28933; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4934; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i64935; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]936; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr937; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]938; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i64939; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 193514046488576940; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr941; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]942; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]943; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)944; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]945; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i64946; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 193514046488576947; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr948; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 64949; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]950; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]951; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)952; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i64953; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 193514046488576954; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr955; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 192956; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)957; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8958; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])959; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])960; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])961; CHECK-NEXT: ret void962;963entry:964 %args = alloca %"struct.std::__va_list", align 8965 call void @llvm.lifetime.start.p0(ptr nonnull %args) #5966 call void @llvm.va_start(ptr nonnull %args)967 call void @_Z3usePv(ptr noundef nonnull %args)968 call void @llvm.va_end(ptr nonnull %args)969 call void @llvm.lifetime.end.p0(ptr nonnull %args) #5970 ret void971}972 973define linkonce_odr dso_local void @_Z5test2IdEvT_iz(double noundef %t, i32 noundef %n, ...) sanitize_memory {974; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2IdEvT_iz(975; CHECK-SAME: double noundef [[T:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {976; CHECK-NEXT: entry:977; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8978; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]979; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 8980; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)981; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)982; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)983; CHECK-NEXT: call void @llvm.donothing()984; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 8985; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])986; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i64987; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576988; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr989; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)990; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i64991; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 193514046488576992; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr993; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)994; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])995; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 0996; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 8997; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr998; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 8999; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81000; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241001; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41002; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641003; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1004; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1005; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161006; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81007; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281008; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41009; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641010; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1011; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1012; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1013; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641014; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761015; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1016; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1017; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1018; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1019; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1020; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641021; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761022; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1023; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641024; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1025; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1026; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1027; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641028; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761029; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1030; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921031; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1032; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81033; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1034; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1035; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1036; CHECK-NEXT: ret void1037;1038entry:1039 %args = alloca %"struct.std::__va_list", align 81040 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51041 call void @llvm.va_start(ptr nonnull %args)1042 call void @_Z3usePv(ptr noundef nonnull %args)1043 call void @llvm.va_end(ptr nonnull %args)1044 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51045 ret void1046}1047 1048define linkonce_odr dso_local void @_Z5test2IeEvT_iz(fp128 noundef %t, i32 noundef %n, ...) sanitize_memory {1049; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2IeEvT_iz(1050; CHECK-SAME: fp128 noundef [[T:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1051; CHECK-NEXT: entry:1052; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81053; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1054; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81055; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1056; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1057; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1058; CHECK-NEXT: call void @llvm.donothing()1059; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81060; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1061; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641062; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761063; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1064; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1065; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641066; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761067; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1068; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1069; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1070; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01071; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81072; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1073; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81074; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81075; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241076; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41077; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641078; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1079; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1080; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161081; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81082; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281083; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41084; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641085; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1086; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1087; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1088; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641089; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761090; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1091; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1092; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1093; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1094; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1095; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641096; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761097; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1098; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641099; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1100; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1101; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1102; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641103; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761104; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1105; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921106; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1107; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81108; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1109; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1110; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1111; CHECK-NEXT: ret void1112;1113entry:1114 %args = alloca %"struct.std::__va_list", align 81115 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51116 call void @llvm.va_start(ptr nonnull %args)1117 call void @_Z3usePv(ptr noundef nonnull %args)1118 call void @llvm.va_end(ptr nonnull %args)1119 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51120 ret void1121}1122 1123define linkonce_odr dso_local void @_Z5test2I6IntIntEvT_iz(i64 %t.coerce, i32 noundef %n, ...) sanitize_memory {1124; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2I6IntIntEvT_iz(1125; CHECK-SAME: i64 [[T_COERCE:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1126; CHECK-NEXT: entry:1127; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81128; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1129; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81130; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1131; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1132; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1133; CHECK-NEXT: call void @llvm.donothing()1134; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81135; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1136; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641137; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761138; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1139; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1140; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641141; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761142; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1143; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1144; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1145; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01146; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81147; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1148; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81149; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81150; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241151; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41152; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641153; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1154; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1155; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161156; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81157; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281158; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41159; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641160; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1161; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1162; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1163; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641164; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761165; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1166; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1167; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1168; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1169; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1170; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641171; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761172; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1173; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641174; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1175; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1176; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1177; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641178; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761179; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1180; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921181; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1182; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81183; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1184; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1185; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1186; CHECK-NEXT: ret void1187;1188entry:1189 %args = alloca %"struct.std::__va_list", align 81190 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51191 call void @llvm.va_start(ptr nonnull %args)1192 call void @_Z3usePv(ptr noundef nonnull %args)1193 call void @llvm.va_end(ptr nonnull %args)1194 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51195 ret void1196}1197 1198define linkonce_odr dso_local void @_Z5test2I10Int64Int64EvT_iz([2 x i64] %t.coerce, i32 noundef %n, ...) sanitize_memory {1199; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2I10Int64Int64EvT_iz(1200; CHECK-SAME: [2 x i64] [[T_COERCE:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1201; CHECK-NEXT: entry:1202; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81203; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1204; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81205; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1206; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1207; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1208; CHECK-NEXT: call void @llvm.donothing()1209; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81210; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1211; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641212; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761213; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1214; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1215; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641216; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761217; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1218; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1219; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1220; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01221; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81222; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1223; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81224; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81225; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241226; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41227; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641228; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1229; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1230; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161231; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81232; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281233; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41234; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641235; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1236; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1237; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1238; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641239; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761240; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1241; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1242; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1243; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1244; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1245; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641246; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761247; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1248; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641249; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1250; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1251; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1252; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641253; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761254; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1255; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921256; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1257; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81258; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1259; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1260; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1261; CHECK-NEXT: ret void1262;1263entry:1264 %args = alloca %"struct.std::__va_list", align 81265 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51266 call void @llvm.va_start(ptr nonnull %args)1267 call void @_Z3usePv(ptr noundef nonnull %args)1268 call void @llvm.va_end(ptr nonnull %args)1269 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51270 ret void1271}1272 1273define linkonce_odr dso_local void @_Z5test2I12DoubleDoubleEvT_iz([2 x double] alignstack(8) %t.coerce, i32 noundef %n, ...) sanitize_memory {1274; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2I12DoubleDoubleEvT_iz(1275; CHECK-SAME: [2 x double] alignstack(8) [[T_COERCE:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1276; CHECK-NEXT: entry:1277; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81278; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1279; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81280; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1281; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1282; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1283; CHECK-NEXT: call void @llvm.donothing()1284; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81285; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1286; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641287; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761288; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1289; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1290; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641291; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761292; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1293; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1294; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1295; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01296; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81297; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1298; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81299; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81300; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241301; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41302; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641303; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1304; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1305; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161306; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81307; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281308; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41309; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641310; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1311; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1312; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1313; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641314; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761315; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1316; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1317; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1318; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1319; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1320; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641321; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761322; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1323; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641324; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1325; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1326; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1327; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641328; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761329; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1330; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921331; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1332; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81333; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1334; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1335; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1336; CHECK-NEXT: ret void1337;1338entry:1339 %args = alloca %"struct.std::__va_list", align 81340 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51341 call void @llvm.va_start(ptr nonnull %args)1342 call void @_Z3usePv(ptr noundef nonnull %args)1343 call void @llvm.va_end(ptr nonnull %args)1344 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51345 ret void1346}1347 1348define linkonce_odr dso_local void @_Z5test2I7Double4EvT_iz([4 x double] alignstack(8) %t.coerce, i32 noundef %n, ...) sanitize_memory {1349; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2I7Double4EvT_iz(1350; CHECK-SAME: [4 x double] alignstack(8) [[T_COERCE:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1351; CHECK-NEXT: entry:1352; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81353; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1354; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81355; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1356; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1357; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1358; CHECK-NEXT: call void @llvm.donothing()1359; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81360; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1361; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641362; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761363; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1364; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1365; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641366; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761367; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1368; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1369; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1370; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01371; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81372; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1373; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81374; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81375; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241376; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41377; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641378; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1379; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1380; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161381; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81382; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281383; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41384; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641385; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1386; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1387; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1388; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641389; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761390; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1391; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1392; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1393; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1394; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1395; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641396; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761397; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1398; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641399; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1400; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1401; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1402; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641403; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761404; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1405; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921406; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1407; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81408; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1409; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1410; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1411; CHECK-NEXT: ret void1412;1413entry:1414 %args = alloca %"struct.std::__va_list", align 81415 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51416 call void @llvm.va_start(ptr nonnull %args)1417 call void @_Z3usePv(ptr noundef nonnull %args)1418 call void @llvm.va_end(ptr nonnull %args)1419 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51420 ret void1421}1422 1423define linkonce_odr dso_local void @_Z5test2I11DoubleFloatEvT_iz([2 x i64] %t.coerce, i32 noundef %n, ...) sanitize_memory {1424; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2I11DoubleFloatEvT_iz(1425; CHECK-SAME: [2 x i64] [[T_COERCE:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1426; CHECK-NEXT: entry:1427; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81428; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1429; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81430; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1431; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1432; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1433; CHECK-NEXT: call void @llvm.donothing()1434; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81435; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1436; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641437; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761438; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1439; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1440; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641441; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761442; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1443; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1444; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1445; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01446; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81447; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1448; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81449; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81450; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241451; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41452; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641453; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1454; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1455; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161456; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81457; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281458; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41459; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641460; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1461; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1462; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1463; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641464; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761465; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1466; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1467; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1468; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1469; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1470; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641471; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761472; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1473; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641474; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1475; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1476; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1477; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641478; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761479; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1480; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921481; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1482; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81483; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1484; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1485; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1486; CHECK-NEXT: ret void1487;1488entry:1489 %args = alloca %"struct.std::__va_list", align 81490 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51491 call void @llvm.va_start(ptr nonnull %args)1492 call void @_Z3usePv(ptr noundef nonnull %args)1493 call void @llvm.va_end(ptr nonnull %args)1494 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51495 ret void1496}1497 1498define linkonce_odr dso_local void @_Z5test2I11LongDouble2EvT_iz([2 x fp128] alignstack(16) %t.coerce, i32 noundef %n, ...) sanitize_memory {1499; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2I11LongDouble2EvT_iz(1500; CHECK-SAME: [2 x fp128] alignstack(16) [[T_COERCE:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1501; CHECK-NEXT: entry:1502; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81503; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1504; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81505; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1506; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1507; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1508; CHECK-NEXT: call void @llvm.donothing()1509; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81510; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1511; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641512; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761513; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1514; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1515; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641516; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761517; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1518; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1519; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1520; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01521; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81522; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1523; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81524; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81525; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241526; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41527; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641528; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1529; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1530; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161531; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81532; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281533; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41534; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641535; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1536; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1537; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1538; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641539; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761540; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1541; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1542; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1543; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1544; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1545; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641546; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761547; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1548; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641549; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1550; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1551; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1552; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641553; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761554; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1555; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921556; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1557; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81558; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1559; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1560; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1561; CHECK-NEXT: ret void1562;1563entry:1564 %args = alloca %"struct.std::__va_list", align 81565 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51566 call void @llvm.va_start(ptr nonnull %args)1567 call void @_Z3usePv(ptr noundef nonnull %args)1568 call void @llvm.va_end(ptr nonnull %args)1569 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51570 ret void1571}1572 1573define linkonce_odr dso_local void @_Z5test2I11LongDouble4EvT_iz([4 x fp128] alignstack(16) %t.coerce, i32 noundef %n, ...) sanitize_memory {1574; CHECK-LABEL: define linkonce_odr dso_local void @_Z5test2I11LongDouble4EvT_iz(1575; CHECK-SAME: [4 x fp128] alignstack(16) [[T_COERCE:%.*]], i32 noundef [[N:%.*]], ...) #[[ATTR0]] {1576; CHECK-NEXT: entry:1577; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 81578; CHECK-NEXT: [[TMP1:%.*]] = add i64 192, [[TMP0]]1579; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 81580; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)1581; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)1582; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP2]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP3]], i1 false)1583; CHECK-NEXT: call void @llvm.donothing()1584; CHECK-NEXT: [[ARGS:%.*]] = alloca %"struct.std::__va_list", align 81585; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[ARGS]])1586; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[ARGS]] to i641587; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761588; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1589; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP6]], i8 -1, i64 32, i1 false)1590; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARGS]] to i641591; CHECK-NEXT: [[TMP8:%.*]] = xor i64 [[TMP7]], 1935140464885761592; CHECK-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr1593; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP9]], i8 0, i64 32, i1 false)1594; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[ARGS]])1595; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[ARGS]], i64 01596; CHECK-NEXT: [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 81597; CHECK-NEXT: [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr1598; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[ARGS]], i64 81599; CHECK-NEXT: [[TMP18:%.*]] = load i64, ptr [[TMP17]], align 81600; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[ARGS]], i64 241601; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41602; CHECK-NEXT: [[TMP23:%.*]] = sext i32 [[TMP22]] to i641603; CHECK-NEXT: [[TMP24:%.*]] = add i64 [[TMP18]], [[TMP23]]1604; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1605; CHECK-NEXT: [[TMP28:%.*]] = getelementptr i8, ptr [[ARGS]], i64 161606; CHECK-NEXT: [[TMP29:%.*]] = load i64, ptr [[TMP28]], align 81607; CHECK-NEXT: [[TMP32:%.*]] = getelementptr i8, ptr [[ARGS]], i64 281608; CHECK-NEXT: [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 41609; CHECK-NEXT: [[TMP34:%.*]] = sext i32 [[TMP33]] to i641610; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[TMP29]], [[TMP34]]1611; CHECK-NEXT: [[TMP36:%.*]] = inttoptr i64 [[TMP35]] to ptr1612; CHECK-NEXT: [[TMP37:%.*]] = add i64 64, [[TMP23]]1613; CHECK-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP25]] to i641614; CHECK-NEXT: [[TMP39:%.*]] = xor i64 [[TMP38]], 1935140464885761615; CHECK-NEXT: [[TMP40:%.*]] = inttoptr i64 [[TMP39]] to ptr1616; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[TMP37]]1617; CHECK-NEXT: [[TMP42:%.*]] = sub i64 64, [[TMP37]]1618; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP40]], ptr align 8 [[TMP41]], i64 [[TMP42]], i1 false)1619; CHECK-NEXT: [[TMP43:%.*]] = add i64 128, [[TMP34]]1620; CHECK-NEXT: [[TMP44:%.*]] = ptrtoint ptr [[TMP36]] to i641621; CHECK-NEXT: [[TMP45:%.*]] = xor i64 [[TMP44]], 1935140464885761622; CHECK-NEXT: [[TMP46:%.*]] = inttoptr i64 [[TMP45]] to ptr1623; CHECK-NEXT: [[TMP47:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 641624; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr [[TMP47]], i64 [[TMP43]]1625; CHECK-NEXT: [[TMP49:%.*]] = sub i64 128, [[TMP43]]1626; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP46]], ptr align 8 [[TMP48]], i64 [[TMP49]], i1 false)1627; CHECK-NEXT: [[TMP50:%.*]] = ptrtoint ptr [[TMP14]] to i641628; CHECK-NEXT: [[TMP51:%.*]] = xor i64 [[TMP50]], 1935140464885761629; CHECK-NEXT: [[TMP52:%.*]] = inttoptr i64 [[TMP51]] to ptr1630; CHECK-NEXT: [[TMP53:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i32 1921631; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 [[TMP52]], ptr align 16 [[TMP53]], i64 [[TMP0]], i1 false)1632; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81633; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARGS]])1634; CHECK-NEXT: call void @llvm.va_end.p0(ptr nonnull [[ARGS]])1635; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[ARGS]])1636; CHECK-NEXT: ret void1637;1638entry:1639 %args = alloca %"struct.std::__va_list", align 81640 call void @llvm.lifetime.start.p0(ptr nonnull %args) #51641 call void @llvm.va_start(ptr nonnull %args)1642 call void @_Z3usePv(ptr noundef nonnull %args)1643 call void @llvm.va_end(ptr nonnull %args)1644 call void @llvm.lifetime.end.p0(ptr nonnull %args) #51645 ret void1646}1647 1648define linkonce_odr dso_local void @_Z4test2I11LongDouble4EvT_([4 x fp128] alignstack(16) %arg.coerce) sanitize_memory {1649; CHECK-LABEL: define linkonce_odr dso_local void @_Z4test2I11LongDouble4EvT_(1650; CHECK-SAME: [4 x fp128] alignstack(16) [[ARG_COERCE:%.*]]) #[[ATTR0]] {1651; CHECK-NEXT: entry:1652; CHECK-NEXT: [[TMP0:%.*]] = load [4 x i128], ptr @__msan_param_tls, align 81653; CHECK-NEXT: call void @llvm.donothing()1654; CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_LONGDOUBLE4:%.*]], align 161655; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[ARG]] to i641656; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761657; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1658; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 16 [[TMP3]], i8 -1, i64 64, i1 false)1659; CHECK-NEXT: [[TMP4:%.*]] = extractvalue [4 x i128] [[TMP0]], 01660; CHECK-NEXT: [[ARG_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 01661; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[ARG]] to i641662; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761663; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1664; CHECK-NEXT: store i128 [[TMP4]], ptr [[TMP7]], align 161665; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_0_EXTRACT]], ptr [[ARG]], align 161666; CHECK-NEXT: [[TMP8:%.*]] = extractvalue [4 x i128] [[TMP0]], 11667; CHECK-NEXT: [[ARG_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 11668; CHECK-NEXT: [[ARG_COERCE_FCA_1_GEP:%.*]] = getelementptr inbounds [4 x fp128], ptr [[ARG]], i64 0, i64 11669; CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i641670; CHECK-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 1935140464885761671; CHECK-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr1672; CHECK-NEXT: store i128 [[TMP8]], ptr [[TMP11]], align 161673; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_1_EXTRACT]], ptr [[ARG_COERCE_FCA_1_GEP]], align 161674; CHECK-NEXT: [[TMP12:%.*]] = extractvalue [4 x i128] [[TMP0]], 21675; CHECK-NEXT: [[ARG_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 21676; CHECK-NEXT: [[ARG_COERCE_FCA_2_GEP:%.*]] = getelementptr inbounds [4 x fp128], ptr [[ARG]], i64 0, i64 21677; CHECK-NEXT: [[TMP13:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_2_GEP]] to i641678; CHECK-NEXT: [[TMP14:%.*]] = xor i64 [[TMP13]], 1935140464885761679; CHECK-NEXT: [[TMP15:%.*]] = inttoptr i64 [[TMP14]] to ptr1680; CHECK-NEXT: store i128 [[TMP12]], ptr [[TMP15]], align 161681; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_2_EXTRACT]], ptr [[ARG_COERCE_FCA_2_GEP]], align 161682; CHECK-NEXT: [[TMP16:%.*]] = extractvalue [4 x i128] [[TMP0]], 31683; CHECK-NEXT: [[ARG_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x fp128] [[ARG_COERCE]], 31684; CHECK-NEXT: [[ARG_COERCE_FCA_3_GEP:%.*]] = getelementptr inbounds [4 x fp128], ptr [[ARG]], i64 0, i64 31685; CHECK-NEXT: [[TMP17:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_3_GEP]] to i641686; CHECK-NEXT: [[TMP18:%.*]] = xor i64 [[TMP17]], 1935140464885761687; CHECK-NEXT: [[TMP19:%.*]] = inttoptr i64 [[TMP18]] to ptr1688; CHECK-NEXT: store i128 [[TMP16]], ptr [[TMP19]], align 161689; CHECK-NEXT: store fp128 [[ARG_COERCE_FCA_3_EXTRACT]], ptr [[ARG_COERCE_FCA_3_GEP]], align 161690; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 81691; CHECK-NEXT: call void @_Z3usePv(ptr noundef nonnull [[ARG]])1692; CHECK-NEXT: [[AGG_TMP_SROA_0_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG]], align 161693; CHECK-NEXT: [[TMP20:%.*]] = ptrtoint ptr [[ARG]] to i641694; CHECK-NEXT: [[TMP21:%.*]] = xor i64 [[TMP20]], 1935140464885761695; CHECK-NEXT: [[TMP22:%.*]] = inttoptr i64 [[TMP21]] to ptr1696; CHECK-NEXT: [[_MSLD:%.*]] = load i128, ptr [[TMP22]], align 161697; CHECK-NEXT: [[AGG_TMP_SROA_2_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG_COERCE_FCA_1_GEP]], align 161698; CHECK-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_1_GEP]] to i641699; CHECK-NEXT: [[TMP24:%.*]] = xor i64 [[TMP23]], 1935140464885761700; CHECK-NEXT: [[TMP25:%.*]] = inttoptr i64 [[TMP24]] to ptr1701; CHECK-NEXT: [[_MSLD1:%.*]] = load i128, ptr [[TMP25]], align 161702; CHECK-NEXT: [[AGG_TMP_SROA_3_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG_COERCE_FCA_2_GEP]], align 161703; CHECK-NEXT: [[TMP26:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_2_GEP]] to i641704; CHECK-NEXT: [[TMP27:%.*]] = xor i64 [[TMP26]], 1935140464885761705; CHECK-NEXT: [[TMP28:%.*]] = inttoptr i64 [[TMP27]] to ptr1706; CHECK-NEXT: [[_MSLD2:%.*]] = load i128, ptr [[TMP28]], align 161707; CHECK-NEXT: [[AGG_TMP_SROA_4_0_COPYLOAD:%.*]] = load fp128, ptr [[ARG_COERCE_FCA_3_GEP]], align 161708; CHECK-NEXT: [[TMP29:%.*]] = ptrtoint ptr [[ARG_COERCE_FCA_3_GEP]] to i641709; CHECK-NEXT: [[TMP30:%.*]] = xor i64 [[TMP29]], 1935140464885761710; CHECK-NEXT: [[TMP31:%.*]] = inttoptr i64 [[TMP30]] to ptr1711; CHECK-NEXT: [[_MSLD3:%.*]] = load i128, ptr [[TMP31]], align 161712; CHECK-NEXT: [[TMP32:%.*]] = insertvalue [4 x i128] [i128 -1, i128 -1, i128 -1, i128 -1], i128 [[_MSLD]], 01713; CHECK-NEXT: [[DOTFCA_0_INSERT118:%.*]] = insertvalue [4 x fp128] poison, fp128 [[AGG_TMP_SROA_0_0_COPYLOAD]], 01714; CHECK-NEXT: [[TMP33:%.*]] = insertvalue [4 x i128] [[TMP32]], i128 [[_MSLD1]], 11715; CHECK-NEXT: [[DOTFCA_1_INSERT119:%.*]] = insertvalue [4 x fp128] [[DOTFCA_0_INSERT118]], fp128 [[AGG_TMP_SROA_2_0_COPYLOAD]], 11716; CHECK-NEXT: [[TMP34:%.*]] = insertvalue [4 x i128] [[TMP33]], i128 [[_MSLD2]], 21717; CHECK-NEXT: [[DOTFCA_2_INSERT120:%.*]] = insertvalue [4 x fp128] [[DOTFCA_1_INSERT119]], fp128 [[AGG_TMP_SROA_3_0_COPYLOAD]], 21718; CHECK-NEXT: [[TMP35:%.*]] = insertvalue [4 x i128] [[TMP34]], i128 [[_MSLD3]], 31719; CHECK-NEXT: [[DOTFCA_3_INSERT121:%.*]] = insertvalue [4 x fp128] [[DOTFCA_2_INSERT120]], fp128 [[AGG_TMP_SROA_4_0_COPYLOAD]], 31720; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr @__msan_param_tls, align 81721; CHECK-NEXT: store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81722; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 72), align 81723; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 136), align 81724; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 200), align 81725; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 264), align 81726; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 328), align 81727; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 392), align 81728; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 456), align 81729; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 520), align 81730; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 584), align 81731; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 648), align 81732; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_param_tls, i64 712), align 81733; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 128), align 81734; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 192), align 81735; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 256), align 81736; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 320), align 81737; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 384), align 81738; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 448), align 81739; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 512), align 81740; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 576), align 81741; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 640), align 81742; CHECK-NEXT: store [4 x i128] [[TMP35]], ptr getelementptr (i8, ptr @__msan_va_arg_tls, i64 704), align 81743; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 8 getelementptr (i8, ptr @__msan_va_arg_tls, i64 768), i8 0, i32 32, i1 false)1744; CHECK-NEXT: store i64 1216, ptr @__msan_va_arg_overflow_size_tls, align 81745; CHECK-NEXT: call void ([4 x fp128], i32, ...) @_Z5test2I11LongDouble4EvT_iz([4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], i32 noundef 20, [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]], [4 x fp128] alignstack(16) [[DOTFCA_3_INSERT121]])1746; CHECK-NEXT: ret void1747;1748entry:1749 %arg = alloca %struct.LongDouble4, align 161750 %arg.coerce.fca.0.extract = extractvalue [4 x fp128] %arg.coerce, 01751 store fp128 %arg.coerce.fca.0.extract, ptr %arg, align 161752 %arg.coerce.fca.1.extract = extractvalue [4 x fp128] %arg.coerce, 11753 %arg.coerce.fca.1.gep = getelementptr inbounds [4 x fp128], ptr %arg, i64 0, i64 11754 store fp128 %arg.coerce.fca.1.extract, ptr %arg.coerce.fca.1.gep, align 161755 %arg.coerce.fca.2.extract = extractvalue [4 x fp128] %arg.coerce, 21756 %arg.coerce.fca.2.gep = getelementptr inbounds [4 x fp128], ptr %arg, i64 0, i64 21757 store fp128 %arg.coerce.fca.2.extract, ptr %arg.coerce.fca.2.gep, align 161758 %arg.coerce.fca.3.extract = extractvalue [4 x fp128] %arg.coerce, 31759 %arg.coerce.fca.3.gep = getelementptr inbounds [4 x fp128], ptr %arg, i64 0, i64 31760 store fp128 %arg.coerce.fca.3.extract, ptr %arg.coerce.fca.3.gep, align 161761 call void @_Z3usePv(ptr noundef nonnull %arg)1762 %agg.tmp.sroa.0.0.copyload = load fp128, ptr %arg, align 161763 %agg.tmp.sroa.2.0.copyload = load fp128, ptr %arg.coerce.fca.1.gep, align 161764 %agg.tmp.sroa.3.0.copyload = load fp128, ptr %arg.coerce.fca.2.gep, align 161765 %agg.tmp.sroa.4.0.copyload = load fp128, ptr %arg.coerce.fca.3.gep, align 161766 %.fca.0.insert118 = insertvalue [4 x fp128] poison, fp128 %agg.tmp.sroa.0.0.copyload, 01767 %.fca.1.insert119 = insertvalue [4 x fp128] %.fca.0.insert118, fp128 %agg.tmp.sroa.2.0.copyload, 11768 %.fca.2.insert120 = insertvalue [4 x fp128] %.fca.1.insert119, fp128 %agg.tmp.sroa.3.0.copyload, 21769 %.fca.3.insert121 = insertvalue [4 x fp128] %.fca.2.insert120, fp128 %agg.tmp.sroa.4.0.copyload, 31770 call void ([4 x fp128], i32, ...) @_Z5test2I11LongDouble4EvT_iz([4 x fp128] alignstack(16) %.fca.3.insert121, i32 noundef 20, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121, [4 x fp128] alignstack(16) %.fca.3.insert121)1771 ret void1772}1773