32 lines
1.0 KiB
LLVM
32 lines
1.0 KiB
LLVM
define dso_local noundef i32 @x264_pixel_sad_16x16(ptr %0, i32 noundef %1, ptr %2, i32 noundef %3) {
|
|
%5 = sext i32 %1 to i64
|
|
%6 = sext i32 %3 to i64
|
|
br label %7
|
|
|
|
7:
|
|
%8 = phi i32 [ 0, %4 ], [ %23, %7 ]
|
|
%9 = phi i32 [ 0, %4 ], [ %20, %7 ]
|
|
%10 = phi ptr [ %0, %4 ], [ %21, %7 ]
|
|
%11 = phi ptr [ %2, %4 ], [ %22, %7 ]
|
|
%12 = load <16 x i8>, ptr %10, align 1
|
|
%13 = zext <16 x i8> %12 to <16 x i16>
|
|
%14 = load <16 x i8>, ptr %11, align 1
|
|
%15 = zext <16 x i8> %14 to <16 x i16>
|
|
%16 = sub nsw <16 x i16> %13, %15
|
|
%17 = tail call <16 x i16> @llvm.abs.v16i16(<16 x i16> %16, i1 false)
|
|
%18 = zext <16 x i16> %17 to <16 x i32>
|
|
%19 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %18)
|
|
%20 = add i32 %19, %9
|
|
%21 = getelementptr inbounds i8, ptr %10, i64 %5
|
|
%22 = getelementptr inbounds i8, ptr %11, i64 %6
|
|
%23 = add nuw nsw i32 %8, 1
|
|
%24 = icmp eq i32 %23, 16
|
|
br i1 %24, label %25, label %7
|
|
|
|
25:
|
|
ret i32 %20
|
|
}
|
|
|
|
declare <16 x i16> @llvm.abs.v16i16(<16 x i16>, i1 immarg)
|
|
|
|
declare i32 @llvm.vector.reduce.add.v16i32(<16 x i32>) |