@@ -924,7 +924,7 @@ IR_FOLD(SHL(C_CHAR, C_CHAR))
924
924
IR_FOLD (SHL (C_I8 , C_I8 ))
925
925
{
926
926
IR_ASSERT (IR_OPT_TYPE (opt ) == op1_insn -> type );
927
- IR_FOLD_CONST_I (op1_insn -> val .i8 << op2_insn -> val .i8 );
927
+ IR_FOLD_CONST_I (( int8_t )( op1_insn -> val .u8 << op2_insn -> val .u8 ) );
928
928
}
929
929
930
930
IR_FOLD (SHL (C_U16 , C_U16 ))
@@ -936,7 +936,7 @@ IR_FOLD(SHL(C_U16, C_U16))
936
936
IR_FOLD (SHL (C_I16 , C_I16 ))
937
937
{
938
938
IR_ASSERT (IR_OPT_TYPE (opt ) == op1_insn -> type );
939
- IR_FOLD_CONST_I (op1_insn -> val .i16 << op2_insn -> val .i16 );
939
+ IR_FOLD_CONST_I (( int16_t )( op1_insn -> val .u16 << op2_insn -> val .u16 ) );
940
940
}
941
941
942
942
IR_FOLD (SHL (C_U32 , C_U32 ))
@@ -948,7 +948,7 @@ IR_FOLD(SHL(C_U32, C_U32))
948
948
IR_FOLD (SHL (C_I32 , C_I32 ))
949
949
{
950
950
IR_ASSERT (IR_OPT_TYPE (opt ) == op1_insn -> type );
951
- IR_FOLD_CONST_I (op1_insn -> val .i32 << op2_insn -> val .i32 );
951
+ IR_FOLD_CONST_I (( int32_t )( op1_insn -> val .u32 << op2_insn -> val .u32 ) );
952
952
}
953
953
954
954
IR_FOLD (SHL (C_U64 , C_U64 ))
@@ -980,7 +980,7 @@ IR_FOLD(SHR(C_U16, C_U16))
980
980
IR_FOLD (SHR (C_I16 , C_I16 ))
981
981
{
982
982
IR_ASSERT (IR_OPT_TYPE (opt ) == op1_insn -> type );
983
- IR_FOLD_CONST_U ((int16_t )(op1_insn -> val .u16 >> op2_insn -> val .u16 ));
983
+ IR_FOLD_CONST_I ((int16_t )(op1_insn -> val .u16 >> op2_insn -> val .u16 ));
984
984
}
985
985
986
986
IR_FOLD (SHR (C_U32 , C_U32 ))
@@ -992,7 +992,7 @@ IR_FOLD(SHR(C_U32, C_U32))
992
992
IR_FOLD (SHR (C_I32 , C_I32 ))
993
993
{
994
994
IR_ASSERT (IR_OPT_TYPE (opt ) == op1_insn -> type );
995
- IR_FOLD_CONST_U ((int32_t )(op1_insn -> val .u32 >> op2_insn -> val .u32 ));
995
+ IR_FOLD_CONST_I ((int32_t )(op1_insn -> val .u32 >> op2_insn -> val .u32 ));
996
996
}
997
997
998
998
IR_FOLD (SHR (C_U64 , C_U64 ))
@@ -2728,7 +2728,7 @@ IR_FOLD(ADD(ADD, C_ADDR))
2728
2728
/* (x + c1) + c2 => x + (c1 + c2) */
2729
2729
val .u64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 + op2_insn -> val .u64 ;
2730
2730
op1 = op1_insn -> op1 ;
2731
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2731
+ op2 = ir_const (ctx , val , op2_insn -> type );
2732
2732
IR_FOLD_RESTART ;
2733
2733
}
2734
2734
IR_FOLD_NEXT ;
@@ -2743,7 +2743,7 @@ IR_FOLD(ADD(ADD, C_I64))
2743
2743
/* (x + c1) + c2 => x + (c1 + c2) */
2744
2744
val .i64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 + op2_insn -> val .u64 ;
2745
2745
op1 = op1_insn -> op1 ;
2746
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2746
+ op2 = ir_const (ctx , val , op2_insn -> type );
2747
2747
IR_FOLD_RESTART ;
2748
2748
}
2749
2749
IR_FOLD_NEXT ;
@@ -2759,14 +2759,14 @@ IR_FOLD(ADD(SUB, C_ADDR))
2759
2759
/* (x - c1) + c2 => x + (c2 - c1) */
2760
2760
val .u64 = op2_insn -> val .u64 - ctx -> ir_base [op1_insn -> op2 ].val .u64 ;
2761
2761
op1 = op1_insn -> op1 ;
2762
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2762
+ op2 = ir_const (ctx , val , op2_insn -> type );
2763
2763
IR_FOLD_RESTART ;
2764
2764
} else if (IR_IS_CONST_REF (op1_insn -> op1 ) && !IR_IS_SYM_CONST (ctx -> ir_base [op1_insn -> op1 ].op )) {
2765
2765
/* (c1 - x) + c2 => (c1 + c2) - x */
2766
2766
val .u64 = ctx -> ir_base [op1_insn -> op1 ].val .u64 + op2_insn -> val .u64 ;
2767
2767
opt ++ ; /* ADD -> SUB */
2768
2768
op2 = op1_insn -> op2 ;
2769
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2769
+ op1 = ir_const (ctx , val , op2_insn -> type );
2770
2770
IR_FOLD_RESTART ;
2771
2771
}
2772
2772
IR_FOLD_NEXT ;
@@ -2785,14 +2785,14 @@ IR_FOLD(ADD(SUB, C_I64))
2785
2785
opt ++ ; /* ADD -> SUB */
2786
2786
}
2787
2787
op1 = op1_insn -> op1 ;
2788
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2788
+ op2 = ir_const (ctx , val , op2_insn -> type );
2789
2789
IR_FOLD_RESTART ;
2790
2790
} else if (IR_IS_CONST_REF (op1_insn -> op1 ) && !IR_IS_SYM_CONST (ctx -> ir_base [op1_insn -> op1 ].op )) {
2791
2791
/* (c1 - x) + c2 => (c1 + c2) - x */
2792
2792
val .i64 = ctx -> ir_base [op1_insn -> op1 ].val .u64 + op2_insn -> val .u64 ;
2793
2793
opt ++ ; /* ADD -> SUB */
2794
2794
op2 = op1_insn -> op2 ;
2795
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2795
+ op1 = ir_const (ctx , val , op2_insn -> type );
2796
2796
IR_FOLD_RESTART ;
2797
2797
}
2798
2798
IR_FOLD_NEXT ;
@@ -2809,7 +2809,7 @@ IR_FOLD(SUB(ADD, C_ADDR))
2809
2809
val .u64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 - op2_insn -> val .u64 ;
2810
2810
opt -- ; /* SUB -> ADD */
2811
2811
op1 = op1_insn -> op1 ;
2812
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2812
+ op2 = ir_const (ctx , val , op2_insn -> type );
2813
2813
IR_FOLD_RESTART ;
2814
2814
}
2815
2815
IR_FOLD_NEXT ;
@@ -2829,7 +2829,7 @@ IR_FOLD(SUB(ADD, C_I64))
2829
2829
opt -- ; /* SUB -> ADD */
2830
2830
}
2831
2831
op1 = op1_insn -> op1 ;
2832
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2832
+ op2 = ir_const (ctx , val , op2_insn -> type );
2833
2833
IR_FOLD_RESTART ;
2834
2834
}
2835
2835
IR_FOLD_NEXT ;
@@ -2845,7 +2845,7 @@ IR_FOLD(SUB(C_ADDR, ADD))
2845
2845
/* c1 - (x + c2) => (c1 - c2) - x */
2846
2846
val .u64 = op1_insn -> val .u64 - ctx -> ir_base [op2_insn -> op2 ].val .u64 ;
2847
2847
op2 = op2_insn -> op1 ;
2848
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2848
+ op1 = ir_const (ctx , val , op2_insn -> type );
2849
2849
IR_FOLD_RESTART ;
2850
2850
}
2851
2851
IR_FOLD_NEXT ;
@@ -2860,7 +2860,7 @@ IR_FOLD(SUB(C_I64, ADD))
2860
2860
/* c1 - (x + c2) => (c1 - c2) - x */
2861
2861
val .i64 = op1_insn -> val .u64 - ctx -> ir_base [op2_insn -> op2 ].val .u64 ;
2862
2862
op2 = op2_insn -> op1 ;
2863
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2863
+ op1 = ir_const (ctx , val , op2_insn -> type );
2864
2864
IR_FOLD_RESTART ;
2865
2865
}
2866
2866
IR_FOLD_NEXT ;
@@ -2880,13 +2880,13 @@ IR_FOLD(SUB(SUB, C_ADDR))
2880
2880
opt -- ; /* SUB -> ADD */
2881
2881
}
2882
2882
op1 = op1_insn -> op1 ;
2883
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2883
+ op2 = ir_const (ctx , val , op2_insn -> type );
2884
2884
IR_FOLD_RESTART ;
2885
2885
} else if (IR_IS_CONST_REF (op1_insn -> op1 ) && !IR_IS_SYM_CONST (ctx -> ir_base [op1_insn -> op1 ].op )) {
2886
2886
/* (c1 - x) - c2 => (c1 - c2) - x */
2887
2887
val .u64 = ctx -> ir_base [op1_insn -> op1 ].val .u64 - op2_insn -> val .u64 ;
2888
2888
op2 = op1_insn -> op2 ;
2889
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2889
+ op1 = ir_const (ctx , val , op2_insn -> type );
2890
2890
IR_FOLD_RESTART ;
2891
2891
}
2892
2892
IR_FOLD_NEXT ;
@@ -2905,13 +2905,13 @@ IR_FOLD(SUB(SUB, C_I64))
2905
2905
opt -- ; /* SUB -> ADD */
2906
2906
}
2907
2907
op1 = op1_insn -> op1 ;
2908
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2908
+ op2 = ir_const (ctx , val , op2_insn -> type );
2909
2909
IR_FOLD_RESTART ;
2910
2910
} else if (IR_IS_CONST_REF (op1_insn -> op1 ) && !IR_IS_SYM_CONST (ctx -> ir_base [op1_insn -> op1 ].op )) {
2911
2911
/* (c1 - x) - c2 => (c1 - c2) - x */
2912
2912
val .i64 = ctx -> ir_base [op1_insn -> op1 ].val .u64 - op2_insn -> val .u64 ;
2913
2913
op2 = op1_insn -> op2 ;
2914
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2914
+ op1 = ir_const (ctx , val , op2_insn -> type );
2915
2915
IR_FOLD_RESTART ;
2916
2916
}
2917
2917
IR_FOLD_NEXT ;
@@ -2927,7 +2927,7 @@ IR_FOLD(SUB(C_ADDR, SUB))
2927
2927
/* c1 - (x - c2) => (c1 + c2) - x */
2928
2928
val .u64 = op1_insn -> val .u64 + ctx -> ir_base [op2_insn -> op2 ].val .u64 ;
2929
2929
op2 = op2_insn -> op1 ;
2930
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2930
+ op1 = ir_const (ctx , val , op1_insn -> op1 );
2931
2931
IR_FOLD_RESTART ;
2932
2932
} else if (IR_IS_CONST_REF (op2_insn -> op1 ) && !IR_IS_SYM_CONST (ctx -> ir_base [op2_insn -> op1 ].op )) {
2933
2933
/* c1 - (c2 - x) => x + (c1 - c2) */
@@ -2937,7 +2937,7 @@ IR_FOLD(SUB(C_ADDR, SUB))
2937
2937
opt ++ ; /* ADD -> SUB */
2938
2938
}
2939
2939
op1 = op2_insn -> op2 ;
2940
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2940
+ op2 = ir_const (ctx , val , op1_insn -> type );
2941
2941
IR_FOLD_RESTART ;
2942
2942
}
2943
2943
IR_FOLD_NEXT ;
@@ -2952,7 +2952,7 @@ IR_FOLD(SUB(C_I64, SUB))
2952
2952
/* c1 - (x - c2) => (c1 + c2) - x */
2953
2953
val .i64 = op1_insn -> val .u64 + ctx -> ir_base [op2_insn -> op2 ].val .u64 ;
2954
2954
op2 = op2_insn -> op1 ;
2955
- op1 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2955
+ op1 = ir_const (ctx , val , op1_insn -> type );
2956
2956
IR_FOLD_RESTART ;
2957
2957
} else if (IR_IS_CONST_REF (op2_insn -> op1 ) && !IR_IS_SYM_CONST (ctx -> ir_base [op2_insn -> op1 ].op )) {
2958
2958
/* c1 - (c2 - x) => x + (c1 - c2) */
@@ -2962,7 +2962,7 @@ IR_FOLD(SUB(C_I64, SUB))
2962
2962
opt ++ ; /* ADD -> SUB */
2963
2963
}
2964
2964
op1 = op2_insn -> op2 ;
2965
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2965
+ op2 = ir_const (ctx , val , op1_insn -> type );
2966
2966
IR_FOLD_RESTART ;
2967
2967
}
2968
2968
IR_FOLD_NEXT ;
@@ -2978,7 +2978,7 @@ IR_FOLD(MUL(MUL, C_ADDR))
2978
2978
/* (x * c1) * c2 => x * (c1 * c2) */
2979
2979
val .u64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 * op2_insn -> val .u64 ;
2980
2980
op1 = op1_insn -> op1 ;
2981
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2981
+ op2 = ir_const (ctx , val , op2_insn -> type );
2982
2982
IR_FOLD_RESTART ;
2983
2983
}
2984
2984
IR_FOLD_NEXT ;
@@ -2993,7 +2993,7 @@ IR_FOLD(MUL(MUL, C_I64))
2993
2993
/* (x * c1) * c2 => x * (c1 * c2) */
2994
2994
val .i64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 * op2_insn -> val .u64 ;
2995
2995
op1 = op1_insn -> op1 ;
2996
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
2996
+ op2 = ir_const (ctx , val , op2_insn -> type );
2997
2997
IR_FOLD_RESTART ;
2998
2998
}
2999
2999
IR_FOLD_NEXT ;
@@ -3013,7 +3013,7 @@ IR_FOLD(AND(AND, C_ADDR))
3013
3013
/* (x & c1) & c2 => x & (c1 & c2) */
3014
3014
val .u64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 & op2_insn -> val .u64 ;
3015
3015
op1 = op1_insn -> op1 ;
3016
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
3016
+ op2 = ir_const (ctx , val , op2_insn -> type );
3017
3017
IR_FOLD_RESTART ;
3018
3018
}
3019
3019
IR_FOLD_NEXT ;
@@ -3033,7 +3033,7 @@ IR_FOLD(OR(OR, C_ADDR))
3033
3033
/* (x | c1) | c2 => x | (c1 | c2) */
3034
3034
val .u64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 | op2_insn -> val .u64 ;
3035
3035
op1 = op1_insn -> op1 ;
3036
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
3036
+ op2 = ir_const (ctx , val , op2_insn -> type );
3037
3037
IR_FOLD_RESTART ;
3038
3038
}
3039
3039
IR_FOLD_NEXT ;
@@ -3053,7 +3053,7 @@ IR_FOLD(XOR(XOR, C_ADDR))
3053
3053
/* (x ^ c1) ^ c2 => x ^ (c1 ^ c2) */
3054
3054
val .u64 = ctx -> ir_base [op1_insn -> op2 ].val .u64 ^ op2_insn -> val .u64 ;
3055
3055
op1 = op1_insn -> op1 ;
3056
- op2 = ir_const (ctx , val , IR_OPT_TYPE ( opt ) );
3056
+ op2 = ir_const (ctx , val , op2_insn -> type );
3057
3057
IR_FOLD_RESTART ;
3058
3058
}
3059
3059
IR_FOLD_NEXT ;
0 commit comments