@@ -3096,37 +3096,21 @@ void llvm::LoadIntFromMemory(APInt &IntVal, const uint8_t *Src,
3096
3096
}
3097
3097
3098
3098
APInt APIntOps::avgFloorS (const APInt &C1, const APInt &C2) {
3099
- // Return floor((C1 + C2)/2)
3100
- assert (C1.getBitWidth () == C2.getBitWidth () && " Unequal bitwidths" );
3101
- unsigned FullWidth = C1.getBitWidth () + 1 ;
3102
- APInt C1Ext = C1.sext (FullWidth);
3103
- APInt C2Ext = C2.sext (FullWidth);
3104
- return (C1Ext + C2Ext).extractBits (C1.getBitWidth (), 1 );
3099
+ // Return floor((C1 + C2) / 2)
3100
+ return (C1 & C2) + (C1 ^ C2).ashr (1 );
3105
3101
}
3106
3102
3107
3103
APInt APIntOps::avgFloorU (const APInt &C1, const APInt &C2) {
3108
- // Return floor((C1 + C2)/2)
3109
- assert (C1.getBitWidth () == C2.getBitWidth () && " Unequal bitwidths" );
3110
- unsigned FullWidth = C1.getBitWidth () + 1 ;
3111
- APInt C1Ext = C1.zext (FullWidth);
3112
- APInt C2Ext = C2.zext (FullWidth);
3113
- return (C1Ext + C2Ext).extractBits (C1.getBitWidth (), 1 );
3104
+ // Return floor((C1 + C2) / 2)
3105
+ return (C1 & C2) + (C1 ^ C2).lshr (1 );
3114
3106
}
3115
3107
3116
3108
APInt APIntOps::avgCeilS (const APInt &C1, const APInt &C2) {
3117
- // Return ceil((C1 + C2)/2)
3118
- assert (C1.getBitWidth () == C2.getBitWidth () && " Unequal bitwidths" );
3119
- unsigned FullWidth = C1.getBitWidth () + 1 ;
3120
- APInt C1Ext = C1.sext (FullWidth);
3121
- APInt C2Ext = C2.sext (FullWidth);
3122
- return (C1Ext + C2Ext + 1 ).extractBits (C1.getBitWidth (), 1 );
3109
+ // Return ceil((C1 + C2) / 2)
3110
+ return (C1 | C2) - (C1 ^ C2).ashr (1 );
3123
3111
}
3124
3112
3125
3113
APInt APIntOps::avgCeilU (const APInt &C1, const APInt &C2) {
3126
- // Return ceil((C1 + C2)/2)
3127
- assert (C1.getBitWidth () == C2.getBitWidth () && " Unequal bitwidths" );
3128
- unsigned FullWidth = C1.getBitWidth () + 1 ;
3129
- APInt C1Ext = C1.zext (FullWidth);
3130
- APInt C2Ext = C2.zext (FullWidth);
3131
- return (C1Ext + C2Ext + 1 ).extractBits (C1.getBitWidth (), 1 );
3114
+ // Return ceil((C1 + C2) / 2)
3115
+ return (C1 | C2) - (C1 ^ C2).lshr (1 );
3132
3116
}
0 commit comments