@@ -6605,7 +6605,7 @@ MONO_RESTORE_WARNING
66056605 addr = convert (ctx , addr , LLVMPointerType (t , 0 ));
66066606
66076607 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 );
66096609 else
66106610 values [ins -> dreg ] = emit_load (builder , t , addr , dname , is_volatile );
66116611
@@ -7172,7 +7172,7 @@ MONO_RESTORE_WARNING
71727172 addr = convert (ctx , addr , LLVMPointerType (t , 0 ));
71737173
71747174 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 );
71767176 ARM64_ATOMIC_FENCE_FIX ;
71777177
71787178 if (sext )
@@ -7511,7 +7511,11 @@ MONO_RESTORE_WARNING
75117511
75127512 indexes [0 ] = const_int32 (0 );
75137513 indexes [1 ] = const_int32 (0 );
7514+ #if LLVM_API_VERSION >= 1400
7515+ LLVMSetInitializer (ref_var , LLVMConstGEP2 (var_type , name_var , indexes , 2 ));
7516+ #else
75147517 LLVMSetInitializer (ref_var , LLVMConstGEP (name_var , indexes , 2 ));
7518+ #endif
75157519 LLVMSetLinkage (ref_var , LLVMPrivateLinkage );
75167520 LLVMSetExternallyInitialized (ref_var , TRUE);
75177521 LLVMSetSection (ref_var , "__DATA, __objc_selrefs, literal_pointers, no_dead_strip" );
@@ -7626,7 +7630,7 @@ MONO_RESTORE_WARNING
76267630 LLVMValueRef src ;
76277631
76287632 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 );
76307634 break ;
76317635 }
76327636 case OP_STOREX_MEMBASE : {
@@ -8439,8 +8443,9 @@ MONO_RESTORE_WARNING
84398443
84408444 case OP_SSE_LOADU : {
84418445 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
84448449 break ;
84458450 }
84468451 case OP_SSE_MOVSS : {
@@ -8467,7 +8472,7 @@ MONO_RESTORE_WARNING
84678472 LLVMTypeRef srcty = LLVMGetElementType (rty );
84688473 LLVMValueRef zero = LLVMConstNull (rty );
84698474 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 );
84718476 values [ins -> dreg ] = LLVMBuildInsertElement (builder , zero , val , const_int32 (0 ), dname );
84728477 break ;
84738478 }
@@ -9097,7 +9102,7 @@ MONO_RESTORE_WARNING
90979102 case OP_SSE3_MOVDDUP_MEM : {
90989103 LLVMValueRef undef = LLVMGetUndef (v128_r8_t );
90999104 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 );
91019106 LLVMValueRef val = LLVMBuildInsertElement (builder , undef , elem , const_int32 (0 ), "sse3_movddup_mem" );
91029107 values [ins -> dreg ] = LLVMBuildShuffleVector (builder , val , undef , LLVMConstNull (LLVMVectorType (i4_t , 2 )), "sse3_movddup_mem" );
91039108 break ;
@@ -9322,7 +9327,7 @@ MONO_RESTORE_WARNING
93229327 LLVMValueRef value ;
93239328 if (LLVMGetTypeKind (LLVMTypeOf (lhs )) != LLVMVectorTypeKind ) {
93249329 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 );
93269331 } else {
93279332 value = LLVMBuildBitCast (ctx -> builder , lhs , vec_type , "" );
93289333 }
@@ -9353,8 +9358,9 @@ MONO_RESTORE_WARNING
93539358
93549359 case OP_SSE41_LOADANT : {
93559360 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 );
93589364 set_nontemporal_flag (load );
93599365 values [ins -> dreg ] = load ;
93609366 break ;
@@ -10641,7 +10647,7 @@ MONO_RESTORE_WARNING
1064110647 LLVMTypeRef elem_t = LLVMGetElementType (ret_t );
1064210648 LLVMValueRef address = convert (ctx , arg3 , LLVMPointerType (elem_t , 0 ));
1064310649 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 );
1064510651 result = LLVMBuildInsertElement (builder , lhs , result , rhs , "arm64_ld1_insert" );
1064610652 values [ins -> dreg ] = result ;
1064710653 break ;
@@ -10652,13 +10658,15 @@ MONO_RESTORE_WARNING
1065210658 LLVMTypeRef ret_t = simd_class_to_llvm_type (ctx , ins -> klass );
1065310659 unsigned int alignment = mono_llvm_get_prim_size_bits (ret_t ) / 8 ;
1065410660 LLVMValueRef address = lhs ;
10661+ LLVMTypeRef etype = ret_t ;
1065510662 LLVMTypeRef address_t = LLVMPointerType (ret_t , 0 );
1065610663 if (replicate ) {
1065710664 LLVMTypeRef elem_t = LLVMGetElementType (ret_t );
10665+ etype = elem_t ;
1065810666 address_t = LLVMPointerType (elem_t , 0 );
1065910667 }
1066010668 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 );
1066210670 if (replicate ) {
1066310671 unsigned int elems = LLVMGetVectorSize (ret_t );
1066410672 result = broadcast_element (ctx , result , elems );
0 commit comments