Closed kumasento closed 2 years ago
After reg2mem -
func @encrypt(%arg0: memref<?x16xi32>, %arg1: memref<?xi32>) attributes {llvm.linkage = #llvm.linkage<external>} {
%0 = memref.alloca() {scop.scratchpad} : memref<1xi32>
%1 = memref.alloca() {scop.scratchpad} : memref<1xi32>
%c1_i32 = arith.constant 1 : i32
%c4_i32 = arith.constant 4 : i32
%c15_i32 = arith.constant 15 : i32
%c8_i32 = arith.constant 8 : i32
%c283_i32 = arith.constant 283 : i32
%2 = memref.alloca() : memref<1024xi32>
affine.for %arg2 = 1 to 5 {
affine.for %arg3 = 0 to 16 {
%3 = affine.load %arg1[%arg3 * 4] : memref<?xi32>
%4 = arith.shrsi %3, %c4_i32 : i32
%5 = arith.index_cast %4 : i32 to index
%6 = arith.andi %3, %c15_i32 : i32
%7 = arith.index_cast %6 : i32 to index
%8 = memref.load %arg0[%5, %7] : memref<?x16xi32>
affine.store %8, %arg1[%arg3 * 4] : memref<?xi32>
}
affine.for %arg3 = 0 to 1023 {
%3 = affine.load %arg1[%arg3] : memref<?xi32>
%4 = arith.shli %3, %c1_i32 : i32
affine.store %4, %1[0] : memref<1xi32>
affine.store %4, %2[%arg3] : memref<1024xi32>
%5 = arith.shrsi %4, %c8_i32 : i32
%6 = arith.cmpi eq, %5, %c1_i32 : i32
scf.if %6 {
%12 = affine.load %1[0] : memref<1xi32> // <---- crossed the block boundary
%13 = arith.xori %12, %c283_i32 : i32
affine.store %13, %2[%arg3] : memref<1024xi32>
}
%7 = affine.load %arg1[%arg3 + 1] : memref<?xi32>
%8 = arith.shli %7, %c1_i32 : i32
%9 = arith.xori %7, %8 : i32
affine.store %9, %0[0] : memref<1xi32>
%10 = arith.shrsi %9, %c8_i32 : i32
%11 = arith.cmpi eq, %10, %c1_i32 : i32
scf.if %11 {
%12 = affine.load %0[0] : memref<1xi32> // <---- crossed the block boundary
%13 = arith.xori %12, %c283_i32 : i32
%14 = affine.load %2[%arg3] : memref<1024xi32>
%15 = arith.xori %14, %13 : i32
affine.store %15, %2[%arg3] : memref<1024xi32>
} else {
%12 = affine.load %0[0] : memref<1xi32> // <---- crossed the block boundary
%13 = affine.load %2[%arg3] : memref<1024xi32>
%14 = arith.xori %13, %12 : i32
affine.store %14, %2[%arg3] : memref<1024xi32>
}
}
affine.for %arg3 = 0 to 1024 {
%3 = affine.load %2[%arg3] : memref<1024xi32>
affine.store %3, %arg1[%arg3] : memref<?xi32>
}
}
return
}
Input code -