@@ -6605,7 +6605,7 @@ MONO_RESTORE_WARNING
6605
6605
addr = convert (ctx , addr , LLVMPointerType (t , 0 ));
6606
6606
6607
6607
if (is_unaligned )
6608
- values [ins -> dreg ] = mono_llvm_build_aligned_load (builder , addr , dname , is_volatile , 1 );
6608
+ values [ins -> dreg ] = mono_llvm_build_aligned_load (builder , t , addr , dname , is_volatile , 1 );
6609
6609
else
6610
6610
values [ins -> dreg ] = emit_load (builder , t , addr , dname , is_volatile );
6611
6611
@@ -7172,7 +7172,7 @@ MONO_RESTORE_WARNING
7172
7172
addr = convert (ctx , addr , LLVMPointerType (t , 0 ));
7173
7173
7174
7174
ARM64_ATOMIC_FENCE_FIX ;
7175
- values [ins -> dreg ] = mono_llvm_build_atomic_load (builder , addr , dname , is_volatile , size , barrier );
7175
+ values [ins -> dreg ] = mono_llvm_build_atomic_load (builder , t , addr , dname , is_volatile , size , barrier );
7176
7176
ARM64_ATOMIC_FENCE_FIX ;
7177
7177
7178
7178
if (sext )
@@ -7511,7 +7511,11 @@ MONO_RESTORE_WARNING
7511
7511
7512
7512
indexes [0 ] = const_int32 (0 );
7513
7513
indexes [1 ] = const_int32 (0 );
7514
+ #if LLVM_API_VERSION >= 1400
7515
+ LLVMSetInitializer (ref_var , LLVMConstGEP2 (var_type , name_var , indexes , 2 ));
7516
+ #else
7514
7517
LLVMSetInitializer (ref_var , LLVMConstGEP (name_var , indexes , 2 ));
7518
+ #endif
7515
7519
LLVMSetLinkage (ref_var , LLVMPrivateLinkage );
7516
7520
LLVMSetExternallyInitialized (ref_var , TRUE);
7517
7521
LLVMSetSection (ref_var , "__DATA, __objc_selrefs, literal_pointers, no_dead_strip" );
@@ -7626,7 +7630,7 @@ MONO_RESTORE_WARNING
7626
7630
LLVMValueRef src ;
7627
7631
7628
7632
src = convert (ctx , LLVMBuildAdd (builder , convert (ctx , values [ins -> inst_basereg ], IntPtrType ()), LLVMConstInt (IntPtrType (), ins -> inst_offset , FALSE), "" ), LLVMPointerType (t , 0 ));
7629
- values [ins -> dreg ] = mono_llvm_build_aligned_load (builder , src , "" , FALSE, 1 );
7633
+ values [ins -> dreg ] = mono_llvm_build_aligned_load (builder , t , src , "" , FALSE, 1 );
7630
7634
break ;
7631
7635
}
7632
7636
case OP_STOREX_MEMBASE : {
@@ -8439,8 +8443,9 @@ MONO_RESTORE_WARNING
8439
8443
8440
8444
case OP_SSE_LOADU : {
8441
8445
LLVMValueRef dst_ptr = convert (ctx , lhs , LLVMPointerType (primitive_type_to_llvm_type (inst_c1_type (ins )), 0 ));
8442
- LLVMValueRef dst_vec = LLVMBuildBitCast (builder , dst_ptr , LLVMPointerType (type_to_sse_type (ins -> inst_c1 ), 0 ), "" );
8443
- values [ins -> dreg ] = mono_llvm_build_aligned_load (builder , dst_vec , "" , FALSE, ins -> inst_c0 ); // inst_c0 is alignment
8446
+ LLVMTypeRef etype = type_to_sse_type (ins -> inst_c1 );
8447
+ LLVMValueRef dst_vec = LLVMBuildBitCast (builder , dst_ptr , LLVMPointerType (etype , 0 ), "" );
8448
+ values [ins -> dreg ] = mono_llvm_build_aligned_load (builder , etype , dst_vec , "" , FALSE, ins -> inst_c0 ); // inst_c0 is alignment
8444
8449
break ;
8445
8450
}
8446
8451
case OP_SSE_MOVSS : {
@@ -8467,7 +8472,7 @@ MONO_RESTORE_WARNING
8467
8472
LLVMTypeRef srcty = LLVMGetElementType (rty );
8468
8473
LLVMValueRef zero = LLVMConstNull (rty );
8469
8474
LLVMValueRef addr = convert (ctx , lhs , LLVMPointerType (srcty , 0 ));
8470
- LLVMValueRef val = mono_llvm_build_aligned_load (builder , addr , "" , FALSE, 1 );
8475
+ LLVMValueRef val = mono_llvm_build_aligned_load (builder , srcty , addr , "" , FALSE, 1 );
8471
8476
values [ins -> dreg ] = LLVMBuildInsertElement (builder , zero , val , const_int32 (0 ), dname );
8472
8477
break ;
8473
8478
}
@@ -9097,7 +9102,7 @@ MONO_RESTORE_WARNING
9097
9102
case OP_SSE3_MOVDDUP_MEM : {
9098
9103
LLVMValueRef undef = LLVMGetUndef (v128_r8_t );
9099
9104
LLVMValueRef addr = convert (ctx , lhs , LLVMPointerType (r8_t , 0 ));
9100
- LLVMValueRef elem = mono_llvm_build_aligned_load (builder , addr , "sse3_movddup_mem" , FALSE, 1 );
9105
+ LLVMValueRef elem = mono_llvm_build_aligned_load (builder , r8_t , addr , "sse3_movddup_mem" , FALSE, 1 );
9101
9106
LLVMValueRef val = LLVMBuildInsertElement (builder , undef , elem , const_int32 (0 ), "sse3_movddup_mem" );
9102
9107
values [ins -> dreg ] = LLVMBuildShuffleVector (builder , val , undef , LLVMConstNull (LLVMVectorType (i4_t , 2 )), "sse3_movddup_mem" );
9103
9108
break ;
@@ -9322,7 +9327,7 @@ MONO_RESTORE_WARNING
9322
9327
LLVMValueRef value ;
9323
9328
if (LLVMGetTypeKind (LLVMTypeOf (lhs )) != LLVMVectorTypeKind ) {
9324
9329
LLVMValueRef bitcasted = LLVMBuildBitCast (ctx -> builder , lhs , LLVMPointerType (vec_type , 0 ), "" );
9325
- value = mono_llvm_build_aligned_load (builder , bitcasted , "" , FALSE, 1 );
9330
+ value = mono_llvm_build_aligned_load (builder , vec_type , bitcasted , "" , FALSE, 1 );
9326
9331
} else {
9327
9332
value = LLVMBuildBitCast (ctx -> builder , lhs , vec_type , "" );
9328
9333
}
@@ -9353,8 +9358,9 @@ MONO_RESTORE_WARNING
9353
9358
9354
9359
case OP_SSE41_LOADANT : {
9355
9360
LLVMValueRef dst_ptr = convert (ctx , lhs , LLVMPointerType (primitive_type_to_llvm_type (inst_c1_type (ins )), 0 ));
9356
- LLVMValueRef dst_vec = LLVMBuildBitCast (builder , dst_ptr , LLVMPointerType (type_to_sse_type (ins -> inst_c1 ), 0 ), "" );
9357
- LLVMValueRef load = mono_llvm_build_aligned_load (builder , dst_vec , "" , FALSE, 16 );
9361
+ LLVMTypeRef etype = type_to_sse_type (ins -> inst_c1 );
9362
+ LLVMValueRef dst_vec = LLVMBuildBitCast (builder , dst_ptr , LLVMPointerType (etype , 0 ), "" );
9363
+ LLVMValueRef load = mono_llvm_build_aligned_load (builder , etype , dst_vec , "" , FALSE, 16 );
9358
9364
set_nontemporal_flag (load );
9359
9365
values [ins -> dreg ] = load ;
9360
9366
break ;
@@ -10641,7 +10647,7 @@ MONO_RESTORE_WARNING
10641
10647
LLVMTypeRef elem_t = LLVMGetElementType (ret_t );
10642
10648
LLVMValueRef address = convert (ctx , arg3 , LLVMPointerType (elem_t , 0 ));
10643
10649
unsigned int alignment = mono_llvm_get_prim_size_bits (ret_t ) / 8 ;
10644
- LLVMValueRef result = mono_llvm_build_aligned_load (builder , address , "arm64_ld1_insert" , FALSE, alignment );
10650
+ LLVMValueRef result = mono_llvm_build_aligned_load (builder , elem_t , address , "arm64_ld1_insert" , FALSE, alignment );
10645
10651
result = LLVMBuildInsertElement (builder , lhs , result , rhs , "arm64_ld1_insert" );
10646
10652
values [ins -> dreg ] = result ;
10647
10653
break ;
@@ -10652,13 +10658,15 @@ MONO_RESTORE_WARNING
10652
10658
LLVMTypeRef ret_t = simd_class_to_llvm_type (ctx , ins -> klass );
10653
10659
unsigned int alignment = mono_llvm_get_prim_size_bits (ret_t ) / 8 ;
10654
10660
LLVMValueRef address = lhs ;
10661
+ LLVMTypeRef etype = ret_t ;
10655
10662
LLVMTypeRef address_t = LLVMPointerType (ret_t , 0 );
10656
10663
if (replicate ) {
10657
10664
LLVMTypeRef elem_t = LLVMGetElementType (ret_t );
10665
+ etype = elem_t ;
10658
10666
address_t = LLVMPointerType (elem_t , 0 );
10659
10667
}
10660
10668
address = convert (ctx , address , address_t );
10661
- LLVMValueRef result = mono_llvm_build_aligned_load (builder , address , "arm64_ld1" , FALSE, alignment );
10669
+ LLVMValueRef result = mono_llvm_build_aligned_load (builder , etype , address , "arm64_ld1" , FALSE, alignment );
10662
10670
if (replicate ) {
10663
10671
unsigned int elems = LLVMGetVectorSize (ret_t );
10664
10672
result = broadcast_element (ctx , result , elems );
0 commit comments