@@ -737,6 +737,29 @@ entry:
737
737
ret void
738
738
}
739
739
740
+ define void @freeze_vector_insert (<2 x float > %vec , i32 %idx , float %scalar ) sanitize_numerical_stability {
741
+ ; CHECK-LABEL: @freeze_vector_insert(
742
+ ; CHECK-NEXT: entry:
743
+ ; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__nsan_shadow_args_tag, align 8
744
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[TMP0]], ptrtoint (ptr @freeze_vector_insert to i64)
745
+ ; CHECK-NEXT: [[TMP2:%.*]] = load <2 x double>, ptr @__nsan_shadow_args_ptr, align 1
746
+ ; CHECK-NEXT: [[TMP3:%.*]] = fpext <2 x float> [[VEC:%.*]] to <2 x double>
747
+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP1]], <2 x double> [[TMP2]], <2 x double> [[TMP3]]
748
+ ; CHECK-NEXT: [[TMP5:%.*]] = load double, ptr getelementptr ([16384 x i8], ptr @__nsan_shadow_args_ptr, i64 0, i64 16), align 1
749
+ ; CHECK-NEXT: [[TMP6:%.*]] = fpext float [[SCALAR:%.*]] to double
750
+ ; CHECK-NEXT: [[TMP7:%.*]] = select i1 [[TMP1]], double [[TMP5]], double [[TMP6]]
751
+ ; CHECK-NEXT: store i64 0, ptr @__nsan_shadow_args_tag, align 8
752
+ ; CHECK-NEXT: [[TMP8:%.*]] = insertelement <2 x float> [[VEC]], float [[SCALAR]], i32 [[IDX:%.*]]
753
+ ; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x double> [[TMP4]], double [[TMP7]], i32 [[IDX]]
754
+ ; CHECK-NEXT: [[FROZEN:%.*]] = freeze <2 x float> [[TMP8]]
755
+ ; CHECK-NEXT: [[TMP10:%.*]] = freeze <2 x double> [[TMP9]]
756
+ ; CHECK-NEXT: ret void
757
+ ;
758
+ entry:
759
+ %1 = insertelement <2 x float > %vec , float %scalar , i32 %idx
760
+ %frozen = freeze <2 x float > %1
761
+ ret void
762
+ }
740
763
741
764
define void @vector_shuffle (<2 x float > %0 ) sanitize_numerical_stability {
742
765
; CHECK-LABEL: @vector_shuffle(
0 commit comments