diff --git a/libsolidity/codegen/mlir/SolidityToMLIR.cpp b/libsolidity/codegen/mlir/SolidityToMLIR.cpp index e9cc12e30..79d499ca7 100644 --- a/libsolidity/codegen/mlir/SolidityToMLIR.cpp +++ b/libsolidity/codegen/mlir/SolidityToMLIR.cpp @@ -461,7 +461,7 @@ class SolidityToMLIRPass { &identifiedStructsInProgress) const { if (auto arrTy = mlir::dyn_cast(ty)) return mlir::sol::ArrayType::get( - b.getContext(), arrTy.getSize(), + b.getContext(), arrTy.getSizeOpt(), toMemoryType(arrTy.getEltType(), identifiedStructsInProgress), mlir::sol::DataLocation::Memory); if (auto structTy = mlir::dyn_cast(ty)) { @@ -737,11 +737,11 @@ mlir::Type SolidityToMLIRPass::getType( mlir::Type eltTy = getType(arrTy->baseType(), /*indirectFn=*/true, identifiedStructsInProgress); - // TODO: Does convert_to already do this? - assert(arrTy->length() <= INT64_MAX); - int64_t size = arrTy->isDynamicallySized() - ? -1 - : arrTy->length().convert_to(); + std::optional size = + arrTy->isDynamicallySized() + ? /*size=*/std::nullopt + : std::optional( + mlirgen::getAPInt(arrTy->length(), 256)); return mlir::sol::ArrayType::get(b.getContext(), size, eltTy, getDataLocation(arrTy)); } @@ -754,8 +754,8 @@ mlir::Type SolidityToMLIRPass::getType( mlir::Type eltTy = getType(arrTy.baseType(), /*indirectFn=*/true, identifiedStructsInProgress); - return mlir::sol::ArrayType::get(b.getContext(), /*size=*/-1, eltTy, - getDataLocation(&arrTy)); + return mlir::sol::ArrayType::get(b.getContext(), /*size=*/std::nullopt, + eltTy, getDataLocation(&arrTy)); } case Type::Category::Struct: { const auto *structTy = static_cast(ty); diff --git a/test/lit/mlirCodegen/EVM/abi-decode-storage.sol b/test/lit/mlirCodegen/EVM/abi-decode-storage.sol index a9780f289..d9ddbe24b 100644 --- a/test/lit/mlirCodegen/EVM/abi-decode-storage.sol +++ b/test/lit/mlirCodegen/EVM/abi-decode-storage.sol @@ -10,7 +10,7 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:3:2) +// CHECK-NEXT: #loc2 = loc({{.*}}:3:2) // CHECK-NEXT: module @C_21 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -152,9 +152,43 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:3:2), %arg1: i256 loc({{.*}}:3:2), %arg2: i256 loc({{.*}}:3:2), %arg3: i256 loc({{.*}}:3:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:3:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:3:2)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @f_20() -> (i256, i256) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -168,181 +202,154 @@ contract C { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc3) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc3) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc3) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) -// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc3) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc3) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc3) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc3) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc3) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc3) +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) -// CHECK-NEXT: cf.br ^bb4 loc(#loc3) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc3) +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %30 = arith.addi %16, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %31 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %32 = llvm.load %31 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %33 = arith.addi %30, %32 : i256 loc(#loc4) +// CHECK-NEXT: %34 = arith.cmpi slt, %32, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %34, ^bb5, ^bb6 loc(#loc4) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:3:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc3) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:3:2)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc3) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc3) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc3) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc3) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: cf.br ^bb9 loc(#loc3) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %47 = arith.addi %16, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %48 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %50 = arith.addi %47, %49 : i256 loc(#loc4) -// CHECK-NEXT: %51 = arith.cmpi slt, %49, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %51, ^bb10, ^bb11 loc(#loc4) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%52, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%35, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb11 loc(#loc4) -// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 -// CHECK-NEXT: %53 = llvm.inttoptr %47 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %54 = llvm.load %53 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %55 = arith.addi %16, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %56 = llvm.inttoptr %55 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %58 = arith.cmpi ugt, %57, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %58, ^bb12, ^bb13 loc(#loc4) -// CHECK-NEXT: ^bb12: // pred: ^bb11 -// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%59, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb6 loc(#loc4) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %36 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %37 = llvm.load %36 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %38 = arith.addi %16, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: %39 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %40 = llvm.load %39 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %41 = arith.cmpi ugt, %40, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %41, ^bb7, ^bb8 loc(#loc4) +// CHECK-NEXT: ^bb7: // pred: ^bb6 +// CHECK-NEXT: %42 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%42, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb13 loc(#loc4) -// CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 -// CHECK-NEXT: %60 = arith.addi %47, %57 : i256 loc(#loc4) -// CHECK-NEXT: %61 = arith.addi %60, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %62 = arith.cmpi sge, %61, %50 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %62, ^bb14, ^bb15 loc(#loc4) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %63 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%63, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb8 loc(#loc4) +// CHECK-NEXT: ^bb8: // 2 preds: ^bb6, ^bb7 +// CHECK-NEXT: %43 = arith.addi %30, %40 : i256 loc(#loc4) +// CHECK-NEXT: %44 = arith.addi %43, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %45 = arith.cmpi sge, %44, %33 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %45, ^bb9, ^bb10 loc(#loc4) +// CHECK-NEXT: ^bb9: // pred: ^bb8 +// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%46, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb15 loc(#loc4) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %64 = llvm.inttoptr %60 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %65 = llvm.load %64 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %66 = arith.addi %60, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %67 = arith.addi %66, %65 : i256 loc(#loc4) -// CHECK-NEXT: %68 = arith.cmpi ugt, %67, %50 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %68, ^bb16, ^bb17 loc(#loc4) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%69, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb10 loc(#loc4) +// CHECK-NEXT: ^bb10: // 2 preds: ^bb8, ^bb9 +// CHECK-NEXT: %47 = llvm.inttoptr %43 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %49 = arith.addi %43, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %50 = arith.addi %49, %48 : i256 loc(#loc4) +// CHECK-NEXT: %51 = arith.cmpi ugt, %50, %33 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %51, ^bb11, ^bb12 loc(#loc4) +// CHECK-NEXT: ^bb11: // pred: ^bb10 +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%52, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb17 loc(#loc4) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %70 = arith.addi %65, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %71 = arith.andi %70, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %72 = arith.cmpi ugt, %65, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %72, ^bb18, ^bb19 loc(#loc4) -// CHECK-NEXT: ^bb18: // pred: ^bb17 -// CHECK-NEXT: %73 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %73 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %74 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %74 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%75, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb12 loc(#loc4) +// CHECK-NEXT: ^bb12: // 2 preds: ^bb10, ^bb11 +// CHECK-NEXT: %53 = arith.addi %48, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %54 = arith.andi %53, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %55 = arith.cmpi ugt, %48, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %55, ^bb13, ^bb14 loc(#loc4) +// CHECK-NEXT: ^bb13: // pred: ^bb12 +// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %57 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %58 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%58, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb19 loc(#loc4) -// CHECK-NEXT: ^bb19: // 2 preds: ^bb17, ^bb18 -// CHECK-NEXT: %76 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %77 = llvm.load %76 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %78 = arith.addi %71, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %79 = arith.andi %78, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %80 = arith.addi %77, %79 : i256 loc(#loc4) -// CHECK-NEXT: %81 = arith.cmpi ugt, %80, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %82 = arith.cmpi ult, %80, %77 : i256 loc(#loc4) -// CHECK-NEXT: %83 = arith.ori %81, %82 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %83, ^bb20, ^bb21 loc(#loc4) -// CHECK-NEXT: ^bb20: // pred: ^bb19 -// CHECK-NEXT: %84 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %85 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %85 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %86 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%86, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb14 loc(#loc4) +// CHECK-NEXT: ^bb14: // 2 preds: ^bb12, ^bb13 +// CHECK-NEXT: %59 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %60 = llvm.load %59 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %61 = arith.addi %54, %c63_i256 : i256 loc(#loc4) +// CHECK-NEXT: %62 = arith.andi %61, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %63 = arith.addi %60, %62 : i256 loc(#loc4) +// CHECK-NEXT: %64 = arith.cmpi ugt, %63, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: %65 = arith.cmpi ult, %63, %60 : i256 loc(#loc4) +// CHECK-NEXT: %66 = arith.ori %64, %65 : i1 loc(#loc4) +// CHECK-NEXT: cf.cond_br %66, ^bb15, ^bb16 loc(#loc4) +// CHECK-NEXT: ^bb15: // pred: ^bb14 +// CHECK-NEXT: %67 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %67 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %68 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %68 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%69, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb21 loc(#loc4) -// CHECK-NEXT: ^bb21: // 2 preds: ^bb19, ^bb20 -// CHECK-NEXT: %87 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %80, %87 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %88 = llvm.inttoptr %77 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %65, %88 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %89 = arith.addi %77, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %90 = llvm.inttoptr %89 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %91 = llvm.inttoptr %66 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memmove"(%90, %91, %65) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: %92 = arith.addi %89, %65 : i256 loc(#loc4) -// CHECK-NEXT: %93 = llvm.inttoptr %92 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c0_i256, %93 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: return %54, %77 : i256, i256 loc(#loc5) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: cf.br ^bb16 loc(#loc4) +// CHECK-NEXT: ^bb16: // 2 preds: ^bb14, ^bb15 +// CHECK-NEXT: %70 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %63, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %71 = llvm.inttoptr %60 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %48, %71 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %72 = arith.addi %60, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %73 = llvm.inttoptr %72 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %74 = llvm.inttoptr %49 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intr.memmove"(%73, %74, %48) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: %75 = arith.addi %72, %48 : i256 loc(#loc4) +// CHECK-NEXT: %76 = llvm.inttoptr %75 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: return %37, %60 : i256, i256 loc(#loc5) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:5:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:5:2) // CHECK-NEXT: #loc4 = loc({{.*}}:6:11) // CHECK-NEXT: #loc5 = loc({{.*}}:6:4) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/abi-encode-struct.sol b/test/lit/mlirCodegen/EVM/abi-encode-struct.sol index 6e859b9d1..ecf7adfb9 100644 --- a/test/lit/mlirCodegen/EVM/abi-encode-struct.sol +++ b/test/lit/mlirCodegen/EVM/abi-encode-struct.sol @@ -89,10 +89,8 @@ contract C { // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc8 = loc({{.*}}:80:11) -// CHECK-NEXT: #loc12 = loc({{.*}}:76:11) -// CHECK-NEXT: #loc16 = loc({{.*}}:72:11) -// CHECK-NEXT: #loc19 = loc({{.*}}:68:11) +// CHECK-NEXT: #loc2 = loc({{.*}}:68:11) +// CHECK-NEXT: #loc17 = loc({{.*}}:72:11) // CHECK-NEXT: #loc22 = loc({{.*}}:63:22) // CHECK-NEXT: #loc24 = loc({{.*}}:64:11) // CHECK-NEXT: #loc27 = loc({{.*}}:59:21) @@ -1274,6 +1272,41 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:68:11), %arg1: i256 loc({{.*}}:68:11), %arg2: i256 loc({{.*}}:68:11), %arg3: i256 loc({{.*}}:68:11)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:68:11)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:68:11)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @storage_packed_193() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c23_i256 = arith.constant 23 : i256 loc(#loc) // CHECK-NEXT: %c96_i256 = arith.constant 96 : i256 loc(#loc) @@ -1289,56 +1322,56 @@ contract C { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c22_i256 = arith.constant 22 : i256 loc(#loc3) +// CHECK-NEXT: %c22_i256 = arith.constant 22 : i256 loc(#loc4) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %3 = arith.addi %1, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %4 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %6 = arith.andi %5, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc4) -// CHECK-NEXT: %7 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %6, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %8 = arith.addi %1, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %9 = arith.shrui %5, %c128_i256 : i256 loc(#loc4) -// CHECK-NEXT: %10 = arith.andi %9, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %11 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %10, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %12 = arith.addi %1, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %13 = arith.shrui %5, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %14 = arith.andi %13, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %15 = arith.cmpi ne, %14, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %16 = arith.extui %15 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %17 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %16, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %18 = arith.addi %1, %c128_i256 : i256 loc(#loc4) -// CHECK-NEXT: %19 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %21 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %22 = arith.subi %3, %2 : i256 loc(#loc4) -// CHECK-NEXT: %23 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %22, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %24 = arith.addi %1, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %25 = arith.cmpi ugt, %24, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %26 = arith.cmpi ult, %24, %1 : i256 loc(#loc4) -// CHECK-NEXT: %27 = arith.ori %25, %26 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %27, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %3 = arith.addi %1, %c160_i256 : i256 loc(#loc5) +// CHECK-NEXT: %4 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.andi %5, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc5) +// CHECK-NEXT: %7 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %6, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %8 = arith.addi %1, %c64_i256 : i256 loc(#loc5) +// CHECK-NEXT: %9 = arith.shrui %5, %c128_i256 : i256 loc(#loc5) +// CHECK-NEXT: %10 = arith.andi %9, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: %11 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %10, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %12 = arith.addi %1, %c96_i256 : i256 loc(#loc5) +// CHECK-NEXT: %13 = arith.shrui %5, %c192_i256 : i256 loc(#loc5) +// CHECK-NEXT: %14 = arith.andi %13, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %15 = arith.cmpi ne, %14, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: %16 = arith.extui %15 : i1 to i256 loc(#loc5) +// CHECK-NEXT: %17 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %16, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %18 = arith.addi %1, %c128_i256 : i256 loc(#loc5) +// CHECK-NEXT: %19 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %21 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %22 = arith.subi %3, %2 : i256 loc(#loc5) +// CHECK-NEXT: %23 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %22, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %24 = arith.addi %1, %c160_i256 : i256 loc(#loc5) +// CHECK-NEXT: %25 = arith.cmpi ugt, %24, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: %26 = arith.cmpi ult, %24, %1 : i256 loc(#loc5) +// CHECK-NEXT: %27 = arith.ori %25, %26 : i1 loc(#loc5) +// CHECK-NEXT: cf.cond_br %27, ^bb1, ^bb2 loc(#loc5) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %29 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%30, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %29 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%30, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %31 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %24, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: return %1 : i256 loc(#loc5) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %31 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %24, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: return %1 : i256 loc(#loc6) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @storage_nested_182() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c21_i256 = arith.constant 21 : i256 loc(#loc) // CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc) @@ -1355,7 +1388,6 @@ contract C { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1365,124 +1397,97 @@ contract C { // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c17_i256 = arith.constant 17 : i256 loc(#loc7) +// CHECK-NEXT: %c17_i256 = arith.constant 17 : i256 loc(#loc8) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc8) -// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc8) -// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %6 = arith.addi %1, %c160_i256 : i256 loc(#loc8) -// CHECK-NEXT: %7 = llvm.inttoptr %c17_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc8) -// CHECK-NEXT: %11 = arith.subi %6, %3 : i256 loc(#loc8) -// CHECK-NEXT: %12 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %13 = arith.addi %1, %c256_i256 : i256 loc(#loc8) -// CHECK-NEXT: %14 = llvm.inttoptr %c18_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %16 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %17 = arith.addi %1, %c192_i256 : i256 loc(#loc8) -// CHECK-NEXT: %18 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %20 = arith.andi %19, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc8) -// CHECK-NEXT: %21 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %22 = arith.addi %1, %c224_i256 : i256 loc(#loc8) -// CHECK-NEXT: %23 = arith.subi %13, %6 : i256 loc(#loc8) -// CHECK-NEXT: %24 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %25 = arith.addi %1, %c288_i256 : i256 loc(#loc8) -// CHECK-NEXT: %26 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %28 = arith.shrui %27, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %29 = arith.andi %27, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %30 = arith.cmpi eq, %29, %c0_i256 : i256 loc(#loc8) -// CHECK-NEXT: %31 = arith.andi %28, %c127_i256 : i256 loc(#loc8) -// CHECK-NEXT: %32 = arith.select %30, %31, %28 : i256 loc(#loc8) -// CHECK-NEXT: %33 = arith.cmpi ult, %32, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %34 = arith.extui %33 : i1 to i256 loc(#loc8) -// CHECK-NEXT: %35 = arith.cmpi eq, %29, %34 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %35, ^bb1, ^bb2 loc(#loc8) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc9) +// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc9) +// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc9) +// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %6 = arith.addi %1, %c160_i256 : i256 loc(#loc9) +// CHECK-NEXT: %7 = llvm.inttoptr %c17_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc9) +// CHECK-NEXT: %11 = arith.subi %6, %3 : i256 loc(#loc9) +// CHECK-NEXT: %12 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %13 = arith.addi %1, %c256_i256 : i256 loc(#loc9) +// CHECK-NEXT: %14 = llvm.inttoptr %c18_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %16 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %17 = arith.addi %1, %c192_i256 : i256 loc(#loc9) +// CHECK-NEXT: %18 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %20 = arith.andi %19, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc9) +// CHECK-NEXT: %21 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %22 = arith.addi %1, %c224_i256 : i256 loc(#loc9) +// CHECK-NEXT: %23 = arith.subi %13, %6 : i256 loc(#loc9) +// CHECK-NEXT: %24 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %25 = arith.addi %1, %c288_i256 : i256 loc(#loc9) +// CHECK-NEXT: %26 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %28 = arith.shrui %27, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: %29 = arith.andi %27, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: %30 = arith.cmpi eq, %29, %c0_i256 : i256 loc(#loc9) +// CHECK-NEXT: %31 = arith.andi %28, %c127_i256 : i256 loc(#loc9) +// CHECK-NEXT: %32 = arith.select %30, %31, %28 : i256 loc(#loc9) +// CHECK-NEXT: %33 = arith.cmpi ult, %32, %c32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %34 = arith.extui %33 : i1 to i256 loc(#loc9) +// CHECK-NEXT: %35 = arith.cmpi eq, %29, %34 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %35, ^bb1, ^bb2 loc(#loc9) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %37 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c34_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: "llvm.intrcall"(%38, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) -// CHECK-NEXT: cf.br ^bb2 loc(#loc8) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %37 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c34_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: "llvm.intrcall"(%38, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) +// CHECK-NEXT: cf.br ^bb2 loc(#loc9) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %39 = arith.andi %27, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %40 = arith.cmpi eq, %39, %c0_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %40, ^bb6, ^bb3 loc(#loc8) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c20_i256, %27, %32, %25) : (i256, i256, i256, i256) -> () loc(#loc9) +// CHECK-NEXT: %39 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %32, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %40 = arith.addi %32, %c31_i256 : i256 loc(#loc9) +// CHECK-NEXT: %41 = arith.andi %40, %c-32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %42 = arith.addi %25, %41 : i256 loc(#loc9) +// CHECK-NEXT: %43 = arith.addi %1, %c128_i256 : i256 loc(#loc9) +// CHECK-NEXT: %44 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %45 = llvm.load %44 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %46 = llvm.inttoptr %43 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %47 = arith.subi %42, %2 : i256 loc(#loc9) +// CHECK-NEXT: %48 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %47, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %49 = arith.subi %42, %1 : i256 loc(#loc9) +// CHECK-NEXT: %50 = arith.addi %49, %c31_i256 : i256 loc(#loc9) +// CHECK-NEXT: %51 = arith.andi %50, %c-32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %52 = arith.addi %1, %51 : i256 loc(#loc9) +// CHECK-NEXT: %53 = arith.cmpi ugt, %52, %c18446744073709551615_i256 : i256 loc(#loc9) +// CHECK-NEXT: %54 = arith.cmpi ult, %52, %1 : i256 loc(#loc9) +// CHECK-NEXT: %55 = arith.ori %53, %54 : i1 loc(#loc9) +// CHECK-NEXT: cf.cond_br %55, ^bb3, ^bb4 loc(#loc9) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c20_i256, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %42 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %43 = "llvm.intrcall"(%42, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc8) -// CHECK-NEXT: ^bb4(%44: i256 loc({{.*}}:80:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %45 = arith.cmpi ult, %44, %32 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %45, ^bb5(%44 : i256), ^bb7 loc(#loc8) -// CHECK-NEXT: ^bb5(%46: i256 loc({{.*}}:80:11)): // pred: ^bb4 -// CHECK-NEXT: %47 = arith.divui %46, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %48 = arith.addi %43, %47 : i256 loc(#loc8) -// CHECK-NEXT: %49 = llvm.inttoptr %48 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %50 = llvm.load %49 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %51 = arith.addi %25, %46 : i256 loc(#loc8) -// CHECK-NEXT: %52 = llvm.inttoptr %51 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %50, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %53 = arith.addi %46, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb4(%53 : i256) loc(#loc8) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %54 = arith.andi %27, %c-256_i256 : i256 loc(#loc8) -// CHECK-NEXT: %55 = llvm.inttoptr %25 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %54, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: cf.br ^bb7 loc(#loc8) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %56 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %32, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %57 = arith.addi %32, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %58 = arith.andi %57, %c-32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %59 = arith.addi %25, %58 : i256 loc(#loc8) -// CHECK-NEXT: %60 = arith.addi %1, %c128_i256 : i256 loc(#loc8) -// CHECK-NEXT: %61 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %62 = llvm.load %61 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %63 = llvm.inttoptr %60 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %62, %63 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %64 = arith.subi %59, %2 : i256 loc(#loc8) -// CHECK-NEXT: %65 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %64, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %66 = arith.subi %59, %1 : i256 loc(#loc8) -// CHECK-NEXT: %67 = arith.addi %66, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %68 = arith.andi %67, %c-32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %69 = arith.addi %1, %68 : i256 loc(#loc8) -// CHECK-NEXT: %70 = arith.cmpi ugt, %69, %c18446744073709551615_i256 : i256 loc(#loc8) -// CHECK-NEXT: %71 = arith.cmpi ult, %69, %1 : i256 loc(#loc8) -// CHECK-NEXT: %72 = arith.ori %70, %71 : i1 loc(#loc8) -// CHECK-NEXT: cf.cond_br %72, ^bb8, ^bb9 loc(#loc8) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %73 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %73 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %74 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c65_i256, %74 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: "llvm.intrcall"(%75, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) -// CHECK-NEXT: cf.br ^bb9 loc(#loc8) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %76 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %69, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: return %1 : i256 loc(#loc9) -// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %57 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c65_i256, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %58 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: "llvm.intrcall"(%58, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) +// CHECK-NEXT: cf.br ^bb4 loc(#loc9) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %59 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %52, %59 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: return %1 : i256 loc(#loc10) +// CHECK-NEXT: } loc(#loc7) // CHECK-NEXT: func.func @storage_flat_171() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c192_i256 = arith.constant 192 : i256 loc(#loc) // CHECK-NEXT: %c16_i256 = arith.constant 16 : i256 loc(#loc) @@ -1494,7 +1499,6 @@ contract C { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1504,110 +1508,83 @@ contract C { // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c14_i256 = arith.constant 14 : i256 loc(#loc11) +// CHECK-NEXT: %c14_i256 = arith.constant 14 : i256 loc(#loc12) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc12) -// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc12) -// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %6 = arith.addi %1, %c160_i256 : i256 loc(#loc12) -// CHECK-NEXT: %7 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc12) -// CHECK-NEXT: %11 = llvm.inttoptr %c15_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %13 = arith.andi %12, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc12) -// CHECK-NEXT: %14 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %13, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %15 = arith.addi %1, %c128_i256 : i256 loc(#loc12) -// CHECK-NEXT: %16 = arith.subi %6, %3 : i256 loc(#loc12) -// CHECK-NEXT: %17 = llvm.inttoptr %15 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %16, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %18 = arith.addi %1, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %19 = llvm.inttoptr %c16_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %21 = arith.shrui %20, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %22 = arith.andi %20, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %23 = arith.cmpi eq, %22, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %24 = arith.andi %21, %c127_i256 : i256 loc(#loc12) -// CHECK-NEXT: %25 = arith.select %23, %24, %21 : i256 loc(#loc12) -// CHECK-NEXT: %26 = arith.cmpi ult, %25, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %27 = arith.extui %26 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %28 = arith.cmpi eq, %22, %27 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %28, ^bb1, ^bb2 loc(#loc12) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc13) +// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc13) +// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %6 = arith.addi %1, %c160_i256 : i256 loc(#loc13) +// CHECK-NEXT: %7 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc13) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) +// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc13) +// CHECK-NEXT: %11 = llvm.inttoptr %c15_i256 : i256 to !llvm.ptr<5> loc(#loc13) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) +// CHECK-NEXT: %13 = arith.andi %12, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc13) +// CHECK-NEXT: %14 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %13, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %15 = arith.addi %1, %c128_i256 : i256 loc(#loc13) +// CHECK-NEXT: %16 = arith.subi %6, %3 : i256 loc(#loc13) +// CHECK-NEXT: %17 = llvm.inttoptr %15 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %16, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %18 = arith.addi %1, %c192_i256 : i256 loc(#loc13) +// CHECK-NEXT: %19 = llvm.inttoptr %c16_i256 : i256 to !llvm.ptr<5> loc(#loc13) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) +// CHECK-NEXT: %21 = arith.shrui %20, %c1_i256 : i256 loc(#loc13) +// CHECK-NEXT: %22 = arith.andi %20, %c1_i256 : i256 loc(#loc13) +// CHECK-NEXT: %23 = arith.cmpi eq, %22, %c0_i256 : i256 loc(#loc13) +// CHECK-NEXT: %24 = arith.andi %21, %c127_i256 : i256 loc(#loc13) +// CHECK-NEXT: %25 = arith.select %23, %24, %21 : i256 loc(#loc13) +// CHECK-NEXT: %26 = arith.cmpi ult, %25, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %27 = arith.extui %26 : i1 to i256 loc(#loc13) +// CHECK-NEXT: %28 = arith.cmpi eq, %22, %27 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %28, ^bb1, ^bb2 loc(#loc13) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %30 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c34_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %31 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%31, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb2 loc(#loc12) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %30 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c34_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %31 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%31, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb2 loc(#loc13) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %32 = arith.andi %20, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %33 = arith.cmpi eq, %32, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %33, ^bb6, ^bb3 loc(#loc12) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c16_i256, %20, %25, %18) : (i256, i256, i256, i256) -> () loc(#loc13) +// CHECK-NEXT: %32 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %25, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %33 = arith.addi %25, %c31_i256 : i256 loc(#loc13) +// CHECK-NEXT: %34 = arith.andi %33, %c-32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %35 = arith.addi %18, %34 : i256 loc(#loc13) +// CHECK-NEXT: %36 = arith.subi %35, %2 : i256 loc(#loc13) +// CHECK-NEXT: %37 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %36, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %38 = arith.subi %35, %1 : i256 loc(#loc13) +// CHECK-NEXT: %39 = arith.addi %38, %c31_i256 : i256 loc(#loc13) +// CHECK-NEXT: %40 = arith.andi %39, %c-32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %41 = arith.addi %1, %40 : i256 loc(#loc13) +// CHECK-NEXT: %42 = arith.cmpi ugt, %41, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: %43 = arith.cmpi ult, %41, %1 : i256 loc(#loc13) +// CHECK-NEXT: %44 = arith.ori %42, %43 : i1 loc(#loc13) +// CHECK-NEXT: cf.cond_br %44, ^bb3, ^bb4 loc(#loc13) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c16_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %36 = "llvm.intrcall"(%35, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb4(%37: i256 loc({{.*}}:76:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %38 = arith.cmpi ult, %37, %25 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %38, ^bb5(%37 : i256), ^bb7 loc(#loc12) -// CHECK-NEXT: ^bb5(%39: i256 loc({{.*}}:76:11)): // pred: ^bb4 -// CHECK-NEXT: %40 = arith.divui %39, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %41 = arith.addi %36, %40 : i256 loc(#loc12) -// CHECK-NEXT: %42 = llvm.inttoptr %41 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %43 = llvm.load %42 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %44 = arith.addi %18, %39 : i256 loc(#loc12) -// CHECK-NEXT: %45 = llvm.inttoptr %44 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %43, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %46 = arith.addi %39, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb4(%46 : i256) loc(#loc12) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %47 = arith.andi %20, %c-256_i256 : i256 loc(#loc12) -// CHECK-NEXT: %48 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %47, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: cf.br ^bb7 loc(#loc12) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %49 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %25, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %50 = arith.addi %25, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %51 = arith.andi %50, %c-32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %52 = arith.addi %18, %51 : i256 loc(#loc12) -// CHECK-NEXT: %53 = arith.subi %52, %2 : i256 loc(#loc12) -// CHECK-NEXT: %54 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %53, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %55 = arith.subi %52, %1 : i256 loc(#loc12) -// CHECK-NEXT: %56 = arith.addi %55, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %57 = arith.andi %56, %c-32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %58 = arith.addi %1, %57 : i256 loc(#loc12) -// CHECK-NEXT: %59 = arith.cmpi ugt, %58, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: %60 = arith.cmpi ult, %58, %1 : i256 loc(#loc12) -// CHECK-NEXT: %61 = arith.ori %59, %60 : i1 loc(#loc12) -// CHECK-NEXT: cf.cond_br %61, ^bb8, ^bb9 loc(#loc12) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %62 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %62 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %63 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %63 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %64 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%64, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb9 loc(#loc12) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %65 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %58, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: return %1 : i256 loc(#loc13) -// CHECK-NEXT: } loc(#loc10) +// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %46 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c65_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%47, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb4 loc(#loc13) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %48 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %41, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: return %1 : i256 loc(#loc14) +// CHECK-NEXT: } loc(#loc11) // CHECK-NEXT: func.func @storage_big_nested_160() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c13_i256 = arith.constant 13 : i256 loc(#loc) // CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc) @@ -1628,7 +1605,6 @@ contract C { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1638,167 +1614,140 @@ contract C { // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc15) +// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc16) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc16) -// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc16) -// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %6 = arith.addi %1, %c160_i256 : i256 loc(#loc16) -// CHECK-NEXT: %7 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc16) -// CHECK-NEXT: %11 = arith.subi %6, %3 : i256 loc(#loc16) -// CHECK-NEXT: %12 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %13 = arith.addi %1, %c352_i256 : i256 loc(#loc16) -// CHECK-NEXT: %14 = llvm.inttoptr %c7_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %16 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %17 = arith.addi %1, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %18 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %20 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %19, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %21 = arith.addi %1, %c224_i256 : i256 loc(#loc16) -// CHECK-NEXT: %22 = arith.subi %13, %6 : i256 loc(#loc16) -// CHECK-NEXT: %23 = llvm.inttoptr %21 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %22, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %24 = arith.addi %1, %c384_i256 : i256 loc(#loc16) -// CHECK-NEXT: %25 = llvm.inttoptr %c9_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %27 = arith.shrui %26, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %28 = arith.andi %26, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %29 = arith.cmpi eq, %28, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: %30 = arith.andi %27, %c127_i256 : i256 loc(#loc16) -// CHECK-NEXT: %31 = arith.select %29, %30, %27 : i256 loc(#loc16) -// CHECK-NEXT: %32 = arith.cmpi ult, %31, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %33 = arith.extui %32 : i1 to i256 loc(#loc16) -// CHECK-NEXT: %34 = arith.cmpi eq, %28, %33 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %34, ^bb1, ^bb2 loc(#loc16) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc17) +// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc17) +// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc17) +// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %6 = arith.addi %1, %c160_i256 : i256 loc(#loc17) +// CHECK-NEXT: %7 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc17) +// CHECK-NEXT: %11 = arith.subi %6, %3 : i256 loc(#loc17) +// CHECK-NEXT: %12 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %13 = arith.addi %1, %c352_i256 : i256 loc(#loc17) +// CHECK-NEXT: %14 = llvm.inttoptr %c7_i256 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %16 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %17 = arith.addi %1, %c192_i256 : i256 loc(#loc17) +// CHECK-NEXT: %18 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %20 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %19, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %21 = arith.addi %1, %c224_i256 : i256 loc(#loc17) +// CHECK-NEXT: %22 = arith.subi %13, %6 : i256 loc(#loc17) +// CHECK-NEXT: %23 = llvm.inttoptr %21 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %22, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %24 = arith.addi %1, %c384_i256 : i256 loc(#loc17) +// CHECK-NEXT: %25 = llvm.inttoptr %c9_i256 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %27 = arith.shrui %26, %c1_i256 : i256 loc(#loc17) +// CHECK-NEXT: %28 = arith.andi %26, %c1_i256 : i256 loc(#loc17) +// CHECK-NEXT: %29 = arith.cmpi eq, %28, %c0_i256 : i256 loc(#loc17) +// CHECK-NEXT: %30 = arith.andi %27, %c127_i256 : i256 loc(#loc17) +// CHECK-NEXT: %31 = arith.select %29, %30, %27 : i256 loc(#loc17) +// CHECK-NEXT: %32 = arith.cmpi ult, %31, %c32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %33 = arith.extui %32 : i1 to i256 loc(#loc17) +// CHECK-NEXT: %34 = arith.cmpi eq, %28, %33 : i256 loc(#loc17) +// CHECK-NEXT: cf.cond_br %34, ^bb1, ^bb2 loc(#loc17) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %36 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c34_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%37, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb2 loc(#loc16) +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %36 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c34_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: "llvm.intrcall"(%37, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) +// CHECK-NEXT: cf.br ^bb2 loc(#loc17) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %38 = arith.andi %26, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %39 = arith.cmpi eq, %38, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %39, ^bb6, ^bb3 loc(#loc16) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c9_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb4(%43: i256 loc({{.*}}:72:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %44 = arith.cmpi ult, %43, %31 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %44, ^bb5(%43 : i256), ^bb7 loc(#loc16) -// CHECK-NEXT: ^bb5(%45: i256 loc({{.*}}:72:11)): // pred: ^bb4 -// CHECK-NEXT: %46 = arith.divui %45, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %47 = arith.addi %42, %46 : i256 loc(#loc16) -// CHECK-NEXT: %48 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %50 = arith.addi %24, %45 : i256 loc(#loc16) -// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %49, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %52 = arith.addi %45, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb4(%52 : i256) loc(#loc16) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %53 = arith.andi %26, %c-256_i256 : i256 loc(#loc16) -// CHECK-NEXT: %54 = llvm.inttoptr %24 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %53, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: cf.br ^bb7 loc(#loc16) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %55 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %31, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %56 = arith.addi %31, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %57 = arith.andi %56, %c-32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %58 = arith.addi %24, %57 : i256 loc(#loc16) -// CHECK-NEXT: %59 = arith.addi %1, %c256_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb8(%c0_i256, %59, %c10_i256 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb8(%60: i256 loc({{.*}}:72:11), %61: i256 loc({{.*}}:72:11), %62: i256 loc({{.*}}:72:11)): // 2 preds: ^bb7, ^bb9 -// CHECK-NEXT: %63 = arith.cmpi ult, %60, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %63, ^bb9(%60, %61, %62 : i256, i256, i256), ^bb10 loc(#loc16) -// CHECK-NEXT: ^bb9(%64: i256 loc({{.*}}:72:11), %65: i256 loc({{.*}}:72:11), %66: i256 loc({{.*}}:72:11)): // pred: ^bb8 -// CHECK-NEXT: %67 = llvm.inttoptr %66 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %68 = llvm.load %67 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %69 = llvm.inttoptr %65 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %68, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %70 = arith.addi %65, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %71 = arith.addi %66, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %72 = arith.addi %64, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb8(%72, %70, %71 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb10: // pred: ^bb8 -// CHECK-NEXT: %73 = arith.addi %1, %c320_i256 : i256 loc(#loc16) -// CHECK-NEXT: %74 = arith.subi %58, %6 : i256 loc(#loc16) -// CHECK-NEXT: %75 = llvm.inttoptr %73 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %76 = llvm.inttoptr %c12_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %77 = llvm.load %76 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %78 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c12_i256, %78 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %79 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %80 = "llvm.intrcall"(%79, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %81 = llvm.inttoptr %58 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %77, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %82 = arith.addi %58, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %83 = arith.muli %77, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %84 = arith.addi %82, %83 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb11(%c0_i256, %82, %80 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb11(%85: i256 loc({{.*}}:72:11), %86: i256 loc({{.*}}:72:11), %87: i256 loc({{.*}}:72:11)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %88 = arith.cmpi ult, %85, %77 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %88, ^bb12(%85, %86, %87 : i256, i256, i256), ^bb13 loc(#loc16) -// CHECK-NEXT: ^bb12(%89: i256 loc({{.*}}:72:11), %90: i256 loc({{.*}}:72:11), %91: i256 loc({{.*}}:72:11)): // pred: ^bb11 -// CHECK-NEXT: %92 = llvm.inttoptr %91 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %93 = llvm.load %92 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %94 = llvm.inttoptr %90 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %93, %94 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %95 = arith.addi %90, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %96 = arith.addi %91, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %97 = arith.addi %89, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb11(%97, %95, %96 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %98 = arith.addi %1, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %99 = llvm.inttoptr %c13_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %100 = llvm.load %99 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %101 = llvm.inttoptr %98 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %100, %101 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %102 = arith.subi %84, %2 : i256 loc(#loc16) -// CHECK-NEXT: %103 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %102, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %104 = arith.subi %84, %1 : i256 loc(#loc16) -// CHECK-NEXT: %105 = arith.addi %104, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %106 = arith.andi %105, %c-32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %107 = arith.addi %1, %106 : i256 loc(#loc16) -// CHECK-NEXT: %108 = arith.cmpi ugt, %107, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: %109 = arith.cmpi ult, %107, %1 : i256 loc(#loc16) -// CHECK-NEXT: %110 = arith.ori %108, %109 : i1 loc(#loc16) -// CHECK-NEXT: cf.cond_br %110, ^bb14, ^bb15 loc(#loc16) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %111 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %112 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %112 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %113 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%113, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb15 loc(#loc16) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %114 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %107, %114 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: return %1 : i256 loc(#loc17) -// CHECK-NEXT: } loc(#loc14) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c9_i256, %26, %31, %24) : (i256, i256, i256, i256) -> () loc(#loc17) +// CHECK-NEXT: %38 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %31, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %39 = arith.addi %31, %c31_i256 : i256 loc(#loc17) +// CHECK-NEXT: %40 = arith.andi %39, %c-32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %41 = arith.addi %24, %40 : i256 loc(#loc17) +// CHECK-NEXT: %42 = arith.addi %1, %c256_i256 : i256 loc(#loc17) +// CHECK-NEXT: cf.br ^bb3(%c0_i256, %42, %c10_i256 : i256, i256, i256) loc(#loc17) +// CHECK-NEXT: ^bb3(%43: i256 loc({{.*}}:72:11), %44: i256 loc({{.*}}:72:11), %45: i256 loc({{.*}}:72:11)): // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: %46 = arith.cmpi ult, %43, %c2_i256 : i256 loc(#loc17) +// CHECK-NEXT: cf.cond_br %46, ^bb4(%43, %44, %45 : i256, i256, i256), ^bb5 loc(#loc17) +// CHECK-NEXT: ^bb4(%47: i256 loc({{.*}}:72:11), %48: i256 loc({{.*}}:72:11), %49: i256 loc({{.*}}:72:11)): // pred: ^bb3 +// CHECK-NEXT: %50 = llvm.inttoptr %49 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %51 = llvm.load %50 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %52 = llvm.inttoptr %48 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %53 = arith.addi %48, %c32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %54 = arith.addi %49, %c1_i256 : i256 loc(#loc17) +// CHECK-NEXT: %55 = arith.addi %47, %c1_i256 : i256 loc(#loc17) +// CHECK-NEXT: cf.br ^bb3(%55, %53, %54 : i256, i256, i256) loc(#loc17) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %56 = arith.addi %1, %c320_i256 : i256 loc(#loc17) +// CHECK-NEXT: %57 = arith.subi %41, %6 : i256 loc(#loc17) +// CHECK-NEXT: %58 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %57, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %59 = llvm.inttoptr %c12_i256 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %60 = llvm.load %59 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %61 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c12_i256, %61 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %62 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %63 = "llvm.intrcall"(%62, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc17) +// CHECK-NEXT: %64 = llvm.inttoptr %41 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %60, %64 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %65 = arith.addi %41, %c32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %66 = arith.muli %60, %c32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %67 = arith.addi %65, %66 : i256 loc(#loc17) +// CHECK-NEXT: cf.br ^bb6(%c0_i256, %65, %63 : i256, i256, i256) loc(#loc17) +// CHECK-NEXT: ^bb6(%68: i256 loc({{.*}}:72:11), %69: i256 loc({{.*}}:72:11), %70: i256 loc({{.*}}:72:11)): // 2 preds: ^bb5, ^bb7 +// CHECK-NEXT: %71 = arith.cmpi ult, %68, %60 : i256 loc(#loc17) +// CHECK-NEXT: cf.cond_br %71, ^bb7(%68, %69, %70 : i256, i256, i256), ^bb8 loc(#loc17) +// CHECK-NEXT: ^bb7(%72: i256 loc({{.*}}:72:11), %73: i256 loc({{.*}}:72:11), %74: i256 loc({{.*}}:72:11)): // pred: ^bb6 +// CHECK-NEXT: %75 = llvm.inttoptr %74 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %76 = llvm.load %75 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %77 = llvm.inttoptr %73 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %76, %77 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %78 = arith.addi %73, %c32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %79 = arith.addi %74, %c1_i256 : i256 loc(#loc17) +// CHECK-NEXT: %80 = arith.addi %72, %c1_i256 : i256 loc(#loc17) +// CHECK-NEXT: cf.br ^bb6(%80, %78, %79 : i256, i256, i256) loc(#loc17) +// CHECK-NEXT: ^bb8: // pred: ^bb6 +// CHECK-NEXT: %81 = arith.addi %1, %c128_i256 : i256 loc(#loc17) +// CHECK-NEXT: %82 = llvm.inttoptr %c13_i256 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %83 = llvm.load %82 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) +// CHECK-NEXT: %84 = llvm.inttoptr %81 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %83, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %85 = arith.subi %67, %2 : i256 loc(#loc17) +// CHECK-NEXT: %86 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %85, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %87 = arith.subi %67, %1 : i256 loc(#loc17) +// CHECK-NEXT: %88 = arith.addi %87, %c31_i256 : i256 loc(#loc17) +// CHECK-NEXT: %89 = arith.andi %88, %c-32_i256 : i256 loc(#loc17) +// CHECK-NEXT: %90 = arith.addi %1, %89 : i256 loc(#loc17) +// CHECK-NEXT: %91 = arith.cmpi ugt, %90, %c18446744073709551615_i256 : i256 loc(#loc17) +// CHECK-NEXT: %92 = arith.cmpi ult, %90, %1 : i256 loc(#loc17) +// CHECK-NEXT: %93 = arith.ori %91, %92 : i1 loc(#loc17) +// CHECK-NEXT: cf.cond_br %93, ^bb9, ^bb10 loc(#loc17) +// CHECK-NEXT: ^bb9: // pred: ^bb8 +// CHECK-NEXT: %94 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %94 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %95 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c65_i256, %95 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %96 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: "llvm.intrcall"(%96, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) +// CHECK-NEXT: cf.br ^bb10 loc(#loc17) +// CHECK-NEXT: ^bb10: // 2 preds: ^bb8, ^bb9 +// CHECK-NEXT: %97 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %90, %97 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: return %1 : i256 loc(#loc18) +// CHECK-NEXT: } loc(#loc15) // CHECK-NEXT: func.func @storage_big_149() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc) // CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) @@ -1812,7 +1761,6 @@ contract C { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1823,151 +1771,124 @@ contract C { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc19) -// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc19) -// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc19) -// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %6 = arith.addi %1, %c256_i256 : i256 loc(#loc19) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc19) -// CHECK-NEXT: %11 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %13 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %12, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %14 = arith.addi %1, %c128_i256 : i256 loc(#loc19) -// CHECK-NEXT: %15 = arith.subi %6, %3 : i256 loc(#loc19) -// CHECK-NEXT: %16 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %17 = arith.addi %1, %c288_i256 : i256 loc(#loc19) -// CHECK-NEXT: %18 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %20 = arith.shrui %19, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %21 = arith.andi %19, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %22 = arith.cmpi eq, %21, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: %23 = arith.andi %20, %c127_i256 : i256 loc(#loc19) -// CHECK-NEXT: %24 = arith.select %22, %23, %20 : i256 loc(#loc19) -// CHECK-NEXT: %25 = arith.cmpi ult, %24, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %26 = arith.extui %25 : i1 to i256 loc(#loc19) -// CHECK-NEXT: %27 = arith.cmpi eq, %21, %26 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %27, ^bb1, ^bb2 loc(#loc19) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %3 = arith.addi %1, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.subi %3, %2 : i256 loc(#loc2) +// CHECK-NEXT: %5 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %4, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %1, %c256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %9 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %10 = arith.addi %1, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %12, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %1, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %15 = arith.subi %6, %3 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %17 = arith.addi %1, %c288_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.shrui %19, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.andi %19, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.cmpi eq, %21, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.andi %20, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %24 = arith.select %22, %23, %20 : i256 loc(#loc2) +// CHECK-NEXT: %25 = arith.cmpi ult, %24, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %26 = arith.extui %25 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %27 = arith.cmpi eq, %21, %26 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %27, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %29 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c34_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%30, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb2 loc(#loc19) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%30, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %31 = arith.andi %19, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %32 = arith.cmpi eq, %31, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %32, ^bb6, ^bb3 loc(#loc19) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c2_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %35 = "llvm.intrcall"(%34, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb4(%36: i256 loc({{.*}}:68:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %37 = arith.cmpi ult, %36, %24 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %37, ^bb5(%36 : i256), ^bb7 loc(#loc19) -// CHECK-NEXT: ^bb5(%38: i256 loc({{.*}}:68:11)): // pred: ^bb4 -// CHECK-NEXT: %39 = arith.divui %38, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %40 = arith.addi %35, %39 : i256 loc(#loc19) -// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %42 = llvm.load %41 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %43 = arith.addi %17, %38 : i256 loc(#loc19) -// CHECK-NEXT: %44 = llvm.inttoptr %43 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %42, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %45 = arith.addi %38, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb4(%45 : i256) loc(#loc19) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %46 = arith.andi %19, %c-256_i256 : i256 loc(#loc19) -// CHECK-NEXT: %47 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %46, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: cf.br ^bb7 loc(#loc19) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %48 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %24, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %49 = arith.addi %24, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %50 = arith.andi %49, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %51 = arith.addi %17, %50 : i256 loc(#loc19) -// CHECK-NEXT: %52 = arith.addi %1, %c160_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb8(%c0_i256, %52, %c3_i256 : i256, i256, i256) loc(#loc19) -// CHECK-NEXT: ^bb8(%53: i256 loc({{.*}}:68:11), %54: i256 loc({{.*}}:68:11), %55: i256 loc({{.*}}:68:11)): // 2 preds: ^bb7, ^bb9 -// CHECK-NEXT: %56 = arith.cmpi ult, %53, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %56, ^bb9(%53, %54, %55 : i256, i256, i256), ^bb10 loc(#loc19) -// CHECK-NEXT: ^bb9(%57: i256 loc({{.*}}:68:11), %58: i256 loc({{.*}}:68:11), %59: i256 loc({{.*}}:68:11)): // pred: ^bb8 -// CHECK-NEXT: %60 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %62 = llvm.inttoptr %58 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %61, %62 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %63 = arith.addi %58, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %64 = arith.addi %59, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %65 = arith.addi %57, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb8(%65, %63, %64 : i256, i256, i256) loc(#loc19) -// CHECK-NEXT: ^bb10: // pred: ^bb8 -// CHECK-NEXT: %66 = arith.addi %1, %c224_i256 : i256 loc(#loc19) -// CHECK-NEXT: %67 = arith.subi %51, %3 : i256 loc(#loc19) -// CHECK-NEXT: %68 = llvm.inttoptr %66 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %67, %68 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %69 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %70 = llvm.load %69 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %71 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c5_i256, %71 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %72 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %73 = "llvm.intrcall"(%72, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %74 = llvm.inttoptr %51 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %70, %74 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %75 = arith.addi %51, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %76 = arith.muli %70, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %77 = arith.addi %75, %76 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb11(%c0_i256, %75, %73 : i256, i256, i256) loc(#loc19) -// CHECK-NEXT: ^bb11(%78: i256 loc({{.*}}:68:11), %79: i256 loc({{.*}}:68:11), %80: i256 loc({{.*}}:68:11)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %81 = arith.cmpi ult, %78, %70 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %81, ^bb12(%78, %79, %80 : i256, i256, i256), ^bb13 loc(#loc19) -// CHECK-NEXT: ^bb12(%82: i256 loc({{.*}}:68:11), %83: i256 loc({{.*}}:68:11), %84: i256 loc({{.*}}:68:11)): // pred: ^bb11 -// CHECK-NEXT: %85 = llvm.inttoptr %84 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %86 = llvm.load %85 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %87 = llvm.inttoptr %83 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %86, %87 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %88 = arith.addi %83, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %89 = arith.addi %84, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %90 = arith.addi %82, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb11(%90, %88, %89 : i256, i256, i256) loc(#loc19) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %91 = arith.subi %77, %2 : i256 loc(#loc19) -// CHECK-NEXT: %92 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %91, %92 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %93 = arith.subi %77, %1 : i256 loc(#loc19) -// CHECK-NEXT: %94 = arith.addi %93, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %95 = arith.andi %94, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %96 = arith.addi %1, %95 : i256 loc(#loc19) -// CHECK-NEXT: %97 = arith.cmpi ugt, %96, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: %98 = arith.cmpi ult, %96, %1 : i256 loc(#loc19) -// CHECK-NEXT: %99 = arith.ori %97, %98 : i1 loc(#loc19) -// CHECK-NEXT: cf.cond_br %99, ^bb14, ^bb15 loc(#loc19) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %100 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %100 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %101 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %101 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%102, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb15 loc(#loc19) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %103 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %96, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c2_i256, %19, %24, %17) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %31 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %24, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %32 = arith.addi %24, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %33 = arith.andi %32, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %34 = arith.addi %17, %33 : i256 loc(#loc2) +// CHECK-NEXT: %35 = arith.addi %1, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb3(%c0_i256, %35, %c3_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb3(%36: i256 loc({{.*}}:68:11), %37: i256 loc({{.*}}:68:11), %38: i256 loc({{.*}}:68:11)): // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: %39 = arith.cmpi ult, %36, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %39, ^bb4(%36, %37, %38 : i256, i256, i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb4(%40: i256 loc({{.*}}:68:11), %41: i256 loc({{.*}}:68:11), %42: i256 loc({{.*}}:68:11)): // pred: ^bb3 +// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %44 = llvm.load %43 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %45 = llvm.inttoptr %41 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %46 = arith.addi %41, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %47 = arith.addi %42, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %48 = arith.addi %40, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb3(%48, %46, %47 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %49 = arith.addi %1, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %50 = arith.subi %34, %3 : i256 loc(#loc2) +// CHECK-NEXT: %51 = llvm.inttoptr %49 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %50, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %52 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %53 = llvm.load %52 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c5_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %56 = "llvm.intrcall"(%55, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %57 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %53, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %58 = arith.addi %34, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %59 = arith.muli %53, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %60 = arith.addi %58, %59 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb6(%c0_i256, %58, %56 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb6(%61: i256 loc({{.*}}:68:11), %62: i256 loc({{.*}}:68:11), %63: i256 loc({{.*}}:68:11)): // 2 preds: ^bb5, ^bb7 +// CHECK-NEXT: %64 = arith.cmpi ult, %61, %53 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %64, ^bb7(%61, %62, %63 : i256, i256, i256), ^bb8 loc(#loc2) +// CHECK-NEXT: ^bb7(%65: i256 loc({{.*}}:68:11), %66: i256 loc({{.*}}:68:11), %67: i256 loc({{.*}}:68:11)): // pred: ^bb6 +// CHECK-NEXT: %68 = llvm.inttoptr %67 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %69 = llvm.load %68 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %70 = llvm.inttoptr %66 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %69, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %71 = arith.addi %66, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %72 = arith.addi %67, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %73 = arith.addi %65, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb6(%73, %71, %72 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb8: // pred: ^bb6 +// CHECK-NEXT: %74 = arith.subi %60, %2 : i256 loc(#loc2) +// CHECK-NEXT: %75 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %76 = arith.subi %60, %1 : i256 loc(#loc2) +// CHECK-NEXT: %77 = arith.addi %76, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %78 = arith.andi %77, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %79 = arith.addi %1, %78 : i256 loc(#loc2) +// CHECK-NEXT: %80 = arith.cmpi ugt, %79, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %81 = arith.cmpi ult, %79, %1 : i256 loc(#loc2) +// CHECK-NEXT: %82 = arith.ori %80, %81 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %82, ^bb9, ^bb10 loc(#loc2) +// CHECK-NEXT: ^bb9: // pred: ^bb8 +// CHECK-NEXT: %83 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %83 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %84 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %85 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%85, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb10 loc(#loc2) +// CHECK-NEXT: ^bb10: // 2 preds: ^bb8, ^bb9 +// CHECK-NEXT: %86 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %79, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) // CHECK-NEXT: return %1 : i256 loc(#loc20) -// CHECK-NEXT: } loc(#loc18) +// CHECK-NEXT: } loc(#loc19) // CHECK-NEXT: func.func @enc_struct_138(%arg0: i256 loc({{.*}}:63:22)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c160_i256 = arith.constant 160 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) @@ -2716,20 +2637,22 @@ contract C { // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) -// CHECK-NEXT: #loc2 = loc({{.*}}:83:2) -// CHECK-NEXT: #loc3 = loc({{.*}}:45:2) -// CHECK-NEXT: #loc4 = loc({{.*}}:84:11) -// CHECK-NEXT: #loc5 = loc({{.*}}:84:4) -// CHECK-NEXT: #loc6 = loc({{.*}}:79:2) -// CHECK-NEXT: #loc7 = loc({{.*}}:44:2) -// CHECK-NEXT: #loc9 = loc({{.*}}:80:4) -// CHECK-NEXT: #loc10 = loc({{.*}}:75:2) -// CHECK-NEXT: #loc11 = loc({{.*}}:43:2) -// CHECK-NEXT: #loc13 = loc({{.*}}:76:4) -// CHECK-NEXT: #loc14 = loc({{.*}}:71:2) -// CHECK-NEXT: #loc15 = loc({{.*}}:42:2) -// CHECK-NEXT: #loc17 = loc({{.*}}:72:4) -// CHECK-NEXT: #loc18 = loc({{.*}}:67:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:83:2) +// CHECK-NEXT: #loc4 = loc({{.*}}:45:2) +// CHECK-NEXT: #loc5 = loc({{.*}}:84:11) +// CHECK-NEXT: #loc6 = loc({{.*}}:84:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:79:2) +// CHECK-NEXT: #loc8 = loc({{.*}}:44:2) +// CHECK-NEXT: #loc9 = loc({{.*}}:80:11) +// CHECK-NEXT: #loc10 = loc({{.*}}:80:4) +// CHECK-NEXT: #loc11 = loc({{.*}}:75:2) +// CHECK-NEXT: #loc12 = loc({{.*}}:43:2) +// CHECK-NEXT: #loc13 = loc({{.*}}:76:11) +// CHECK-NEXT: #loc14 = loc({{.*}}:76:4) +// CHECK-NEXT: #loc15 = loc({{.*}}:71:2) +// CHECK-NEXT: #loc16 = loc({{.*}}:42:2) +// CHECK-NEXT: #loc18 = loc({{.*}}:72:4) +// CHECK-NEXT: #loc19 = loc({{.*}}:67:2) // CHECK-NEXT: #loc20 = loc({{.*}}:68:4) // CHECK-NEXT: #loc21 = loc({{.*}}:63:2) // CHECK-NEXT: #loc23 = loc({{.*}}:64:22) diff --git a/test/lit/mlirCodegen/EVM/array-copy.sol b/test/lit/mlirCodegen/EVM/array-copy.sol index d66080267..6b1e90965 100644 --- a/test/lit/mlirCodegen/EVM/array-copy.sol +++ b/test/lit/mlirCodegen/EVM/array-copy.sol @@ -1383,6 +1383,181 @@ contract ArrayCopy { // CHECK-NEXT: call @".unreachable"() : () -> () // CHECK-NEXT: llvm.unreachable // CHECK-NEXT: } +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256, %arg1: i256, %arg2: i256, %arg3: i256) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) +// CHECK-NEXT: ^bb2(%5: i256): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 +// CHECK-NEXT: ^bb3(%7: i256): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 +// CHECK-NEXT: cf.br ^bb2(%14 : i256) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> +// CHECK-NEXT: cf.br ^bb5 +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return +// CHECK-NEXT: } +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256, %arg1: i256, %arg2: i256) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 +// CHECK-NEXT: cf.br ^bb2(%8 : i256) +// CHECK-NEXT: ^bb2(%12: i256): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 +// CHECK-NEXT: ^bb3(%14: i256): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 +// CHECK-NEXT: cf.br ^bb2(%16 : i256) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return +// CHECK-NEXT: } +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256, %arg1: i256) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () +// CHECK-NEXT: call @".unreachable"() : () -> () +// CHECK-NEXT: cf.br ^bb2 +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> +// CHECK-NEXT: cf.br ^bb12 +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> +// CHECK-NEXT: cf.br ^bb12 +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) +// CHECK-NEXT: ^bb7(%33: i256): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 +// CHECK-NEXT: ^bb8(%35: i256): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 +// CHECK-NEXT: cf.br ^bb7(%42 : i256) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> +// CHECK-NEXT: cf.br ^bb11 +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> +// CHECK-NEXT: cf.br ^bb12 +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return +// CHECK-NEXT: } // CHECK-NEXT: func.func @cd2m_str_195(%arg0: !llvm.struct<(i256, i256)>) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 @@ -1434,7 +1609,6 @@ contract ArrayCopy { // CHECK-NEXT: } // CHECK-NEXT: func.func @s2m_str_185() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 @@ -1498,170 +1672,16 @@ contract ArrayCopy { // CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 // CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> // CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: llvm.store %c11_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) -// CHECK-NEXT: ^bb6(%35: i256): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 -// CHECK-NEXT: ^bb7(%37: i256): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 -// CHECK-NEXT: cf.br ^bb6(%44 : i256) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: cf.br ^bb9 -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c11_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () // CHECK-NEXT: return %16 : i256 // CHECK-NEXT: } // CHECK-NEXT: func.func @m2s_str_177(%arg0: i256) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 -// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 -// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 -// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 -// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 // CHECK-NEXT: %c11_i256 = arith.constant 11 : i256 // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 // CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr // CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr // CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 -// CHECK-NEXT: %2 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 -// CHECK-NEXT: %4 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 -// CHECK-NEXT: %6 = arith.shrui %5, %c1_i256 : i256 -// CHECK-NEXT: %7 = arith.andi %5, %c1_i256 : i256 -// CHECK-NEXT: %8 = arith.cmpi eq, %7, %c0_i256 : i256 -// CHECK-NEXT: %9 = arith.andi %6, %c127_i256 : i256 -// CHECK-NEXT: %10 = arith.select %8, %9, %6 : i256 -// CHECK-NEXT: %11 = arith.cmpi ult, %10, %c32_i256 : i256 -// CHECK-NEXT: %12 = arith.extui %11 : i1 to i256 -// CHECK-NEXT: %13 = arith.cmpi eq, %7, %12 : i256 -// CHECK-NEXT: cf.cond_br %13, ^bb1, ^bb2 -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: llvm.store %c34_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () -// CHECK-NEXT: call @".unreachable"() : () -> () -// CHECK-NEXT: cf.br ^bb2 -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %17 = arith.cmpi ugt, %10, %c31_i256 : i256 -// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb6 -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: llvm.store %c11_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 -// CHECK-NEXT: %21 = arith.addi %3, %c31_i256 : i256 -// CHECK-NEXT: %22 = arith.divui %21, %c32_i256 : i256 -// CHECK-NEXT: %23 = arith.addi %20, %22 : i256 -// CHECK-NEXT: %24 = arith.cmpi ult, %3, %c32_i256 : i256 -// CHECK-NEXT: %25 = arith.select %24, %20, %23 : i256 -// CHECK-NEXT: %26 = arith.addi %10, %c31_i256 : i256 -// CHECK-NEXT: %27 = arith.divui %26, %c32_i256 : i256 -// CHECK-NEXT: %28 = arith.addi %20, %27 : i256 -// CHECK-NEXT: cf.br ^bb4(%25 : i256) -// CHECK-NEXT: ^bb4(%29: i256): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %30 = arith.cmpi ult, %29, %28 : i256 -// CHECK-NEXT: cf.cond_br %30, ^bb5(%29 : i256), ^bb6 -// CHECK-NEXT: ^bb5(%31: i256): // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %31 : i256 to !llvm.ptr<5> -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> -// CHECK-NEXT: %33 = arith.addi %31, %c1_i256 : i256 -// CHECK-NEXT: cf.br ^bb4(%33 : i256) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %34 = arith.cmpi ugt, %3, %c31_i256 : i256 -// CHECK-NEXT: cf.cond_br %34, ^bb10, ^bb7 -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %35 = arith.cmpi ne, %3, %c0_i256 : i256 -// CHECK-NEXT: cf.cond_br %35, ^bb9, ^bb8 -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %36 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> -// CHECK-NEXT: llvm.store %c0_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> -// CHECK-NEXT: cf.br ^bb16 -// CHECK-NEXT: ^bb9: // pred: ^bb7 -// CHECK-NEXT: %37 = arith.addi %1, %c32_i256 : i256 -// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> -// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 -// CHECK-NEXT: %40 = arith.muli %3, %c8_i256 : i256 -// CHECK-NEXT: %41 = arith.subi %c256_i256, %40 : i256 -// CHECK-NEXT: %42 = arith.shli %c-1_i256, %41 : i256 -// CHECK-NEXT: %43 = arith.andi %39, %42 : i256 -// CHECK-NEXT: %44 = arith.muli %3, %c2_i256 : i256 -// CHECK-NEXT: %45 = arith.ori %43, %44 : i256 -// CHECK-NEXT: %46 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<5> -// CHECK-NEXT: cf.br ^bb16 -// CHECK-NEXT: ^bb10: // pred: ^bb6 -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: llvm.store %c11_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> -// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> -// CHECK-NEXT: %49 = "llvm.intrcall"(%48, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 -// CHECK-NEXT: %50 = arith.addi %1, %c32_i256 : i256 -// CHECK-NEXT: %51 = arith.andi %3, %c-32_i256 : i256 -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) -// CHECK-NEXT: ^bb11(%52: i256): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %53 = arith.cmpi ult, %52, %51 : i256 -// CHECK-NEXT: cf.cond_br %53, ^bb12(%52 : i256), ^bb13 -// CHECK-NEXT: ^bb12(%54: i256): // pred: ^bb11 -// CHECK-NEXT: %55 = arith.divui %54, %c32_i256 : i256 -// CHECK-NEXT: %56 = arith.addi %50, %54 : i256 -// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> -// CHECK-NEXT: %58 = llvm.load %57 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 -// CHECK-NEXT: %59 = arith.addi %49, %55 : i256 -// CHECK-NEXT: %60 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> -// CHECK-NEXT: llvm.store %58, %60 {alignment = 1 : i64} : i256, !llvm.ptr<5> -// CHECK-NEXT: %61 = arith.addi %54, %c32_i256 : i256 -// CHECK-NEXT: cf.br ^bb11(%61 : i256) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %62 = arith.cmpi ult, %51, %3 : i256 -// CHECK-NEXT: cf.cond_br %62, ^bb14, ^bb15 -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %63 = arith.andi %3, %c31_i256 : i256 -// CHECK-NEXT: %64 = arith.divui %51, %c32_i256 : i256 -// CHECK-NEXT: %65 = arith.addi %50, %51 : i256 -// CHECK-NEXT: %66 = llvm.inttoptr %65 : i256 to !llvm.ptr<1> -// CHECK-NEXT: %67 = llvm.load %66 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 -// CHECK-NEXT: %68 = arith.muli %63, %c8_i256 : i256 -// CHECK-NEXT: %69 = arith.subi %c256_i256, %68 : i256 -// CHECK-NEXT: %70 = arith.shli %c-1_i256, %69 : i256 -// CHECK-NEXT: %71 = arith.andi %67, %70 : i256 -// CHECK-NEXT: %72 = arith.addi %49, %64 : i256 -// CHECK-NEXT: %73 = llvm.inttoptr %72 : i256 to !llvm.ptr<5> -// CHECK-NEXT: llvm.store %71, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> -// CHECK-NEXT: cf.br ^bb15 -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %74 = arith.muli %3, %c2_i256 : i256 -// CHECK-NEXT: %75 = arith.ori %74, %c1_i256 : i256 -// CHECK-NEXT: %76 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> -// CHECK-NEXT: llvm.store %75, %76 {alignment = 1 : i64} : i256, !llvm.ptr<5> -// CHECK-NEXT: cf.br ^bb16 -// CHECK-NEXT: ^bb16: // 3 preds: ^bb8, ^bb9, ^bb15 +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%1, %c11_i256) : (i256, i256) -> () // CHECK-NEXT: return // CHECK-NEXT: } // CHECK-NEXT: func.func @cd2m_dyn2d_167(%arg0: !llvm.struct<(i256, i256)>) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { diff --git a/test/lit/mlirCodegen/EVM/array-huge-static.sol b/test/lit/mlirCodegen/EVM/array-huge-static.sol new file mode 100644 index 000000000..05f11e598 --- /dev/null +++ b/test/lit/mlirCodegen/EVM/array-huge-static.sol @@ -0,0 +1,666 @@ +// RUN: solc --mlir-action=print-std-mlir --mlir-target=evm --mmlir --mlir-print-debuginfo %s | FileCheck %s + +contract C { + uint[(2**256)-1] s; + function getS(uint256 i) public view returns (uint) { + return s[i]; + } +} + +contract D { + uint256[2**100] a; + uint256[2**100] b; + + struct S { + uint256 x; + uint256[2**70] inner; + } + S s; + + function setElt(uint256 i, uint256 v) public { + a[i] = v; + } + + function delElt(uint256 i) public { + delete a[i]; + } + + function delArr() public { + delete a; + } + + function copyArr() public { + a = b; + } + + function getLen() public view returns (uint256) { + return a.length; + } + + function viaRef(uint256 i, uint256 v) public { + uint256[2**100] storage r = a; + r[i] = v; + } + + function delStruct() public { + delete s; + } +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc3 = loc({{.*}}:4:18) +// CHECK-NEXT: module @C_22 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%3, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_22"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %5 = "llvm.intrcall"() <{id = 4042 : i32, name = "evm.codesize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %9 = arith.addi %6, %c31_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.andi %9, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %11 = arith.addi %8, %10 : i256 loc(#loc1) +// CHECK-NEXT: %12 = arith.cmpi ugt, %11, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ult, %11, %8 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %4 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %6) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @C_22() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = "llvm.intrcall"() <{id = 4046 : i32, metadata = ["C_22_deployed"], name = "evm.dataoffset"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %24 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_22_deployed"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %25 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %26 = llvm.inttoptr %23 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%25, %26, %24) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%27, %24) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @C_22() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: module @C_22_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.shrui %4, %c224_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.switch %5 : i256, [ +// CHECK-NEXT: default: ^bb7, +// CHECK-NEXT: 3557653344: ^bb2 +// CHECK-NEXT: ] loc(#loc1) +// CHECK-NEXT: ^bb2: // pred: ^bb1 +// CHECK-NEXT: %6 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %7 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %7, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %9 = arith.subi %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.cmpi slt, %9, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %10, ^bb5, ^bb6 loc(#loc1) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%11, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb6 loc(#loc1) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %14 = call @getS_21(%13) : (i256) -> i256 loc(#loc1) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %14, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %18 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%18, %c32_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb7: // 3 preds: ^bb0, ^bb1, ^bb6 +// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%19, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @getS_21(%arg0: i256 loc({{.*}}:4:18)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc4) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c-1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c50_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %6 = llvm.inttoptr %1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %7 = llvm.load %6 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: return %7 : i256 loc(#loc6) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:2:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:4:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:5:17) +// CHECK-NEXT: #loc5 = loc({{.*}}:5:15) +// CHECK-NEXT: #loc6 = loc({{.*}}:5:8) +// CHECK-NEXT: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc4 = loc({{.*}}:45:8) +// CHECK-NEXT: #loc6 = loc({{.*}}:39:20) +// CHECK-NEXT: #loc7 = loc({{.*}}:39:31) +// CHECK-NEXT: #loc16 = loc({{.*}}:32:8) +// CHECK-NEXT: #loc18 = loc({{.*}}:28:8) +// CHECK-NEXT: #loc20 = loc({{.*}}:23:20) +// CHECK-NEXT: #loc25 = loc({{.*}}:19:20) +// CHECK-NEXT: #loc26 = loc({{.*}}:19:31) +// CHECK-NEXT: module @D_127 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%3, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["D_127"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %5 = "llvm.intrcall"() <{id = 4042 : i32, name = "evm.codesize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %9 = arith.addi %6, %c31_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.andi %9, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %11 = arith.addi %8, %10 : i256 loc(#loc1) +// CHECK-NEXT: %12 = arith.cmpi ugt, %11, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ult, %11, %8 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %4 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %6) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @D_127() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = "llvm.intrcall"() <{id = 4046 : i32, metadata = ["D_127_deployed"], name = "evm.dataoffset"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %24 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["D_127_deployed"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %25 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %26 = llvm.inttoptr %23 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%25, %26, %24) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%27, %24) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @D_127() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: module @D_127_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.shrui %4, %c224_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.switch %5 : i256, [ +// CHECK-NEXT: default: ^bb29, +// CHECK-NEXT: 1996358004: ^bb2, +// CHECK-NEXT: 2713595512: ^bb7, +// CHECK-NEXT: 4091362861: ^bb12, +// CHECK-NEXT: 1616550925: ^bb15, +// CHECK-NEXT: 1250999895: ^bb18, +// CHECK-NEXT: 114796897: ^bb21, +// CHECK-NEXT: 3518880321: ^bb26 +// CHECK-NEXT: ] loc(#loc1) +// CHECK-NEXT: ^bb2: // pred: ^bb1 +// CHECK-NEXT: %6 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %7 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %7, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %9 = arith.subi %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.cmpi slt, %9, %c64_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %10, ^bb5, ^bb6 loc(#loc1) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%11, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb6 loc(#loc1) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %14 = llvm.inttoptr %c36_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: call @setElt_60(%13, %15) : (i256, i256) -> () loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%18, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb7: // pred: ^bb1 +// CHECK-NEXT: %19 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %20 = arith.cmpi ne, %19, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %20, ^bb8, ^bb9 loc(#loc1) +// CHECK-NEXT: ^bb8: // pred: ^bb7 +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%21, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb9 loc(#loc1) +// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 +// CHECK-NEXT: %22 = arith.subi %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: %23 = arith.cmpi slt, %22, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %23, ^bb10, ^bb11 loc(#loc1) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%24, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb11 loc(#loc1) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %25 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: call @delElt_71(%26) : (i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %28 = llvm.load %27 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%29, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb12: // pred: ^bb1 +// CHECK-NEXT: %30 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %31 = arith.cmpi ne, %30, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %31, ^bb13, ^bb14 loc(#loc1) +// CHECK-NEXT: ^bb13: // pred: ^bb12 +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%32, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb14 loc(#loc1) +// CHECK-NEXT: ^bb14: // 2 preds: ^bb12, ^bb13 +// CHECK-NEXT: call @delArr_78() : () -> () loc(#loc1) +// CHECK-NEXT: %33 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %34 = llvm.load %33 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%35, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb15: // pred: ^bb1 +// CHECK-NEXT: %36 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %37 = arith.cmpi ne, %36, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %37, ^bb16, ^bb17 loc(#loc1) +// CHECK-NEXT: ^bb16: // pred: ^bb15 +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%38, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb17 loc(#loc1) +// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 +// CHECK-NEXT: call @copyArr_86() : () -> () loc(#loc1) +// CHECK-NEXT: %39 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %40 = llvm.load %39 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%41, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb18: // pred: ^bb1 +// CHECK-NEXT: %42 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %43 = arith.cmpi ne, %42, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %43, ^bb19, ^bb20 loc(#loc1) +// CHECK-NEXT: ^bb19: // pred: ^bb18 +// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%44, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb20 loc(#loc1) +// CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 +// CHECK-NEXT: %45 = call @getLen_95() : () -> i256 loc(#loc1) +// CHECK-NEXT: %46 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %47 = llvm.load %46 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %48 = llvm.inttoptr %47 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %45, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %49 = llvm.inttoptr %47 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%49, %c32_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb21: // pred: ^bb1 +// CHECK-NEXT: %50 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %51 = arith.cmpi ne, %50, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %51, ^bb22, ^bb23 loc(#loc1) +// CHECK-NEXT: ^bb22: // pred: ^bb21 +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%52, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb23 loc(#loc1) +// CHECK-NEXT: ^bb23: // 2 preds: ^bb21, ^bb22 +// CHECK-NEXT: %53 = arith.subi %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: %54 = arith.cmpi slt, %53, %c64_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %54, ^bb24, ^bb25 loc(#loc1) +// CHECK-NEXT: ^bb24: // pred: ^bb23 +// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%55, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb25 loc(#loc1) +// CHECK-NEXT: ^bb25: // 2 preds: ^bb23, ^bb24 +// CHECK-NEXT: %56 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %58 = llvm.inttoptr %c36_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %59 = llvm.load %58 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: call @viaRef_119(%57, %59) : (i256, i256) -> () loc(#loc1) +// CHECK-NEXT: %60 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %62 = llvm.inttoptr %61 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%62, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb26: // pred: ^bb1 +// CHECK-NEXT: %63 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %64 = arith.cmpi ne, %63, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %64, ^bb27, ^bb28 loc(#loc1) +// CHECK-NEXT: ^bb27: // pred: ^bb26 +// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%65, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb28 loc(#loc1) +// CHECK-NEXT: ^bb28: // 2 preds: ^bb26, ^bb27 +// CHECK-NEXT: call @delStruct_126() : () -> () loc(#loc1) +// CHECK-NEXT: %66 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %67 = llvm.load %66 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %68 = llvm.inttoptr %67 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%68, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb29 loc(#loc1) +// CHECK-NEXT: ^bb29: // 9 preds: ^bb0, ^bb1, ^bb6, ^bb11, ^bb14, ^bb17, ^bb20, ^bb25, ^bb28 +// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%69, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @delStruct_126() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c2535301200456458802993406410753_i256 = arith.constant 2535301200456458802993406410753 : i256 loc(#loc) +// CHECK-NEXT: %c1180591620717411303424_i256 = arith.constant 1180591620717411303424 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c2535301200456458802993406410752_i256 = arith.constant 2535301200456458802993406410752 : i256 loc(#loc3) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c2535301200456458802993406410752_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb1(%1: i256 loc({{.*}}:45:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %2 = arith.cmpi ult, %1, %c1180591620717411303424_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %2, ^bb2(%1 : i256), ^bb3 loc(#loc4) +// CHECK-NEXT: ^bb2(%3: i256 loc({{.*}}:45:8)): // pred: ^bb1 +// CHECK-NEXT: %4 = arith.addi %3, %c2535301200456458802993406410753_i256 : i256 loc(#loc4) +// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %6 = arith.addi %3, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb1(%6 : i256) loc(#loc4) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @viaRef_119(%arg0: i256 loc({{.*}}:39:20), %arg1: i256 loc({{.*}}:39:31)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c1267650600228229401496703205376_i256 = arith.constant 1267650600228229401496703205376 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc6) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc6) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc7) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc7) +// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc8) +// CHECK-NEXT: llvm.store %c0_i256, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc8) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc9) +// CHECK-NEXT: %4 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc10) +// CHECK-NEXT: %5 = arith.cmpi uge, %4, %c1267650600228229401496703205376_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc9) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c50_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) +// CHECK-NEXT: cf.br ^bb2 loc(#loc9) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %9 = arith.addi %3, %4 : i256 loc(#loc9) +// CHECK-NEXT: %10 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc11) +// CHECK-NEXT: %11 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %10, %11 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: func.func @getLen_95() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1267650600228229401496703205376_i256 = arith.constant 1267650600228229401496703205376 : i256 loc(#loc13) +// CHECK-NEXT: return %c1267650600228229401496703205376_i256 : i256 loc(#loc14) +// CHECK-NEXT: } loc(#loc12) +// CHECK-NEXT: func.func @copyArr_86() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1267650600228229401496703205376_i256 = arith.constant 1267650600228229401496703205376 : i256 loc(#loc) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc16) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:32:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c1267650600228229401496703205376_i256 : i256 loc(#loc16) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc16) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:32:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = arith.addi %2, %c1267650600228229401496703205376_i256 : i256 loc(#loc16) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) +// CHECK-NEXT: %6 = llvm.inttoptr %2 : i256 to !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: llvm.store %5, %6 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: %7 = arith.addi %2, %c1_i256 : i256 loc(#loc16) +// CHECK-NEXT: cf.br ^bb1(%7 : i256) loc(#loc16) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc15) +// CHECK-NEXT: } loc(#loc15) +// CHECK-NEXT: func.func @delArr_78() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1267650600228229401496703205376_i256 = arith.constant 1267650600228229401496703205376 : i256 loc(#loc18) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc18) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc18) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:28:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c1267650600228229401496703205376_i256 : i256 loc(#loc18) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc18) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:28:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = llvm.inttoptr %2 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: llvm.store %c0_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: %4 = arith.addi %2, %c1_i256 : i256 loc(#loc18) +// CHECK-NEXT: cf.br ^bb1(%4 : i256) loc(#loc18) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc17) +// CHECK-NEXT: } loc(#loc17) +// CHECK-NEXT: func.func @delElt_71(%arg0: i256 loc({{.*}}:23:20)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c1267650600228229401496703205376_i256 = arith.constant 1267650600228229401496703205376 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc20) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc20) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc21) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c1267650600228229401496703205376_i256 : i256 loc(#loc22) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc22) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc22) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc22) +// CHECK-NEXT: llvm.store %c50_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc22) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc22) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc22) +// CHECK-NEXT: cf.br ^bb2 loc(#loc22) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %6 = llvm.inttoptr %1 : i256 to !llvm.ptr<5> loc(#loc23) +// CHECK-NEXT: llvm.store %c0_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc23) +// CHECK-NEXT: return loc(#loc19) +// CHECK-NEXT: } loc(#loc19) +// CHECK-NEXT: func.func @setElt_60(%arg0: i256 loc({{.*}}:19:20), %arg1: i256 loc({{.*}}:19:31)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c1267650600228229401496703205376_i256 = arith.constant 1267650600228229401496703205376 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc25) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc25) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc26) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc26) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc27) +// CHECK-NEXT: %3 = arith.cmpi uge, %2, %c1267650600228229401496703205376_i256 : i256 loc(#loc28) +// CHECK-NEXT: cf.cond_br %3, ^bb1, ^bb2 loc(#loc28) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %5 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c50_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: "llvm.intrcall"(%6, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc28) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc28) +// CHECK-NEXT: cf.br ^bb2 loc(#loc28) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %7 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc29) +// CHECK-NEXT: %8 = llvm.inttoptr %2 : i256 to !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: llvm.store %7, %8 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: return loc(#loc24) +// CHECK-NEXT: } loc(#loc24) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:9:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:44:4) +// CHECK-NEXT: #loc3 = loc({{.*}}:17:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:39:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:40:8) +// CHECK-NEXT: #loc9 = loc({{.*}}:41:8) +// CHECK-NEXT: #loc10 = loc({{.*}}:41:10) +// CHECK-NEXT: #loc11 = loc({{.*}}:41:15) +// CHECK-NEXT: #loc12 = loc({{.*}}:35:4) +// CHECK-NEXT: #loc13 = loc({{.*}}:36:15) +// CHECK-NEXT: #loc14 = loc({{.*}}:36:8) +// CHECK-NEXT: #loc15 = loc({{.*}}:31:4) +// CHECK-NEXT: #loc17 = loc({{.*}}:27:4) +// CHECK-NEXT: #loc19 = loc({{.*}}:23:4) +// CHECK-NEXT: #loc21 = loc({{.*}}:24:17) +// CHECK-NEXT: #loc22 = loc({{.*}}:24:15) +// CHECK-NEXT: #loc23 = loc({{.*}}:24:8) +// CHECK-NEXT: #loc24 = loc({{.*}}:19:4) +// CHECK-NEXT: #loc27 = loc({{.*}}:20:10) +// CHECK-NEXT: #loc28 = loc({{.*}}:20:8) +// CHECK-NEXT: #loc29 = loc({{.*}}:20:15) +// CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/array-pop-dyn.sol b/test/lit/mlirCodegen/EVM/array-pop-dyn.sol index 07ff1a38f..bd1b490e6 100644 --- a/test/lit/mlirCodegen/EVM/array-pop-dyn.sol +++ b/test/lit/mlirCodegen/EVM/array-pop-dyn.sol @@ -17,8 +17,11 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc4 = loc({{.*}}:14:34) -// CHECK-NEXT: #loc7 = loc({{.*}}:12:31) +// CHECK-NEXT: #loc2 = loc({{.*}}:12:31) +// CHECK-NEXT: #loc5 = loc({{.*}}:14:34) +// CHECK-NEXT: #loc9 = loc({{.*}}:10:34) +// CHECK-NEXT: #loop_unroll = #llvm.loop_unroll +// CHECK-NEXT: #loop_annotation = #llvm.loop_annotation // CHECK-NEXT: module @C_52 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -188,6 +191,38 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:12:31), %arg1: i256 loc({{.*}}:12:31), %arg2: i256 loc({{.*}}:12:31)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:12:31)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:12:31)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @popNested_51() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) @@ -196,55 +231,54 @@ contract C { // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc3) -// CHECK-NEXT: %0 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc4) +// CHECK-NEXT: %0 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc5) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c3_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %10 = arith.addi %9, %6 : i256 loc(#loc4) -// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %13 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: llvm.store %c0_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %14 = arith.cmpi ugt, %12, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb6 loc(#loc4) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c3_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %10 = arith.addi %9, %6 : i256 loc(#loc5) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %13 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %14 = arith.cmpi ugt, %12, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb6 loc(#loc5) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %10, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %17 = "llvm.intrcall"(%16, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %10, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %17 = "llvm.intrcall"(%16, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb4(%18: i256 loc({{.*}}:14:34)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %19 = arith.cmpi ult, %18, %12 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %19, ^bb5(%18 : i256), ^bb6 loc(#loc4) +// CHECK-NEXT: %19 = arith.cmpi ult, %18, %12 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %19, ^bb5(%18 : i256), ^bb6 loc(#loc5) // CHECK-NEXT: ^bb5(%20: i256 loc({{.*}}:14:34)): // pred: ^bb4 -// CHECK-NEXT: %21 = arith.addi %17, %20 : i256 loc(#loc4) -// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: llvm.store %c0_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %23 = arith.addi %20, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb4(%23 : i256) loc(#loc4) +// CHECK-NEXT: %21 = arith.addi %17, %20 : i256 loc(#loc5) +// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %23 = arith.addi %20, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb4(%23 : i256) loc(#loc5) // CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %24 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: llvm.store %6, %24 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: return loc(#loc2) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %6, %24 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @popStr_42() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) @@ -254,76 +288,56 @@ contract C { // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc6) -// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc7) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc7) +// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb2 loc(#loc7) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c2_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %10 = arith.addi %9, %6 : i256 loc(#loc7) -// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %13 = arith.shrui %12, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %14 = arith.andi %12, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %15 = arith.cmpi eq, %14, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %16 = arith.andi %13, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %17 = arith.select %15, %16, %13 : i256 loc(#loc7) -// CHECK-NEXT: %18 = arith.cmpi ult, %17, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %19 = arith.extui %18 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %20 = arith.cmpi eq, %14, %19 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %20, ^bb3, ^bb4 loc(#loc7) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c2_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.addi %9, %6 : i256 loc(#loc2) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %13 = arith.shrui %12, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %14 = arith.andi %12, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %15 = arith.cmpi eq, %14, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = arith.andi %13, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %17 = arith.select %15, %16, %13 : i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.cmpi ult, %17, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.extui %18 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.cmpi eq, %14, %19 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %20, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %22 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%23, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb4 loc(#loc7) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %22 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%23, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %24 = arith.cmpi ugt, %17, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %24, ^bb5, ^bb8 loc(#loc7) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %10, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %28 = arith.addi %17, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %29 = arith.divui %28, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %30 = arith.addi %27, %29 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb6(%27 : i256) loc(#loc7) -// CHECK-NEXT: ^bb6(%31: i256 loc({{.*}}:12:31)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %32 = arith.cmpi ult, %31, %30 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %32, ^bb7(%31 : i256), ^bb8 loc(#loc7) -// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:12:31)): // pred: ^bb6 -// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %35 = arith.addi %33, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb6(%35 : i256) loc(#loc7) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %36 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %37 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %6, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: return loc(#loc5) -// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: call @__sol.clear_string_tail(%10, %17, %c0_i256) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %10 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %25 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %25 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) // CHECK-NEXT: func.func @popU256x3_33() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) @@ -353,16 +367,19 @@ contract C { // CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) // CHECK-NEXT: %10 = arith.muli %6, %c3_i256 : i256 loc(#loc9) // CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc9) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %15 = arith.addi %11, %c2_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb3(%c0_i256 : i256) loc(#loc9) +// CHECK-NEXT: ^bb3(%12: i256 loc({{.*}}:10:34)): // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %c3_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %13, ^bb4(%12 : i256), ^bb5 loc(#loc9) +// CHECK-NEXT: ^bb4(%14: i256 loc({{.*}}:10:34)): // pred: ^bb3 +// CHECK-NEXT: %15 = arith.addi %11, %14 : i256 loc(#loc9) // CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc9) // CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %17 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %6, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %17 = arith.addi %14, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb3(%17 : i256) {loop_annotation = #loop_annotation} loc(#loc9) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %6, %18 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) // CHECK-NEXT: return loc(#loc8) // CHECK-NEXT: } loc(#loc8) // CHECK-NEXT: func.func @popU256_24() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { @@ -403,12 +420,11 @@ contract C { // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:14:4) -// CHECK-NEXT: #loc3 = loc({{.*}}:6:4) -// CHECK-NEXT: #loc5 = loc({{.*}}:12:4) -// CHECK-NEXT: #loc6 = loc({{.*}}:5:4) +// CHECK-NEXT: #loc3 = loc({{.*}}:14:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:6:4) +// CHECK-NEXT: #loc6 = loc({{.*}}:12:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:5:4) // CHECK-NEXT: #loc8 = loc({{.*}}:10:4) -// CHECK-NEXT: #loc9 = loc({{.*}}:10:34) // CHECK-NEXT: #loc10 = loc({{.*}}:8:4) // CHECK-NEXT: #loc11 = loc({{.*}}:8:32) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/array-pop-fixed-complex.sol b/test/lit/mlirCodegen/EVM/array-pop-fixed-complex.sol index a2d66953f..66927e657 100644 --- a/test/lit/mlirCodegen/EVM/array-pop-fixed-complex.sol +++ b/test/lit/mlirCodegen/EVM/array-pop-fixed-complex.sol @@ -26,9 +26,9 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:23:43) -// CHECK-NEXT: #loc5 = loc({{.*}}:22:43) -// CHECK-NEXT: #loc7 = loc({{.*}}:21:43) +// CHECK-NEXT: #loc2 = loc({{.*}}:21:43) +// CHECK-NEXT: #loc4 = loc({{.*}}:23:43) +// CHECK-NEXT: #loc6 = loc({{.*}}:22:43) // CHECK-NEXT: #loc9 = loc({{.*}}:20:43) // CHECK-NEXT: module @C_72 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { @@ -199,6 +199,38 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:21:43), %arg1: i256 loc({{.*}}:21:43), %arg2: i256 loc({{.*}}:21:43)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:21:43)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:21:43)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @popStructWithFixed_71() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) @@ -209,81 +241,66 @@ contract C { // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: %0 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc4) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) -// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb2 loc(#loc4) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c3_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %10 = arith.muli %6, %c3_i256 : i256 loc(#loc3) -// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc3) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %16 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %17 = arith.cmpi ugt, %15, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb6 loc(#loc3) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %13, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb4(%21: i256 loc({{.*}}:23:43)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %22 = arith.cmpi ult, %21, %15 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %22, ^bb5(%21 : i256), ^bb6 loc(#loc3) -// CHECK-NEXT: ^bb5(%23: i256 loc({{.*}}:23:43)): // pred: ^bb4 -// CHECK-NEXT: %24 = arith.addi %20, %23 : i256 loc(#loc3) -// CHECK-NEXT: %25 = llvm.inttoptr %24 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %26 = arith.addi %23, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb4(%26 : i256) loc(#loc3) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %27 = arith.addi %11, %c2_i256 : i256 loc(#loc3) -// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %30 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %31 = arith.cmpi ugt, %29, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %31, ^bb7, ^bb10 loc(#loc3) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %27, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb8(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:23:43)): // 2 preds: ^bb7, ^bb9 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %29 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %36, ^bb9(%35 : i256), ^bb10 loc(#loc3) -// CHECK-NEXT: ^bb9(%37: i256 loc({{.*}}:23:43)): // pred: ^bb8 -// CHECK-NEXT: %38 = arith.addi %34, %37 : i256 loc(#loc3) -// CHECK-NEXT: %39 = llvm.inttoptr %38 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %39 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %40 = arith.addi %37, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb8(%40 : i256) loc(#loc3) -// CHECK-NEXT: ^bb10: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %41 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %6, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: return loc(#loc2) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c3_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %10 = arith.muli %6, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc4) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb3(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:23:43)): // 2 preds: ^bb2, ^bb8 +// CHECK-NEXT: %15 = arith.cmpi ult, %14, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %15, ^bb4(%14 : i256), ^bb9 loc(#loc4) +// CHECK-NEXT: ^bb4(%16: i256 loc({{.*}}:23:43)): // pred: ^bb3 +// CHECK-NEXT: %17 = arith.addi %13, %16 : i256 loc(#loc4) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %20 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %21 = arith.cmpi ugt, %19, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %21, ^bb5, ^bb8(%16 : i256) loc(#loc4) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %17, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb6(%25: i256 loc({{.*}}:23:43)): // 2 preds: ^bb5, ^bb7 +// CHECK-NEXT: %26 = arith.cmpi ult, %25, %19 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %26, ^bb7(%25 : i256), ^bb8(%16 : i256) loc(#loc4) +// CHECK-NEXT: ^bb7(%27: i256 loc({{.*}}:23:43)): // pred: ^bb6 +// CHECK-NEXT: %28 = arith.addi %24, %27 : i256 loc(#loc4) +// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %30 = arith.addi %27, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb6(%30 : i256) loc(#loc4) +// CHECK-NEXT: ^bb8(%31: i256 loc({{.*}}:23:43)): // 2 preds: ^bb4, ^bb6 +// CHECK-NEXT: %32 = arith.addi %31, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb3(%32 : i256) loc(#loc4) +// CHECK-NEXT: ^bb9: // pred: ^bb3 +// CHECK-NEXT: %33 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %6, %33 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @popFixedOfStruct_62() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) @@ -292,84 +309,66 @@ contract C { // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc6) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: cf.br ^bb2 loc(#loc6) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c2_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %10 = arith.muli %6, %c4_i256 : i256 loc(#loc5) -// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc5) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %16 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %17 = arith.cmpi ugt, %15, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb6 loc(#loc5) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %13, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc5) -// CHECK-NEXT: ^bb4(%21: i256 loc({{.*}}:22:43)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %22 = arith.cmpi ult, %21, %15 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %22, ^bb5(%21 : i256), ^bb6 loc(#loc5) -// CHECK-NEXT: ^bb5(%23: i256 loc({{.*}}:22:43)): // pred: ^bb4 -// CHECK-NEXT: %24 = arith.addi %20, %23 : i256 loc(#loc5) -// CHECK-NEXT: %25 = llvm.inttoptr %24 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %26 = arith.addi %23, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%26 : i256) loc(#loc5) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %27 = arith.addi %11, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %29 = arith.addi %11, %c3_i256 : i256 loc(#loc5) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %31 = llvm.load %30 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %32 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %33 = arith.cmpi ugt, %31, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %33, ^bb7, ^bb10 loc(#loc5) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %29, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %36 = "llvm.intrcall"(%35, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb8(%c0_i256 : i256) loc(#loc5) -// CHECK-NEXT: ^bb8(%37: i256 loc({{.*}}:22:43)): // 2 preds: ^bb7, ^bb9 -// CHECK-NEXT: %38 = arith.cmpi ult, %37, %31 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %38, ^bb9(%37 : i256), ^bb10 loc(#loc5) -// CHECK-NEXT: ^bb9(%39: i256 loc({{.*}}:22:43)): // pred: ^bb8 -// CHECK-NEXT: %40 = arith.addi %36, %39 : i256 loc(#loc5) -// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %42 = arith.addi %39, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb8(%42 : i256) loc(#loc5) -// CHECK-NEXT: ^bb10: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %43 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %6, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: return loc(#loc4) -// CHECK-NEXT: } loc(#loc4) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c2_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.muli %6, %c4_i256 : i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb3(%c0_i256 : i256) loc(#loc6) +// CHECK-NEXT: ^bb3(%12: i256 loc({{.*}}:22:43)): // 2 preds: ^bb2, ^bb8 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %c4_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %13, ^bb4(%12 : i256), ^bb9 loc(#loc6) +// CHECK-NEXT: ^bb4(%14: i256 loc({{.*}}:22:43)): // pred: ^bb3 +// CHECK-NEXT: %15 = arith.addi %11, %14 : i256 loc(#loc6) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %17 = arith.addi %15, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %20 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %21 = arith.cmpi ugt, %19, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %21, ^bb5, ^bb8(%14 : i256) loc(#loc6) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %17, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc6) +// CHECK-NEXT: ^bb6(%25: i256 loc({{.*}}:22:43)): // 2 preds: ^bb5, ^bb7 +// CHECK-NEXT: %26 = arith.cmpi ult, %25, %19 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %26, ^bb7(%25 : i256), ^bb8(%14 : i256) loc(#loc6) +// CHECK-NEXT: ^bb7(%27: i256 loc({{.*}}:22:43)): // pred: ^bb6 +// CHECK-NEXT: %28 = arith.addi %24, %27 : i256 loc(#loc6) +// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %30 = arith.addi %27, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb6(%30 : i256) loc(#loc6) +// CHECK-NEXT: ^bb8(%31: i256 loc({{.*}}:22:43)): // 2 preds: ^bb4, ^bb6 +// CHECK-NEXT: %32 = arith.addi %31, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb3(%32 : i256) loc(#loc6) +// CHECK-NEXT: ^bb9: // pred: ^bb3 +// CHECK-NEXT: %33 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %6, %33 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) // CHECK-NEXT: func.func @popStrInFixed_53() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) @@ -380,120 +379,65 @@ contract C { // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc7) +// CHECK-NEXT: %0 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb2 loc(#loc7) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c1_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %10 = arith.muli %6, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc7) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %14 = arith.shrui %13, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %15 = arith.andi %13, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %16 = arith.cmpi eq, %15, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %17 = arith.andi %14, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %18 = arith.select %16, %17, %14 : i256 loc(#loc7) -// CHECK-NEXT: %19 = arith.cmpi ult, %18, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %20 = arith.extui %19 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %21 = arith.cmpi eq, %15, %20 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %21, ^bb3, ^bb4 loc(#loc7) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %23 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%24, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb4 loc(#loc7) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %25 = arith.cmpi ugt, %18, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %25, ^bb5, ^bb8 loc(#loc7) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c1_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.muli %6, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb3(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb3(%12: i256 loc({{.*}}:21:43)): // 2 preds: ^bb2, ^bb6 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb4(%12 : i256), ^bb7 loc(#loc2) +// CHECK-NEXT: ^bb4(%14: i256 loc({{.*}}:21:43)): // pred: ^bb3 +// CHECK-NEXT: %15 = arith.addi %11, %14 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.shrui %17, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.andi %17, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.cmpi eq, %19, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.andi %18, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.select %20, %21, %18 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.cmpi ult, %22, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %24 = arith.extui %23 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %25 = arith.cmpi eq, %19, %24 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %25, ^bb5, ^bb6 loc(#loc2) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %11, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %28 = "llvm.intrcall"(%27, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %29 = arith.addi %18, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %30 = arith.divui %29, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %31 = arith.addi %28, %30 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb6(%28 : i256) loc(#loc7) -// CHECK-NEXT: ^bb6(%32: i256 loc({{.*}}:21:43)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %33 = arith.cmpi ult, %32, %31 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %33, ^bb7(%32 : i256), ^bb8 loc(#loc7) -// CHECK-NEXT: ^bb7(%34: i256 loc({{.*}}:21:43)): // pred: ^bb6 -// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %36 = arith.addi %34, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb6(%36 : i256) loc(#loc7) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %37 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %38 = arith.addi %11, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %39 = llvm.inttoptr %38 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %40 = llvm.load %39 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %41 = arith.shrui %40, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %42 = arith.andi %40, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %43 = arith.cmpi eq, %42, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %44 = arith.andi %41, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %45 = arith.select %43, %44, %41 : i256 loc(#loc7) -// CHECK-NEXT: %46 = arith.cmpi ult, %45, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %47 = arith.extui %46 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %48 = arith.cmpi eq, %42, %47 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %48, ^bb9, ^bb10 loc(#loc7) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %50 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %51 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%51, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb10 loc(#loc7) -// CHECK-NEXT: ^bb10: // 2 preds: ^bb8, ^bb9 -// CHECK-NEXT: %52 = arith.cmpi ugt, %45, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %52, ^bb11, ^bb14 loc(#loc7) -// CHECK-NEXT: ^bb11: // pred: ^bb10 -// CHECK-NEXT: %53 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %38, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %55 = "llvm.intrcall"(%54, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %56 = arith.addi %45, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %57 = arith.divui %56, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %58 = arith.addi %55, %57 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb12(%55 : i256) loc(#loc7) -// CHECK-NEXT: ^bb12(%59: i256 loc({{.*}}:21:43)): // 2 preds: ^bb11, ^bb13 -// CHECK-NEXT: %60 = arith.cmpi ult, %59, %58 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %60, ^bb13(%59 : i256), ^bb14 loc(#loc7) -// CHECK-NEXT: ^bb13(%61: i256 loc({{.*}}:21:43)): // pred: ^bb12 -// CHECK-NEXT: %62 = llvm.inttoptr %61 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %62 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %63 = arith.addi %61, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb12(%63 : i256) loc(#loc7) -// CHECK-NEXT: ^bb14: // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %64 = llvm.inttoptr %38 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %64 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %65 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %6, %65 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: return loc(#loc6) -// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%28, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb6 loc(#loc2) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: call @__sol.clear_string_tail(%15, %22, %c0_i256) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %30 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb3(%30 : i256) loc(#loc2) +// CHECK-NEXT: ^bb7: // pred: ^bb3 +// CHECK-NEXT: %31 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: return loc(#loc7) +// CHECK-NEXT: } loc(#loc7) // CHECK-NEXT: func.func @popDynInFixed_44() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) @@ -523,84 +467,47 @@ contract C { // CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) // CHECK-NEXT: %10 = arith.muli %6, %c3_i256 : i256 loc(#loc9) // CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc9) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %14 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %15 = arith.cmpi ugt, %13, %c0_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %15, ^bb3, ^bb6 loc(#loc9) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %11, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %18 = "llvm.intrcall"(%17, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc9) -// CHECK-NEXT: ^bb4(%19: i256 loc({{.*}}:20:43)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %20 = arith.cmpi ult, %19, %13 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %20, ^bb5(%19 : i256), ^bb6 loc(#loc9) -// CHECK-NEXT: ^bb5(%21: i256 loc({{.*}}:20:43)): // pred: ^bb4 -// CHECK-NEXT: %22 = arith.addi %18, %21 : i256 loc(#loc9) -// CHECK-NEXT: %23 = llvm.inttoptr %22 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %24 = arith.addi %21, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb4(%24 : i256) loc(#loc9) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %25 = arith.addi %11, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: %26 = llvm.inttoptr %25 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %28 = llvm.inttoptr %25 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %29 = arith.cmpi ugt, %27, %c0_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %29, ^bb7, ^bb10 loc(#loc9) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %25, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %31 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %32 = "llvm.intrcall"(%31, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb8(%c0_i256 : i256) loc(#loc9) -// CHECK-NEXT: ^bb8(%33: i256 loc({{.*}}:20:43)): // 2 preds: ^bb7, ^bb9 -// CHECK-NEXT: %34 = arith.cmpi ult, %33, %27 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %34, ^bb9(%33 : i256), ^bb10 loc(#loc9) -// CHECK-NEXT: ^bb9(%35: i256 loc({{.*}}:20:43)): // pred: ^bb8 -// CHECK-NEXT: %36 = arith.addi %32, %35 : i256 loc(#loc9) -// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %38 = arith.addi %35, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb8(%38 : i256) loc(#loc9) -// CHECK-NEXT: ^bb10: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %39 = arith.addi %11, %c2_i256 : i256 loc(#loc9) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %42 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %42 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %43 = arith.cmpi ugt, %41, %c0_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %43, ^bb11, ^bb14 loc(#loc9) -// CHECK-NEXT: ^bb11: // pred: ^bb10 -// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %39, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %46 = "llvm.intrcall"(%45, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb12(%c0_i256 : i256) loc(#loc9) -// CHECK-NEXT: ^bb12(%47: i256 loc({{.*}}:20:43)): // 2 preds: ^bb11, ^bb13 -// CHECK-NEXT: %48 = arith.cmpi ult, %47, %41 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %48, ^bb13(%47 : i256), ^bb14 loc(#loc9) -// CHECK-NEXT: ^bb13(%49: i256 loc({{.*}}:20:43)): // pred: ^bb12 -// CHECK-NEXT: %50 = arith.addi %46, %49 : i256 loc(#loc9) -// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %51 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %52 = arith.addi %49, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb12(%52 : i256) loc(#loc9) -// CHECK-NEXT: ^bb14: // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %53 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %6, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: cf.br ^bb3(%c0_i256 : i256) loc(#loc9) +// CHECK-NEXT: ^bb3(%12: i256 loc({{.*}}:20:43)): // 2 preds: ^bb2, ^bb8 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %c3_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %13, ^bb4(%12 : i256), ^bb9 loc(#loc9) +// CHECK-NEXT: ^bb4(%14: i256 loc({{.*}}:20:43)): // pred: ^bb3 +// CHECK-NEXT: %15 = arith.addi %11, %14 : i256 loc(#loc9) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %18 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %19 = arith.cmpi ugt, %17, %c0_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %19, ^bb5, ^bb8(%14 : i256) loc(#loc9) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %15, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %22 = "llvm.intrcall"(%21, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc9) +// CHECK-NEXT: ^bb6(%23: i256 loc({{.*}}:20:43)): // 2 preds: ^bb5, ^bb7 +// CHECK-NEXT: %24 = arith.cmpi ult, %23, %17 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %24, ^bb7(%23 : i256), ^bb8(%14 : i256) loc(#loc9) +// CHECK-NEXT: ^bb7(%25: i256 loc({{.*}}:20:43)): // pred: ^bb6 +// CHECK-NEXT: %26 = arith.addi %22, %25 : i256 loc(#loc9) +// CHECK-NEXT: %27 = llvm.inttoptr %26 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %28 = arith.addi %25, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb6(%28 : i256) loc(#loc9) +// CHECK-NEXT: ^bb8(%29: i256 loc({{.*}}:20:43)): // 2 preds: ^bb4, ^bb6 +// CHECK-NEXT: %30 = arith.addi %29, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb3(%30 : i256) loc(#loc9) +// CHECK-NEXT: ^bb9: // pred: ^bb3 +// CHECK-NEXT: %31 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %6, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) // CHECK-NEXT: return loc(#loc8) // CHECK-NEXT: } loc(#loc8) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:23:4) -// CHECK-NEXT: #loc4 = loc({{.*}}:22:4) -// CHECK-NEXT: #loc6 = loc({{.*}}:21:4) +// CHECK-NEXT: #loc3 = loc({{.*}}:23:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:22:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:21:4) // CHECK-NEXT: #loc8 = loc({{.*}}:20:4) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/array-pop-struct-clear.sol b/test/lit/mlirCodegen/EVM/array-pop-struct-clear.sol index 20704bb3d..1ecbd4186 100644 --- a/test/lit/mlirCodegen/EVM/array-pop-struct-clear.sol +++ b/test/lit/mlirCodegen/EVM/array-pop-struct-clear.sol @@ -32,7 +32,9 @@ contract ClearTest { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:29:28) +// CHECK-NEXT: #loc2 = loc({{.*}}:29:28) +// CHECK-NEXT: #loop_unroll = #llvm.loop_unroll +// CHECK-NEXT: #loop_annotation = #llvm.loop_annotation // CHECK-NEXT: module @ClearTest_65 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -148,17 +150,47 @@ contract ClearTest { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:29:28), %arg1: i256 loc({{.*}}:29:28), %arg2: i256 loc({{.*}}:29:28)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:29:28)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:29:28)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @pop_64() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c13_i256 = arith.constant 13 : i256 loc(#loc) // CHECK-NEXT: %c11_i256 = arith.constant 11 : i256 loc(#loc) -// CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc) // CHECK-NEXT: %c14_i256 = arith.constant 14 : i256 loc(#loc) // CHECK-NEXT: %c12_i256 = arith.constant 12 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc) // CHECK-NEXT: %c9_i256 = arith.constant 9 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c7_i256 = arith.constant 7 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc) @@ -172,181 +204,171 @@ contract ClearTest { // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) -// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %10 = arith.muli %6, %c15_i256 : i256 loc(#loc3) -// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc3) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %15 = arith.addi %11, %c2_i256 : i256 loc(#loc3) -// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %17 = arith.addi %11, %c3_i256 : i256 loc(#loc3) -// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %19 = arith.addi %11, %c4_i256 : i256 loc(#loc3) -// CHECK-NEXT: %20 = llvm.inttoptr %19 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %21 = arith.addi %11, %c5_i256 : i256 loc(#loc3) -// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %23 = arith.addi %11, %c6_i256 : i256 loc(#loc3) -// CHECK-NEXT: %24 = llvm.inttoptr %23 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %25 = llvm.load %24 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %26 = arith.shrui %25, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %27 = arith.andi %25, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %28 = arith.cmpi eq, %27, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: %29 = arith.andi %26, %c127_i256 : i256 loc(#loc3) -// CHECK-NEXT: %30 = arith.select %28, %29, %26 : i256 loc(#loc3) -// CHECK-NEXT: %31 = arith.cmpi ult, %30, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %32 = arith.extui %31 : i1 to i256 loc(#loc3) -// CHECK-NEXT: %33 = arith.cmpi eq, %27, %32 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %33, ^bb3, ^bb4 loc(#loc3) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %35 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c34_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: "llvm.intrcall"(%36, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) -// CHECK-NEXT: cf.br ^bb4 loc(#loc3) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %37 = arith.cmpi ugt, %30, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %37, ^bb5, ^bb8 loc(#loc3) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %23, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %40 = "llvm.intrcall"(%39, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %41 = arith.addi %30, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %42 = arith.divui %41, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %43 = arith.addi %40, %42 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%40 : i256) loc(#loc3) -// CHECK-NEXT: ^bb6(%44: i256 loc({{.*}}:29:28)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %45 = arith.cmpi ult, %44, %43 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %45, ^bb7(%44 : i256), ^bb8 loc(#loc3) -// CHECK-NEXT: ^bb7(%46: i256 loc({{.*}}:29:28)): // pred: ^bb6 -// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %48 = arith.addi %46, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%48 : i256) loc(#loc3) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %49 = llvm.inttoptr %23 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %50 = arith.addi %11, %c7_i256 : i256 loc(#loc3) -// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %52 = llvm.load %51 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %53 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %54 = arith.cmpi ugt, %52, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %54, ^bb9, ^bb12 loc(#loc3) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %50, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %57 = "llvm.intrcall"(%56, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb10(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb10(%58: i256 loc({{.*}}:29:28)): // 2 preds: ^bb9, ^bb11 -// CHECK-NEXT: %59 = arith.cmpi ult, %58, %52 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %59, ^bb11(%58 : i256), ^bb12 loc(#loc3) -// CHECK-NEXT: ^bb11(%60: i256 loc({{.*}}:29:28)): // pred: ^bb10 -// CHECK-NEXT: %61 = arith.addi %57, %60 : i256 loc(#loc3) -// CHECK-NEXT: %62 = llvm.inttoptr %61 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %62 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %63 = arith.addi %60, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb10(%63 : i256) loc(#loc3) -// CHECK-NEXT: ^bb12: // 2 preds: ^bb8, ^bb10 -// CHECK-NEXT: %64 = arith.addi %11, %c8_i256 : i256 loc(#loc3) -// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %65 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %66 = arith.addi %11, %c9_i256 : i256 loc(#loc3) -// CHECK-NEXT: %67 = llvm.inttoptr %66 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %67 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %68 = arith.addi %11, %c10_i256 : i256 loc(#loc3) -// CHECK-NEXT: %69 = llvm.inttoptr %68 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %69 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %70 = arith.addi %11, %c11_i256 : i256 loc(#loc3) -// CHECK-NEXT: %71 = llvm.inttoptr %70 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %72 = llvm.load %71 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %73 = llvm.inttoptr %70 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %74 = arith.cmpi ugt, %72, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %74, ^bb13, ^bb20 loc(#loc3) -// CHECK-NEXT: ^bb13: // pred: ^bb12 -// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %70, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %77 = "llvm.intrcall"(%76, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb14(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb14(%78: i256 loc({{.*}}:29:28)): // 2 preds: ^bb13, ^bb19 -// CHECK-NEXT: %79 = arith.cmpi ult, %78, %72 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %79, ^bb15(%78 : i256), ^bb20 loc(#loc3) -// CHECK-NEXT: ^bb15(%80: i256 loc({{.*}}:29:28)): // pred: ^bb14 -// CHECK-NEXT: %81 = arith.addi %77, %80 : i256 loc(#loc3) -// CHECK-NEXT: %82 = llvm.inttoptr %81 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %83 = llvm.load %82 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %84 = llvm.inttoptr %81 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %84 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %85 = arith.cmpi ugt, %83, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %85, ^bb16, ^bb19(%80 : i256) loc(#loc3) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %86 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %81, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %88 = "llvm.intrcall"(%87, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %89 = arith.addi %83, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %90 = arith.divui %89, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb17(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb17(%91: i256 loc({{.*}}:29:28)): // 2 preds: ^bb16, ^bb18 -// CHECK-NEXT: %92 = arith.cmpi ult, %91, %90 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %92, ^bb18(%91 : i256), ^bb19(%80 : i256) loc(#loc3) -// CHECK-NEXT: ^bb18(%93: i256 loc({{.*}}:29:28)): // pred: ^bb17 -// CHECK-NEXT: %94 = arith.addi %88, %93 : i256 loc(#loc3) -// CHECK-NEXT: %95 = llvm.inttoptr %94 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %95 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %96 = arith.addi %93, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb17(%96 : i256) loc(#loc3) -// CHECK-NEXT: ^bb19(%97: i256 loc({{.*}}:29:28)): // 2 preds: ^bb15, ^bb17 -// CHECK-NEXT: %98 = arith.addi %97, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb14(%98 : i256) loc(#loc3) -// CHECK-NEXT: ^bb20: // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %99 = arith.addi %11, %c12_i256 : i256 loc(#loc3) -// CHECK-NEXT: %100 = llvm.inttoptr %99 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %100 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %101 = arith.addi %11, %c13_i256 : i256 loc(#loc3) -// CHECK-NEXT: %102 = llvm.inttoptr %101 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %102 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %103 = arith.addi %11, %c14_i256 : i256 loc(#loc3) -// CHECK-NEXT: %104 = llvm.inttoptr %103 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %104 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %105 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %6, %105 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: return loc(#loc2) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.muli %6, %c15_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc2) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %15 = arith.addi %11, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %17 = arith.addi %11, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb3(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb3(%18: i256 loc({{.*}}:29:28)): // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: %19 = arith.cmpi ult, %18, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %19, ^bb4(%18 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb4(%20: i256 loc({{.*}}:29:28)): // pred: ^bb3 +// CHECK-NEXT: %21 = arith.addi %17, %20 : i256 loc(#loc2) +// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %23 = arith.addi %20, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb3(%23 : i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %24 = arith.addi %11, %c6_i256 : i256 loc(#loc2) +// CHECK-NEXT: %25 = llvm.inttoptr %24 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %27 = arith.shrui %26, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %28 = arith.andi %26, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %29 = arith.cmpi eq, %28, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %30 = arith.andi %27, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %31 = arith.select %29, %30, %27 : i256 loc(#loc2) +// CHECK-NEXT: %32 = arith.cmpi ult, %31, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %33 = arith.extui %32 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %34 = arith.cmpi eq, %28, %33 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %34, ^bb6, ^bb7 loc(#loc2) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %36 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%37, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb7 loc(#loc2) +// CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 +// CHECK-NEXT: call @__sol.clear_string_tail(%24, %31, %c0_i256) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %38 = llvm.inttoptr %24 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %38 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %39 = arith.addi %11, %c7_i256 : i256 loc(#loc2) +// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %42 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %42 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %43 = arith.cmpi ugt, %41, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %43, ^bb8, ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb8: // pred: ^bb7 +// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %39, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %46 = "llvm.intrcall"(%45, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb9(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb9(%47: i256 loc({{.*}}:29:28)): // 2 preds: ^bb8, ^bb10 +// CHECK-NEXT: %48 = arith.cmpi ult, %47, %41 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %48, ^bb10(%47 : i256), ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb10(%49: i256 loc({{.*}}:29:28)): // pred: ^bb9 +// CHECK-NEXT: %50 = arith.addi %46, %49 : i256 loc(#loc2) +// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %51 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %52 = arith.addi %49, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb9(%52 : i256) loc(#loc2) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb7, ^bb9 +// CHECK-NEXT: %53 = arith.addi %11, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %55 = arith.addi %11, %c9_i256 : i256 loc(#loc2) +// CHECK-NEXT: %56 = llvm.inttoptr %55 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %56 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %57 = arith.addi %11, %c10_i256 : i256 loc(#loc2) +// CHECK-NEXT: %58 = llvm.inttoptr %57 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %58 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %59 = arith.addi %11, %c11_i256 : i256 loc(#loc2) +// CHECK-NEXT: %60 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %62 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %62 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %63 = arith.cmpi ugt, %61, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %63, ^bb12, ^bb19 loc(#loc2) +// CHECK-NEXT: ^bb12: // pred: ^bb11 +// CHECK-NEXT: %64 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %59, %64 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %66 = "llvm.intrcall"(%65, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb13(%67: i256 loc({{.*}}:29:28)): // 2 preds: ^bb12, ^bb18 +// CHECK-NEXT: %68 = arith.cmpi ult, %67, %61 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %68, ^bb14(%67 : i256), ^bb19 loc(#loc2) +// CHECK-NEXT: ^bb14(%69: i256 loc({{.*}}:29:28)): // pred: ^bb13 +// CHECK-NEXT: %70 = arith.addi %66, %69 : i256 loc(#loc2) +// CHECK-NEXT: %71 = llvm.inttoptr %70 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %72 = llvm.load %71 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %73 = llvm.inttoptr %70 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %74 = arith.cmpi ugt, %72, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %74, ^bb15, ^bb18(%69 : i256) loc(#loc2) +// CHECK-NEXT: ^bb15: // pred: ^bb14 +// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %70, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %77 = "llvm.intrcall"(%76, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %78 = arith.addi %72, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %79 = arith.divui %78, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb16(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb16(%80: i256 loc({{.*}}:29:28)): // 2 preds: ^bb15, ^bb17 +// CHECK-NEXT: %81 = arith.cmpi ult, %80, %79 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %81, ^bb17(%80 : i256), ^bb18(%69 : i256) loc(#loc2) +// CHECK-NEXT: ^bb17(%82: i256 loc({{.*}}:29:28)): // pred: ^bb16 +// CHECK-NEXT: %83 = arith.addi %77, %82 : i256 loc(#loc2) +// CHECK-NEXT: %84 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %84 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %85 = arith.addi %82, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb16(%85 : i256) loc(#loc2) +// CHECK-NEXT: ^bb18(%86: i256 loc({{.*}}:29:28)): // 2 preds: ^bb14, ^bb16 +// CHECK-NEXT: %87 = arith.addi %86, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb13(%87 : i256) loc(#loc2) +// CHECK-NEXT: ^bb19: // 2 preds: ^bb11, ^bb13 +// CHECK-NEXT: %88 = arith.addi %11, %c12_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb20(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb20(%89: i256 loc({{.*}}:29:28)): // 2 preds: ^bb19, ^bb21 +// CHECK-NEXT: %90 = arith.cmpi ult, %89, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %90, ^bb21(%89 : i256), ^bb22 loc(#loc2) +// CHECK-NEXT: ^bb21(%91: i256 loc({{.*}}:29:28)): // pred: ^bb20 +// CHECK-NEXT: %92 = arith.addi %88, %91 : i256 loc(#loc2) +// CHECK-NEXT: %93 = llvm.inttoptr %92 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %93 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %94 = arith.addi %91, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb20(%94 : i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb22: // pred: ^bb20 +// CHECK-NEXT: %95 = arith.addi %11, %c14_i256 : i256 loc(#loc2) +// CHECK-NEXT: %96 = llvm.inttoptr %95 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %96 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %97 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %97 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:26:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:29:4) +// CHECK-NEXT: #loc3 = loc({{.*}}:29:4) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/array-pop-struct.sol b/test/lit/mlirCodegen/EVM/array-pop-struct.sol index 2e9741e8a..b28087a91 100644 --- a/test/lit/mlirCodegen/EVM/array-pop-struct.sol +++ b/test/lit/mlirCodegen/EVM/array-pop-struct.sol @@ -43,6 +43,9 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc6 = loc({{.*}}:39:37) +// CHECK-NEXT: #loop_unroll = #llvm.loop_unroll +// CHECK-NEXT: #loop_annotation = #llvm.loop_annotation // CHECK-NEXT: module @C_89 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -268,44 +271,47 @@ contract C { // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc5) +// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc6) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: cf.br ^bb2 loc(#loc6) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c2_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %10 = arith.muli %6, %c5_i256 : i256 loc(#loc5) -// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc5) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %15 = arith.addi %11, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %17 = arith.addi %11, %c3_i256 : i256 loc(#loc5) -// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %19 = arith.addi %11, %c4_i256 : i256 loc(#loc5) -// CHECK-NEXT: %20 = llvm.inttoptr %19 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %21 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %6, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c2_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.muli %6, %c5_i256 : i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc6) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb3(%c0_i256 : i256) loc(#loc6) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:39:37)): // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: %15 = arith.cmpi ult, %14, %c3_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %15, ^bb4(%14 : i256), ^bb5 loc(#loc6) +// CHECK-NEXT: ^bb4(%16: i256 loc({{.*}}:39:37)): // pred: ^bb3 +// CHECK-NEXT: %17 = arith.addi %13, %16 : i256 loc(#loc6) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %19 = arith.addi %16, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb3(%19 : i256) {loop_annotation = #loop_annotation} loc(#loc6) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %20 = arith.addi %11, %c4_i256 : i256 loc(#loc6) +// CHECK-NEXT: %21 = llvm.inttoptr %20 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %22 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %6, %22 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) // CHECK-NEXT: return loc(#loc4) // CHECK-NEXT: } loc(#loc4) // CHECK-NEXT: func.func @popPacked_70() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { @@ -317,36 +323,36 @@ contract C { // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc7) +// CHECK-NEXT: %0 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc8) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb2 loc(#loc7) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb2 loc(#loc8) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c1_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %10 = arith.muli %6, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc7) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %15 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %6, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: return loc(#loc6) -// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c1_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %10 = arith.muli %6, %c2_i256 : i256 loc(#loc8) +// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc8) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: %15 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %6, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: return loc(#loc7) +// CHECK-NEXT: } loc(#loc7) // CHECK-NEXT: func.func @popScalars_61() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) @@ -357,39 +363,39 @@ contract C { // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc9) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc10) +// CHECK-NEXT: %2 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc10) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc10) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) -// CHECK-NEXT: cf.br ^bb2 loc(#loc9) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: llvm.store %c49_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc10) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc10) +// CHECK-NEXT: cf.br ^bb2 loc(#loc10) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) -// CHECK-NEXT: %10 = arith.muli %6, %c3_i256 : i256 loc(#loc9) -// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc9) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %15 = arith.addi %11, %c2_i256 : i256 loc(#loc9) -// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %6, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: return loc(#loc8) -// CHECK-NEXT: } loc(#loc8) +// CHECK-NEXT: %6 = arith.subi %1, %c1_i256 : i256 loc(#loc10) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: llvm.store %c0_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc10) +// CHECK-NEXT: %10 = arith.muli %6, %c3_i256 : i256 loc(#loc10) +// CHECK-NEXT: %11 = arith.addi %9, %10 : i256 loc(#loc10) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: llvm.store %c0_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: %13 = arith.addi %11, %c1_i256 : i256 loc(#loc10) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: %15 = arith.addi %11, %c2_i256 : i256 loc(#loc10) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: llvm.store %6, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: return loc(#loc9) +// CHECK-NEXT: } loc(#loc9) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) @@ -397,9 +403,9 @@ contract C { // CHECK-NEXT: #loc2 = loc({{.*}}:40:4) // CHECK-NEXT: #loc3 = loc({{.*}}:40:37) // CHECK-NEXT: #loc4 = loc({{.*}}:39:4) -// CHECK-NEXT: #loc5 = loc({{.*}}:39:37) -// CHECK-NEXT: #loc6 = loc({{.*}}:38:4) -// CHECK-NEXT: #loc7 = loc({{.*}}:38:37) -// CHECK-NEXT: #loc8 = loc({{.*}}:37:4) -// CHECK-NEXT: #loc9 = loc({{.*}}:37:37) +// CHECK-NEXT: #loc5 = loc({{.*}}:34:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:38:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:38:37) +// CHECK-NEXT: #loc9 = loc({{.*}}:37:4) +// CHECK-NEXT: #loc10 = loc({{.*}}:37:37) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/bytes-to-storage-cleanup.sol b/test/lit/mlirCodegen/EVM/bytes-to-storage-cleanup.sol index db6536e44..6c9808bc4 100644 --- a/test/lit/mlirCodegen/EVM/bytes-to-storage-cleanup.sol +++ b/test/lit/mlirCodegen/EVM/bytes-to-storage-cleanup.sol @@ -46,12 +46,11 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:39:33) -// CHECK-NEXT: #loc5 = loc({{.*}}:40:8) -// CHECK-NEXT: #loc7 = loc({{.*}}:18:4) -// CHECK-NEXT: #loc16 = loc({{.*}}:34:8) -// CHECK-NEXT: #loc23 = loc({{.*}}:22:13) -// CHECK-NEXT: #loc27 = loc({{.*}}:24:8) +// CHECK-NEXT: #loc2 = loc({{.*}}:40:8) +// CHECK-NEXT: #loc3 = loc({{.*}}:24:8) +// CHECK-NEXT: #loc4 = loc({{.*}}:18:4) +// CHECK-NEXT: #loc6 = loc({{.*}}:39:33) +// CHECK-NEXT: #loc24 = loc({{.*}}:22:13) // CHECK-NEXT: module @C_94 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -347,13 +346,7 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) -// CHECK-NEXT: func.func @calldata_to_storage_93(%arg0: !llvm.struct<(i256, i256)> loc({{.*}}:39:33)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) -// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) -// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) -// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) +// CHECK-NEXT: func.func @__sol.copy.calldata.storage.string(%arg0: i256 loc({{.*}}:40:8), %arg1: i256 loc({{.*}}:40:8), %arg2: i256 loc({{.*}}:40:8)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) @@ -368,275 +361,416 @@ contract C { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc3) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc4) -// CHECK-NEXT: %2 = llvm.extractvalue %1[1] : !llvm.struct<(i256, i256)> loc(#loc5) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %5 = arith.shrui %4, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %6 = arith.andi %4, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: %8 = arith.andi %5, %c127_i256 : i256 loc(#loc5) -// CHECK-NEXT: %9 = arith.select %7, %8, %5 : i256 loc(#loc5) -// CHECK-NEXT: %10 = arith.cmpi ult, %9, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %11 = arith.extui %10 : i1 to i256 loc(#loc5) -// CHECK-NEXT: %12 = arith.cmpi eq, %6, %11 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: %0 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c34_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %16 = arith.cmpi ugt, %9, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %16, ^bb3, ^bb6 loc(#loc5) +// CHECK-NEXT: call @__sol.clear_string_tail(%arg2, %6, %arg1) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %13 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb6, ^bb3 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %19 = "llvm.intrcall"(%18, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %20 = arith.addi %2, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %21 = arith.divui %20, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %22 = arith.addi %19, %21 : i256 loc(#loc5) -// CHECK-NEXT: %23 = arith.cmpi ult, %2, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %24 = arith.select %23, %19, %22 : i256 loc(#loc5) -// CHECK-NEXT: %25 = arith.addi %9, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %26 = arith.divui %25, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %27 = arith.addi %19, %26 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%24 : i256) loc(#loc5) -// CHECK-NEXT: ^bb4(%28: i256 loc({{.*}}:40:8)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %29 = arith.cmpi ult, %28, %27 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %29, ^bb5(%28 : i256), ^bb6 loc(#loc5) -// CHECK-NEXT: ^bb5(%30: i256 loc({{.*}}:40:8)): // pred: ^bb4 -// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %32 = arith.addi %30, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%32 : i256) loc(#loc5) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %33 = arith.cmpi ugt, %2, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %33, ^bb10, ^bb7 loc(#loc5) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %34 = arith.cmpi ne, %2, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %34, ^bb9, ^bb8 loc(#loc5) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) +// CHECK-NEXT: %14 = arith.cmpi ne, %arg1, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %14, ^bb5, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %15 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %16 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<2> loc(#loc2) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.muli %arg1, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.subi %c256_i256, %18 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.shli %c-1_i256, %19 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.andi %17, %20 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.muli %arg1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.ori %21, %22 : i256 loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg2, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %28 = arith.andi %arg1, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb7(%29: i256 loc({{.*}}:40:8)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %30 = arith.cmpi ult, %29, %28 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %30, ^bb8(%29 : i256), ^bb9 loc(#loc2) +// CHECK-NEXT: ^bb8(%31: i256 loc({{.*}}:40:8)): // pred: ^bb7 +// CHECK-NEXT: %32 = arith.divui %31, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %33 = arith.addi %arg0, %31 : i256 loc(#loc2) +// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<2> loc(#loc2) +// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc2) +// CHECK-NEXT: %36 = arith.addi %27, %32 : i256 loc(#loc2) +// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %35, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %38 = arith.addi %31, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%38 : i256) loc(#loc2) // CHECK-NEXT: ^bb9: // pred: ^bb7 -// CHECK-NEXT: %36 = llvm.extractvalue %1[0] : !llvm.struct<(i256, i256)> loc(#loc5) -// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<2> loc(#loc5) -// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc5) -// CHECK-NEXT: %39 = arith.muli %2, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %40 = arith.subi %c256_i256, %39 : i256 loc(#loc5) -// CHECK-NEXT: %41 = arith.shli %c-1_i256, %40 : i256 loc(#loc5) -// CHECK-NEXT: %42 = arith.andi %38, %41 : i256 loc(#loc5) -// CHECK-NEXT: %43 = arith.muli %2, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %44 = arith.ori %42, %43 : i256 loc(#loc5) -// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) -// CHECK-NEXT: ^bb10: // pred: ^bb6 -// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %48 = "llvm.intrcall"(%47, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %49 = llvm.extractvalue %1[0] : !llvm.struct<(i256, i256)> loc(#loc5) -// CHECK-NEXT: %50 = arith.andi %2, %c-32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc5) -// CHECK-NEXT: ^bb11(%51: i256 loc({{.*}}:40:8)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %52 = arith.cmpi ult, %51, %50 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %52, ^bb12(%51 : i256), ^bb13 loc(#loc5) -// CHECK-NEXT: ^bb12(%53: i256 loc({{.*}}:40:8)): // pred: ^bb11 -// CHECK-NEXT: %54 = arith.divui %53, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %55 = arith.addi %49, %53 : i256 loc(#loc5) -// CHECK-NEXT: %56 = llvm.inttoptr %55 : i256 to !llvm.ptr<2> loc(#loc5) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc5) -// CHECK-NEXT: %58 = arith.addi %48, %54 : i256 loc(#loc5) -// CHECK-NEXT: %59 = llvm.inttoptr %58 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %57, %59 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %60 = arith.addi %53, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb11(%60 : i256) loc(#loc5) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %61 = arith.cmpi ult, %50, %2 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %61, ^bb14, ^bb15 loc(#loc5) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %62 = arith.andi %2, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %63 = arith.divui %50, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %64 = arith.addi %49, %50 : i256 loc(#loc5) -// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<2> loc(#loc5) -// CHECK-NEXT: %66 = llvm.load %65 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc5) -// CHECK-NEXT: %67 = arith.muli %62, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %68 = arith.subi %c256_i256, %67 : i256 loc(#loc5) -// CHECK-NEXT: %69 = arith.shli %c-1_i256, %68 : i256 loc(#loc5) -// CHECK-NEXT: %70 = arith.andi %66, %69 : i256 loc(#loc5) -// CHECK-NEXT: %71 = arith.addi %48, %63 : i256 loc(#loc5) -// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %70, %72 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb15 loc(#loc5) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %73 = arith.muli %2, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %74 = arith.ori %73, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) -// CHECK-NEXT: ^bb16: // 3 preds: ^bb8, ^bb9, ^bb15 -// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %77 = llvm.load %76 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) -// CHECK-NEXT: %78 = arith.shrui %77, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %79 = arith.andi %77, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %80 = arith.cmpi eq, %79, %c0_i256 : i256 loc(#loc6) -// CHECK-NEXT: %81 = arith.andi %78, %c127_i256 : i256 loc(#loc6) -// CHECK-NEXT: %82 = arith.select %80, %81, %78 : i256 loc(#loc6) -// CHECK-NEXT: %83 = arith.cmpi ult, %82, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %84 = arith.extui %83 : i1 to i256 loc(#loc6) -// CHECK-NEXT: %85 = arith.cmpi eq, %79, %84 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %85, ^bb17, ^bb18 loc(#loc6) -// CHECK-NEXT: ^bb17: // pred: ^bb16 -// CHECK-NEXT: %86 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %87 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c34_i256, %87 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %88 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: "llvm.intrcall"(%88, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) -// CHECK-NEXT: cf.br ^bb18 loc(#loc6) -// CHECK-NEXT: ^bb18: // 2 preds: ^bb16, ^bb17 -// CHECK-NEXT: %89 = arith.cmpi ugt, %82, %c18446744073709551616_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %89, ^bb19, ^bb20 loc(#loc6) -// CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %90 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %90 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %91 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c65_i256, %91 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %92 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: "llvm.intrcall"(%92, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) -// CHECK-NEXT: cf.br ^bb20 loc(#loc6) -// CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// CHECK-NEXT: %93 = arith.cmpi ugt, %82, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %93, ^bb24, ^bb21 loc(#loc6) -// CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %94 = arith.cmpi eq, %82, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %94, ^bb23, ^bb22 loc(#loc6) -// CHECK-NEXT: ^bb22: // pred: ^bb21 -// CHECK-NEXT: %95 = arith.addi %77, %c2_i256 : i256 loc(#loc6) -// CHECK-NEXT: %96 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %95, %96 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb25 loc(#loc6) -// CHECK-NEXT: ^bb23: // pred: ^bb21 -// CHECK-NEXT: %97 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %97 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %98 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %99 = "llvm.intrcall"(%98, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %100 = arith.andi %77, %c-256_i256 : i256 loc(#loc6) -// CHECK-NEXT: %101 = llvm.inttoptr %99 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %100, %101 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %c65_i256, %102 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb25 loc(#loc6) -// CHECK-NEXT: ^bb24: // pred: ^bb20 -// CHECK-NEXT: %103 = arith.addi %77, %c2_i256 : i256 loc(#loc6) -// CHECK-NEXT: %104 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %104 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %105 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %106 = "llvm.intrcall"(%105, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %107 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %103, %107 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb25 loc(#loc6) -// CHECK-NEXT: ^bb25: // 3 preds: ^bb22, ^bb23, ^bb24 -// CHECK-NEXT: %108 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %109 = llvm.load %108 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %110 = arith.shrui %109, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %111 = arith.andi %109, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %112 = arith.cmpi eq, %111, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %113 = arith.andi %110, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %114 = arith.select %112, %113, %110 : i256 loc(#loc7) -// CHECK-NEXT: %115 = arith.cmpi ult, %114, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %116 = arith.extui %115 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %117 = arith.cmpi eq, %111, %116 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %117, ^bb26, ^bb27 loc(#loc7) -// CHECK-NEXT: ^bb26: // pred: ^bb25 -// CHECK-NEXT: %118 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %118 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %119 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %119 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %120 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%120, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb27 loc(#loc7) -// CHECK-NEXT: ^bb27: // 2 preds: ^bb25, ^bb26 -// CHECK-NEXT: %121 = arith.addi %114, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %122 = arith.andi %121, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %123 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %124 = llvm.load %123 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %125 = arith.addi %122, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %126 = arith.andi %125, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %127 = arith.addi %124, %126 : i256 loc(#loc7) -// CHECK-NEXT: %128 = arith.cmpi ugt, %127, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %129 = arith.cmpi ult, %127, %124 : i256 loc(#loc7) -// CHECK-NEXT: %130 = arith.ori %128, %129 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %130, ^bb28, ^bb29 loc(#loc7) -// CHECK-NEXT: ^bb28: // pred: ^bb27 -// CHECK-NEXT: %131 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %131 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %132 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %132 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %133 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%133, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb29 loc(#loc7) -// CHECK-NEXT: ^bb29: // 2 preds: ^bb27, ^bb28 -// CHECK-NEXT: %134 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %127, %134 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %135 = llvm.inttoptr %124 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %114, %135 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %136 = arith.addi %124, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %137 = llvm.inttoptr %124 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %114, %137 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %138 = arith.andi %109, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %139 = arith.cmpi eq, %138, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %139, ^bb33, ^bb30 loc(#loc7) -// CHECK-NEXT: ^bb30: // pred: ^bb29 -// CHECK-NEXT: %140 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %140 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %141 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %142 = "llvm.intrcall"(%141, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb31(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb31(%143: i256 loc({{.*}}:18:4)): // 2 preds: ^bb30, ^bb32 -// CHECK-NEXT: %144 = arith.cmpi ult, %143, %114 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %144, ^bb32(%143 : i256), ^bb34 loc(#loc7) -// CHECK-NEXT: ^bb32(%145: i256 loc({{.*}}:18:4)): // pred: ^bb31 -// CHECK-NEXT: %146 = arith.divui %145, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %147 = arith.addi %142, %146 : i256 loc(#loc7) -// CHECK-NEXT: %148 = llvm.inttoptr %147 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %149 = llvm.load %148 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %150 = arith.addi %136, %145 : i256 loc(#loc7) -// CHECK-NEXT: %151 = llvm.inttoptr %150 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %149, %151 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %152 = arith.addi %145, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb31(%152 : i256) loc(#loc7) -// CHECK-NEXT: ^bb33: // pred: ^bb29 -// CHECK-NEXT: %153 = arith.andi %109, %c-256_i256 : i256 loc(#loc7) -// CHECK-NEXT: %154 = llvm.inttoptr %136 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %153, %154 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb34 loc(#loc7) -// CHECK-NEXT: ^bb34: // 2 preds: ^bb31, ^bb33 -// CHECK-NEXT: return %124 : i256 loc(#loc8) +// CHECK-NEXT: %39 = arith.cmpi ult, %28, %arg1 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %39, ^bb10, ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %40 = arith.andi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %41 = arith.divui %28, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %42 = arith.addi %arg0, %28 : i256 loc(#loc2) +// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<2> loc(#loc2) +// CHECK-NEXT: %44 = llvm.load %43 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc2) +// CHECK-NEXT: %45 = arith.muli %40, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %46 = arith.subi %c256_i256, %45 : i256 loc(#loc2) +// CHECK-NEXT: %47 = arith.shli %c-1_i256, %46 : i256 loc(#loc2) +// CHECK-NEXT: %48 = arith.andi %44, %47 : i256 loc(#loc2) +// CHECK-NEXT: %49 = arith.addi %27, %41 : i256 loc(#loc2) +// CHECK-NEXT: %50 = llvm.inttoptr %49 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %48, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %51 = arith.muli %arg1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %52 = arith.ori %51, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %53 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %52, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc2) // CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:24:8), %arg1: i256 loc({{.*}}:24:8), %arg2: i256 loc({{.*}}:24:8)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:24:8)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:24:8)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:24:8), %arg1: i256 loc({{.*}}:24:8)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc3) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc3) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:24:8)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:24:8)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc3) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc3) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc3) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc3) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc3) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc3) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:18:4), %arg1: i256 loc({{.*}}:18:4), %arg2: i256 loc({{.*}}:18:4), %arg3: i256 loc({{.*}}:18:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc4) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc4) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:18:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc4) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:18:4)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc4) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc4) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc4) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc4) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: cf.br ^bb5 loc(#loc4) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc4) +// CHECK-NEXT: } loc(#loc4) +// CHECK-NEXT: func.func @calldata_to_storage_93(%arg0: !llvm.struct<(i256, i256)> loc({{.*}}:39:33)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc6) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc6) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc7) +// CHECK-NEXT: %2 = llvm.extractvalue %1[0] : !llvm.struct<(i256, i256)> loc(#loc2) +// CHECK-NEXT: %3 = llvm.extractvalue %1[1] : !llvm.struct<(i256, i256)> loc(#loc2) +// CHECK-NEXT: call @__sol.copy.calldata.storage.string(%2, %3, %c0_i256) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) +// CHECK-NEXT: %6 = arith.shrui %5, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: %7 = arith.andi %5, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: %8 = arith.cmpi eq, %7, %c0_i256 : i256 loc(#loc8) +// CHECK-NEXT: %9 = arith.andi %6, %c127_i256 : i256 loc(#loc8) +// CHECK-NEXT: %10 = arith.select %8, %9, %6 : i256 loc(#loc8) +// CHECK-NEXT: %11 = arith.cmpi ult, %10, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %12 = arith.extui %11 : i1 to i256 loc(#loc8) +// CHECK-NEXT: %13 = arith.cmpi eq, %7, %12 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %13, ^bb1, ^bb2 loc(#loc8) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c34_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb2 loc(#loc8) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %17 = arith.cmpi ugt, %10, %c18446744073709551616_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb4 loc(#loc8) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %19 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%20, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb4 loc(#loc8) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %21 = arith.cmpi ugt, %10, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %21, ^bb8, ^bb5 loc(#loc8) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %22 = arith.cmpi eq, %10, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %22, ^bb7, ^bb6 loc(#loc8) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %23 = arith.addi %5, %c2_i256 : i256 loc(#loc8) +// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: cf.br ^bb9 loc(#loc8) +// CHECK-NEXT: ^bb7: // pred: ^bb5 +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c0_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %28 = arith.andi %5, %c-256_i256 : i256 loc(#loc8) +// CHECK-NEXT: %29 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %28, %29 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: cf.br ^bb9 loc(#loc8) +// CHECK-NEXT: ^bb8: // pred: ^bb4 +// CHECK-NEXT: %31 = arith.addi %5, %c2_i256 : i256 loc(#loc8) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %31, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: cf.br ^bb9 loc(#loc8) +// CHECK-NEXT: ^bb9: // 3 preds: ^bb6, ^bb7, ^bb8 +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %37 = llvm.load %36 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %38 = arith.shrui %37, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %39 = arith.andi %37, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %40 = arith.cmpi eq, %39, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: %41 = arith.andi %38, %c127_i256 : i256 loc(#loc4) +// CHECK-NEXT: %42 = arith.select %40, %41, %38 : i256 loc(#loc4) +// CHECK-NEXT: %43 = arith.cmpi ult, %42, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %44 = arith.extui %43 : i1 to i256 loc(#loc4) +// CHECK-NEXT: %45 = arith.cmpi eq, %39, %44 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %45, ^bb10, ^bb11 loc(#loc4) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %47 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c34_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%48, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb11 loc(#loc4) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %49 = arith.addi %42, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %50 = arith.andi %49, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %51 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %52 = llvm.load %51 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %53 = arith.addi %50, %c63_i256 : i256 loc(#loc4) +// CHECK-NEXT: %54 = arith.andi %53, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %55 = arith.addi %52, %54 : i256 loc(#loc4) +// CHECK-NEXT: %56 = arith.cmpi ugt, %55, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: %57 = arith.cmpi ult, %55, %52 : i256 loc(#loc4) +// CHECK-NEXT: %58 = arith.ori %56, %57 : i1 loc(#loc4) +// CHECK-NEXT: cf.cond_br %58, ^bb12, ^bb13 loc(#loc4) +// CHECK-NEXT: ^bb12: // pred: ^bb11 +// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %59 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %60 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %60 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %61 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%61, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb13 loc(#loc4) +// CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 +// CHECK-NEXT: %62 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %55, %62 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %63 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %42, %63 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %64 = arith.addi %52, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %65 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %42, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %37, %42, %64) : (i256, i256, i256, i256) -> () loc(#loc4) +// CHECK-NEXT: return %52 : i256 loc(#loc9) +// CHECK-NEXT: } loc(#loc5) // CHECK-NEXT: func.func @dirty_past_end_74() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c95_i256 = arith.constant 95 : i256 loc(#loc) // CHECK-NEXT: %c96_i256 = arith.constant 96 : i256 loc(#loc) // CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) -// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c66_i256 = arith.constant 66 : i256 loc(#loc) @@ -652,305 +786,161 @@ contract C { // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc10) -// CHECK-NEXT: %2 = arith.addi %1, %c96_i256 : i256 loc(#loc10) -// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc10) -// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc10) -// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc10) -// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc10) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) +// CHECK-NEXT: %2 = arith.addi %1, %c96_i256 : i256 loc(#loc11) +// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc11) +// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc11) +// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc11) +// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc11) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc10) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc10) -// CHECK-NEXT: cf.br ^bb2 loc(#loc10) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) +// CHECK-NEXT: cf.br ^bb2 loc(#loc11) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %c63_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc10) -// CHECK-NEXT: %13 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %14 = llvm.inttoptr %12 : i256 to !llvm.ptr<2> loc(#loc10) -// CHECK-NEXT: "llvm.intr.memcpy"(%13, %14, %c64_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc10) -// CHECK-NEXT: %15 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc11) -// CHECK-NEXT: llvm.store %1, %15 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc11) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc12) -// CHECK-NEXT: %17 = arith.addi %16, %c95_i256 : i256 loc(#loc13) -// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: "llvm.intrcall"(%18, %c66_i256) <{id = 4072 : i32, name = "evm.mstore8"}> : (!llvm.ptr<1>, i256) -> () loc(#loc14) -// CHECK-NEXT: %19 = llvm.load %15 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc15) -// CHECK-NEXT: %20 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %24 = arith.shrui %23, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %25 = arith.andi %23, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %26 = arith.cmpi eq, %25, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: %27 = arith.andi %24, %c127_i256 : i256 loc(#loc16) -// CHECK-NEXT: %28 = arith.select %26, %27, %24 : i256 loc(#loc16) -// CHECK-NEXT: %29 = arith.cmpi ult, %28, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %30 = arith.extui %29 : i1 to i256 loc(#loc16) -// CHECK-NEXT: %31 = arith.cmpi eq, %25, %30 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %31, ^bb3, ^bb4 loc(#loc16) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c63_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc11) +// CHECK-NEXT: %13 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %14 = llvm.inttoptr %12 : i256 to !llvm.ptr<2> loc(#loc11) +// CHECK-NEXT: "llvm.intr.memcpy"(%13, %14, %c64_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc11) +// CHECK-NEXT: %15 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc12) +// CHECK-NEXT: llvm.store %1, %15 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc12) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc13) +// CHECK-NEXT: %17 = arith.addi %16, %c95_i256 : i256 loc(#loc14) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: "llvm.intrcall"(%18, %c66_i256) <{id = 4072 : i32, name = "evm.mstore8"}> : (!llvm.ptr<1>, i256) -> () loc(#loc15) +// CHECK-NEXT: %19 = llvm.load %15 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc16) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%19, %c0_i256) : (i256, i256) -> () loc(#loc17) +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc18) +// CHECK-NEXT: %22 = arith.shrui %21, %c1_i256 : i256 loc(#loc18) +// CHECK-NEXT: %23 = arith.andi %21, %c1_i256 : i256 loc(#loc18) +// CHECK-NEXT: %24 = arith.cmpi eq, %23, %c0_i256 : i256 loc(#loc18) +// CHECK-NEXT: %25 = arith.andi %22, %c127_i256 : i256 loc(#loc18) +// CHECK-NEXT: %26 = arith.select %24, %25, %22 : i256 loc(#loc18) +// CHECK-NEXT: %27 = arith.cmpi ult, %26, %c32_i256 : i256 loc(#loc18) +// CHECK-NEXT: %28 = arith.extui %27 : i1 to i256 loc(#loc18) +// CHECK-NEXT: %29 = arith.cmpi eq, %23, %28 : i256 loc(#loc18) +// CHECK-NEXT: cf.cond_br %29, ^bb3, ^bb4 loc(#loc18) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %33 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c34_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%34, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb4 loc(#loc16) +// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %31 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c34_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: "llvm.intrcall"(%32, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc18) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc18) +// CHECK-NEXT: cf.br ^bb4 loc(#loc18) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %35 = arith.cmpi ugt, %28, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %35, ^bb5, ^bb8 loc(#loc16) +// CHECK-NEXT: %33 = arith.cmpi ugt, %26, %c18446744073709551616_i256 : i256 loc(#loc18) +// CHECK-NEXT: cf.cond_br %33, ^bb5, ^bb6 loc(#loc18) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %38 = "llvm.intrcall"(%37, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %39 = arith.addi %21, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %40 = arith.divui %39, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %41 = arith.addi %38, %40 : i256 loc(#loc16) -// CHECK-NEXT: %42 = arith.cmpi ult, %21, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %43 = arith.select %42, %38, %41 : i256 loc(#loc16) -// CHECK-NEXT: %44 = arith.addi %28, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %45 = arith.divui %44, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %46 = arith.addi %38, %45 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb6(%43 : i256) loc(#loc16) -// CHECK-NEXT: ^bb6(%47: i256 loc({{.*}}:34:8)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %48 = arith.cmpi ult, %47, %46 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %48, ^bb7(%47 : i256), ^bb8 loc(#loc16) -// CHECK-NEXT: ^bb7(%49: i256 loc({{.*}}:34:8)): // pred: ^bb6 -// CHECK-NEXT: %50 = llvm.inttoptr %49 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %51 = arith.addi %49, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb6(%51 : i256) loc(#loc16) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %52 = arith.cmpi ugt, %21, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %52, ^bb12, ^bb9 loc(#loc16) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %53 = arith.cmpi ne, %21, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %53, ^bb11, ^bb10 loc(#loc16) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb18 loc(#loc16) -// CHECK-NEXT: ^bb11: // pred: ^bb9 -// CHECK-NEXT: %55 = arith.addi %19, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %56 = llvm.inttoptr %55 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %58 = arith.muli %21, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %59 = arith.subi %c256_i256, %58 : i256 loc(#loc16) -// CHECK-NEXT: %60 = arith.shli %c-1_i256, %59 : i256 loc(#loc16) -// CHECK-NEXT: %61 = arith.andi %57, %60 : i256 loc(#loc16) -// CHECK-NEXT: %62 = arith.muli %21, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %63 = arith.ori %61, %62 : i256 loc(#loc16) -// CHECK-NEXT: %64 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %63, %64 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb18 loc(#loc16) -// CHECK-NEXT: ^bb12: // pred: ^bb8 -// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %66 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %67 = "llvm.intrcall"(%66, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %68 = arith.addi %19, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %69 = arith.andi %21, %c-32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb13(%70: i256 loc({{.*}}:34:8)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %71 = arith.cmpi ult, %70, %69 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %71, ^bb14(%70 : i256), ^bb15 loc(#loc16) -// CHECK-NEXT: ^bb14(%72: i256 loc({{.*}}:34:8)): // pred: ^bb13 -// CHECK-NEXT: %73 = arith.divui %72, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %74 = arith.addi %68, %72 : i256 loc(#loc16) -// CHECK-NEXT: %75 = llvm.inttoptr %74 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %76 = llvm.load %75 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %77 = arith.addi %67, %73 : i256 loc(#loc16) -// CHECK-NEXT: %78 = llvm.inttoptr %77 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %76, %78 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %79 = arith.addi %72, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb13(%79 : i256) loc(#loc16) -// CHECK-NEXT: ^bb15: // pred: ^bb13 -// CHECK-NEXT: %80 = arith.cmpi ult, %69, %21 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %80, ^bb16, ^bb17 loc(#loc16) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %81 = arith.andi %21, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %82 = arith.divui %69, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %83 = arith.addi %68, %69 : i256 loc(#loc16) -// CHECK-NEXT: %84 = llvm.inttoptr %83 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %85 = llvm.load %84 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %86 = arith.muli %81, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %87 = arith.subi %c256_i256, %86 : i256 loc(#loc16) -// CHECK-NEXT: %88 = arith.shli %c-1_i256, %87 : i256 loc(#loc16) -// CHECK-NEXT: %89 = arith.andi %85, %88 : i256 loc(#loc16) -// CHECK-NEXT: %90 = arith.addi %67, %82 : i256 loc(#loc16) -// CHECK-NEXT: %91 = llvm.inttoptr %90 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %89, %91 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb17 loc(#loc16) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %92 = arith.muli %21, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %93 = arith.ori %92, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %94 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %93, %94 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb18 loc(#loc16) -// CHECK-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 -// CHECK-NEXT: %95 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: %96 = llvm.load %95 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) -// CHECK-NEXT: %97 = arith.shrui %96, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %98 = arith.andi %96, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %99 = arith.cmpi eq, %98, %c0_i256 : i256 loc(#loc17) -// CHECK-NEXT: %100 = arith.andi %97, %c127_i256 : i256 loc(#loc17) -// CHECK-NEXT: %101 = arith.select %99, %100, %97 : i256 loc(#loc17) -// CHECK-NEXT: %102 = arith.cmpi ult, %101, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %103 = arith.extui %102 : i1 to i256 loc(#loc17) -// CHECK-NEXT: %104 = arith.cmpi eq, %98, %103 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %104, ^bb19, ^bb20 loc(#loc17) -// CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %105 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %105 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %106 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c34_i256, %106 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %107 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: "llvm.intrcall"(%107, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) -// CHECK-NEXT: cf.br ^bb20 loc(#loc17) -// CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// CHECK-NEXT: %108 = arith.cmpi ugt, %101, %c18446744073709551616_i256 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %108, ^bb21, ^bb22 loc(#loc17) -// CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %109 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %109 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %110 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c65_i256, %110 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %111 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: "llvm.intrcall"(%111, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) -// CHECK-NEXT: cf.br ^bb22 loc(#loc17) -// CHECK-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// CHECK-NEXT: %112 = arith.cmpi ugt, %101, %c31_i256 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %112, ^bb26, ^bb23 loc(#loc17) -// CHECK-NEXT: ^bb23: // pred: ^bb22 -// CHECK-NEXT: %113 = arith.cmpi eq, %101, %c31_i256 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %113, ^bb25, ^bb24 loc(#loc17) -// CHECK-NEXT: ^bb24: // pred: ^bb23 -// CHECK-NEXT: %114 = arith.addi %96, %c2_i256 : i256 loc(#loc17) -// CHECK-NEXT: %115 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: llvm.store %114, %115 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: cf.br ^bb27 loc(#loc17) -// CHECK-NEXT: ^bb25: // pred: ^bb23 -// CHECK-NEXT: %116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c0_i256, %116 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %117 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %118 = "llvm.intrcall"(%117, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc17) -// CHECK-NEXT: %119 = arith.andi %96, %c-256_i256 : i256 loc(#loc17) -// CHECK-NEXT: %120 = llvm.inttoptr %118 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: llvm.store %119, %120 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: %121 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: llvm.store %c65_i256, %121 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: cf.br ^bb27 loc(#loc17) -// CHECK-NEXT: ^bb26: // pred: ^bb22 -// CHECK-NEXT: %122 = arith.addi %96, %c2_i256 : i256 loc(#loc17) -// CHECK-NEXT: %123 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c0_i256, %123 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %124 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %125 = "llvm.intrcall"(%124, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc17) -// CHECK-NEXT: %126 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: llvm.store %122, %126 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: cf.br ^bb27 loc(#loc17) -// CHECK-NEXT: ^bb27: // 3 preds: ^bb24, ^bb25, ^bb26 -// CHECK-NEXT: %127 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %128 = llvm.load %127 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %129 = arith.shrui %128, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %130 = arith.andi %128, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %131 = arith.cmpi eq, %130, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %132 = arith.andi %129, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %133 = arith.select %131, %132, %129 : i256 loc(#loc7) -// CHECK-NEXT: %134 = arith.cmpi ult, %133, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %135 = arith.extui %134 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %136 = arith.cmpi eq, %130, %135 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %136, ^bb28, ^bb29 loc(#loc7) -// CHECK-NEXT: ^bb28: // pred: ^bb27 -// CHECK-NEXT: %137 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %137 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %138 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %138 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %139 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%139, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb29 loc(#loc7) -// CHECK-NEXT: ^bb29: // 2 preds: ^bb27, ^bb28 -// CHECK-NEXT: %140 = arith.addi %133, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %141 = arith.andi %140, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %142 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %143 = llvm.load %142 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %144 = arith.addi %141, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %145 = arith.andi %144, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %146 = arith.addi %143, %145 : i256 loc(#loc7) -// CHECK-NEXT: %147 = arith.cmpi ugt, %146, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %148 = arith.cmpi ult, %146, %143 : i256 loc(#loc7) -// CHECK-NEXT: %149 = arith.ori %147, %148 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %149, ^bb30, ^bb31 loc(#loc7) -// CHECK-NEXT: ^bb30: // pred: ^bb29 -// CHECK-NEXT: %150 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %150 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %151 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %151 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %152 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%152, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb31 loc(#loc7) -// CHECK-NEXT: ^bb31: // 2 preds: ^bb29, ^bb30 -// CHECK-NEXT: %153 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %146, %153 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %154 = llvm.inttoptr %143 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %133, %154 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %155 = arith.addi %143, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %156 = llvm.inttoptr %143 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %133, %156 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %157 = arith.andi %128, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %158 = arith.cmpi eq, %157, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %158, ^bb35, ^bb32 loc(#loc7) -// CHECK-NEXT: ^bb32: // pred: ^bb31 -// CHECK-NEXT: %159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %159 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %160 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %161 = "llvm.intrcall"(%160, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb33(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb33(%162: i256 loc({{.*}}:18:4)): // 2 preds: ^bb32, ^bb34 -// CHECK-NEXT: %163 = arith.cmpi ult, %162, %133 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %163, ^bb34(%162 : i256), ^bb36 loc(#loc7) -// CHECK-NEXT: ^bb34(%164: i256 loc({{.*}}:18:4)): // pred: ^bb33 -// CHECK-NEXT: %165 = arith.divui %164, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %166 = arith.addi %161, %165 : i256 loc(#loc7) -// CHECK-NEXT: %167 = llvm.inttoptr %166 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %168 = llvm.load %167 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %169 = arith.addi %155, %164 : i256 loc(#loc7) -// CHECK-NEXT: %170 = llvm.inttoptr %169 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %168, %170 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %171 = arith.addi %164, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb33(%171 : i256) loc(#loc7) -// CHECK-NEXT: ^bb35: // pred: ^bb31 -// CHECK-NEXT: %172 = arith.andi %128, %c-256_i256 : i256 loc(#loc7) -// CHECK-NEXT: %173 = llvm.inttoptr %155 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %172, %173 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb36 loc(#loc7) -// CHECK-NEXT: ^bb36: // 2 preds: ^bb33, ^bb35 -// CHECK-NEXT: return %143 : i256 loc(#loc18) -// CHECK-NEXT: } loc(#loc9) +// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %35 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c65_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: "llvm.intrcall"(%36, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc18) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc18) +// CHECK-NEXT: cf.br ^bb6 loc(#loc18) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %37 = arith.cmpi ugt, %26, %c31_i256 : i256 loc(#loc18) +// CHECK-NEXT: cf.cond_br %37, ^bb10, ^bb7 loc(#loc18) +// CHECK-NEXT: ^bb7: // pred: ^bb6 +// CHECK-NEXT: %38 = arith.cmpi eq, %26, %c31_i256 : i256 loc(#loc18) +// CHECK-NEXT: cf.cond_br %38, ^bb9, ^bb8 loc(#loc18) +// CHECK-NEXT: ^bb8: // pred: ^bb7 +// CHECK-NEXT: %39 = arith.addi %21, %c2_i256 : i256 loc(#loc18) +// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: llvm.store %39, %40 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: cf.br ^bb11 loc(#loc18) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c0_i256, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %42 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %43 = "llvm.intrcall"(%42, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc18) +// CHECK-NEXT: %44 = arith.andi %21, %c-256_i256 : i256 loc(#loc18) +// CHECK-NEXT: %45 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: llvm.store %c65_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: cf.br ^bb11 loc(#loc18) +// CHECK-NEXT: ^bb10: // pred: ^bb6 +// CHECK-NEXT: %47 = arith.addi %21, %c2_i256 : i256 loc(#loc18) +// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c0_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %50 = "llvm.intrcall"(%49, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc18) +// CHECK-NEXT: %51 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: llvm.store %47, %51 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: cf.br ^bb11 loc(#loc18) +// CHECK-NEXT: ^bb11: // 3 preds: ^bb8, ^bb9, ^bb10 +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %53 = llvm.load %52 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %54 = arith.shrui %53, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %55 = arith.andi %53, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %56 = arith.cmpi eq, %55, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: %57 = arith.andi %54, %c127_i256 : i256 loc(#loc4) +// CHECK-NEXT: %58 = arith.select %56, %57, %54 : i256 loc(#loc4) +// CHECK-NEXT: %59 = arith.cmpi ult, %58, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %60 = arith.extui %59 : i1 to i256 loc(#loc4) +// CHECK-NEXT: %61 = arith.cmpi eq, %55, %60 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %61, ^bb12, ^bb13 loc(#loc4) +// CHECK-NEXT: ^bb12: // pred: ^bb11 +// CHECK-NEXT: %62 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %62 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %63 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c34_i256, %63 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %64 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%64, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb13 loc(#loc4) +// CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 +// CHECK-NEXT: %65 = arith.addi %58, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %66 = arith.andi %65, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %67 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %68 = llvm.load %67 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %69 = arith.addi %66, %c63_i256 : i256 loc(#loc4) +// CHECK-NEXT: %70 = arith.andi %69, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %71 = arith.addi %68, %70 : i256 loc(#loc4) +// CHECK-NEXT: %72 = arith.cmpi ugt, %71, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: %73 = arith.cmpi ult, %71, %68 : i256 loc(#loc4) +// CHECK-NEXT: %74 = arith.ori %72, %73 : i1 loc(#loc4) +// CHECK-NEXT: cf.cond_br %74, ^bb14, ^bb15 loc(#loc4) +// CHECK-NEXT: ^bb14: // pred: ^bb13 +// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %76 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%77, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb15 loc(#loc4) +// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 +// CHECK-NEXT: %78 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %71, %78 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %79 = llvm.inttoptr %68 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %58, %79 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %80 = arith.addi %68, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %81 = llvm.inttoptr %68 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %58, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %53, %58, %80) : (i256, i256, i256, i256) -> () loc(#loc4) +// CHECK-NEXT: return %68 : i256 loc(#loc19) +// CHECK-NEXT: } loc(#loc10) // CHECK-NEXT: func.func @new_after_event_49() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) // CHECK-NEXT: %c96_i256 = arith.constant 96 : i256 loc(#loc) // CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c-51782471919150174875513732347891173448694462201697601387559887270942749497714_i256 = arith.constant -51782471919150174875513732347891173448694462201697601387559887270942749497714 : i256 loc(#loc) @@ -967,358 +957,216 @@ contract C { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c33_i256 = arith.constant 33 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc20) -// CHECK-NEXT: %2 = arith.addi %1, %c96_i256 : i256 loc(#loc20) -// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc20) -// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc20) -// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc20) -// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc20) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc21) +// CHECK-NEXT: %2 = arith.addi %1, %c96_i256 : i256 loc(#loc21) +// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc21) +// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc21) +// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc21) +// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc21) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc20) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc20) -// CHECK-NEXT: cf.br ^bb2 loc(#loc20) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc21) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc21) +// CHECK-NEXT: cf.br ^bb2 loc(#loc21) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %c2_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc20) -// CHECK-NEXT: %13 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %14 = llvm.inttoptr %12 : i256 to !llvm.ptr<2> loc(#loc20) -// CHECK-NEXT: "llvm.intr.memcpy"(%13, %14, %c64_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc20) -// CHECK-NEXT: %15 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc21) -// CHECK-NEXT: llvm.store %1, %15 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc21) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc22) -// CHECK-NEXT: %17 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %18 = llvm.load %17 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc23) -// CHECK-NEXT: %19 = arith.addi %18, %c64_i256 : i256 loc(#loc23) -// CHECK-NEXT: %20 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: llvm.store %c64_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %21 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc23) -// CHECK-NEXT: %23 = arith.addi %16, %c32_i256 : i256 loc(#loc23) -// CHECK-NEXT: %24 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: llvm.store %22, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %25 = arith.addi %18, %c96_i256 : i256 loc(#loc23) -// CHECK-NEXT: %26 = arith.muli %22, %c32_i256 : i256 loc(#loc23) -// CHECK-NEXT: %27 = arith.addi %25, %26 : i256 loc(#loc23) -// CHECK-NEXT: cf.br ^bb3(%c0_i256, %25, %23, %27 : i256, i256, i256, i256) loc(#loc23) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: llvm.store %c2_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc21) +// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc21) +// CHECK-NEXT: %13 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc21) +// CHECK-NEXT: %14 = llvm.inttoptr %12 : i256 to !llvm.ptr<2> loc(#loc21) +// CHECK-NEXT: "llvm.intr.memcpy"(%13, %14, %c64_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc21) +// CHECK-NEXT: %15 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc22) +// CHECK-NEXT: llvm.store %1, %15 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc22) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc23) +// CHECK-NEXT: %17 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %18 = llvm.load %17 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc24) +// CHECK-NEXT: %19 = arith.addi %18, %c64_i256 : i256 loc(#loc24) +// CHECK-NEXT: %20 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: llvm.store %c64_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %21 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc24) +// CHECK-NEXT: %23 = arith.addi %16, %c32_i256 : i256 loc(#loc24) +// CHECK-NEXT: %24 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: llvm.store %22, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %25 = arith.addi %18, %c96_i256 : i256 loc(#loc24) +// CHECK-NEXT: %26 = arith.muli %22, %c32_i256 : i256 loc(#loc24) +// CHECK-NEXT: %27 = arith.addi %25, %26 : i256 loc(#loc24) +// CHECK-NEXT: cf.br ^bb3(%c0_i256, %25, %23, %27 : i256, i256, i256, i256) loc(#loc24) // CHECK-NEXT: ^bb3(%28: i256 loc({{.*}}:22:13), %29: i256 loc({{.*}}:22:13), %30: i256 loc({{.*}}:22:13), %31: i256 loc({{.*}}:22:13)): // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %32 = arith.cmpi ult, %28, %22 : i256 loc(#loc23) -// CHECK-NEXT: cf.cond_br %32, ^bb4(%28, %29, %30, %31 : i256, i256, i256, i256), ^bb5(%31 : i256) loc(#loc23) +// CHECK-NEXT: %32 = arith.cmpi ult, %28, %22 : i256 loc(#loc24) +// CHECK-NEXT: cf.cond_br %32, ^bb4(%28, %29, %30, %31 : i256, i256, i256, i256), ^bb5(%31 : i256) loc(#loc24) // CHECK-NEXT: ^bb4(%33: i256 loc({{.*}}:22:13), %34: i256 loc({{.*}}:22:13), %35: i256 loc({{.*}}:22:13), %36: i256 loc({{.*}}:22:13)): // pred: ^bb3 -// CHECK-NEXT: %37 = llvm.inttoptr %35 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc23) -// CHECK-NEXT: %39 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %40 = arith.addi %34, %c32_i256 : i256 loc(#loc23) -// CHECK-NEXT: %41 = arith.addi %35, %c32_i256 : i256 loc(#loc23) -// CHECK-NEXT: %42 = arith.addi %33, %c1_i256 : i256 loc(#loc23) -// CHECK-NEXT: cf.br ^bb3(%42, %40, %41, %36 : i256, i256, i256, i256) loc(#loc23) +// CHECK-NEXT: %37 = llvm.inttoptr %35 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc24) +// CHECK-NEXT: %39 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %40 = arith.addi %34, %c32_i256 : i256 loc(#loc24) +// CHECK-NEXT: %41 = arith.addi %35, %c32_i256 : i256 loc(#loc24) +// CHECK-NEXT: %42 = arith.addi %33, %c1_i256 : i256 loc(#loc24) +// CHECK-NEXT: cf.br ^bb3(%42, %40, %41, %36 : i256, i256, i256, i256) loc(#loc24) // CHECK-NEXT: ^bb5(%43: i256 loc({{.*}}:22:13)): // pred: ^bb3 -// CHECK-NEXT: %44 = arith.addi %18, %c32_i256 : i256 loc(#loc23) -// CHECK-NEXT: %45 = llvm.inttoptr %44 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: llvm.store %c33_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %46 = arith.subi %43, %18 : i256 loc(#loc23) -// CHECK-NEXT: %47 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: "llvm.intrcall"(%47, %46, %c-51782471919150174875513732347891173448694462201697601387559887270942749497714_i256) <{id = 4062 : i32, name = "evm.log1"}> : (!llvm.ptr<1>, i256, i256) -> () loc(#loc23) -// CHECK-NEXT: %48 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc24) -// CHECK-NEXT: %50 = arith.addi %49, %c96_i256 : i256 loc(#loc24) -// CHECK-NEXT: %51 = arith.cmpi ugt, %50, %c18446744073709551615_i256 : i256 loc(#loc24) -// CHECK-NEXT: %52 = arith.cmpi ult, %50, %49 : i256 loc(#loc24) -// CHECK-NEXT: %53 = arith.ori %51, %52 : i1 loc(#loc24) -// CHECK-NEXT: cf.cond_br %53, ^bb6, ^bb7 loc(#loc24) +// CHECK-NEXT: %44 = arith.addi %18, %c32_i256 : i256 loc(#loc24) +// CHECK-NEXT: %45 = llvm.inttoptr %44 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: llvm.store %c33_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %46 = arith.subi %43, %18 : i256 loc(#loc24) +// CHECK-NEXT: %47 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: "llvm.intrcall"(%47, %46, %c-51782471919150174875513732347891173448694462201697601387559887270942749497714_i256) <{id = 4062 : i32, name = "evm.log1"}> : (!llvm.ptr<1>, i256, i256) -> () loc(#loc24) +// CHECK-NEXT: %48 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc25) +// CHECK-NEXT: %50 = arith.addi %49, %c96_i256 : i256 loc(#loc25) +// CHECK-NEXT: %51 = arith.cmpi ugt, %50, %c18446744073709551615_i256 : i256 loc(#loc25) +// CHECK-NEXT: %52 = arith.cmpi ult, %50, %49 : i256 loc(#loc25) +// CHECK-NEXT: %53 = arith.ori %51, %52 : i1 loc(#loc25) +// CHECK-NEXT: cf.cond_br %53, ^bb6, ^bb7 loc(#loc25) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %55 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c65_i256, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: "llvm.intrcall"(%56, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc24) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc24) -// CHECK-NEXT: cf.br ^bb7 loc(#loc24) +// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %55 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: llvm.store %c65_i256, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: "llvm.intrcall"(%56, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc25) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc25) +// CHECK-NEXT: cf.br ^bb7 loc(#loc25) // CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 -// CHECK-NEXT: %57 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %50, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %58 = llvm.inttoptr %49 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c63_i256, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %59 = arith.addi %49, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %60 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc24) -// CHECK-NEXT: %61 = llvm.inttoptr %59 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %62 = llvm.inttoptr %60 : i256 to !llvm.ptr<2> loc(#loc24) -// CHECK-NEXT: "llvm.intr.memcpy"(%61, %62, %c64_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc24) -// CHECK-NEXT: %63 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc25) -// CHECK-NEXT: llvm.store %49, %63 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc25) -// CHECK-NEXT: %64 = llvm.load %63 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc26) -// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %66 = llvm.load %65 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc27) -// CHECK-NEXT: %67 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: %68 = llvm.load %67 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc27) -// CHECK-NEXT: %69 = arith.shrui %68, %c1_i256 : i256 loc(#loc27) -// CHECK-NEXT: %70 = arith.andi %68, %c1_i256 : i256 loc(#loc27) -// CHECK-NEXT: %71 = arith.cmpi eq, %70, %c0_i256 : i256 loc(#loc27) -// CHECK-NEXT: %72 = arith.andi %69, %c127_i256 : i256 loc(#loc27) -// CHECK-NEXT: %73 = arith.select %71, %72, %69 : i256 loc(#loc27) -// CHECK-NEXT: %74 = arith.cmpi ult, %73, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %75 = arith.extui %74 : i1 to i256 loc(#loc27) -// CHECK-NEXT: %76 = arith.cmpi eq, %70, %75 : i256 loc(#loc27) -// CHECK-NEXT: cf.cond_br %76, ^bb8, ^bb9 loc(#loc27) +// CHECK-NEXT: %57 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: llvm.store %50, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %58 = llvm.inttoptr %49 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: llvm.store %c63_i256, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %59 = arith.addi %49, %c32_i256 : i256 loc(#loc25) +// CHECK-NEXT: %60 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc25) +// CHECK-NEXT: %61 = llvm.inttoptr %59 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %62 = llvm.inttoptr %60 : i256 to !llvm.ptr<2> loc(#loc25) +// CHECK-NEXT: "llvm.intr.memcpy"(%61, %62, %c64_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc25) +// CHECK-NEXT: %63 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc26) +// CHECK-NEXT: llvm.store %49, %63 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc26) +// CHECK-NEXT: %64 = llvm.load %63 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc27) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%64, %c0_i256) : (i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: %66 = llvm.load %65 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc28) +// CHECK-NEXT: %67 = arith.shrui %66, %c1_i256 : i256 loc(#loc28) +// CHECK-NEXT: %68 = arith.andi %66, %c1_i256 : i256 loc(#loc28) +// CHECK-NEXT: %69 = arith.cmpi eq, %68, %c0_i256 : i256 loc(#loc28) +// CHECK-NEXT: %70 = arith.andi %67, %c127_i256 : i256 loc(#loc28) +// CHECK-NEXT: %71 = arith.select %69, %70, %67 : i256 loc(#loc28) +// CHECK-NEXT: %72 = arith.cmpi ult, %71, %c32_i256 : i256 loc(#loc28) +// CHECK-NEXT: %73 = arith.extui %72 : i1 to i256 loc(#loc28) +// CHECK-NEXT: %74 = arith.cmpi eq, %68, %73 : i256 loc(#loc28) +// CHECK-NEXT: cf.cond_br %74, ^bb8, ^bb9 loc(#loc28) // CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %77 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %78 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: llvm.store %c34_i256, %78 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %79 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: "llvm.intrcall"(%79, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc27) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc27) -// CHECK-NEXT: cf.br ^bb9 loc(#loc27) +// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %76 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c34_i256, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: "llvm.intrcall"(%77, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc28) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc28) +// CHECK-NEXT: cf.br ^bb9 loc(#loc28) // CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %80 = arith.cmpi ugt, %73, %c31_i256 : i256 loc(#loc27) -// CHECK-NEXT: cf.cond_br %80, ^bb10, ^bb13 loc(#loc27) +// CHECK-NEXT: %78 = arith.cmpi ugt, %71, %c18446744073709551616_i256 : i256 loc(#loc28) +// CHECK-NEXT: cf.cond_br %78, ^bb10, ^bb11 loc(#loc28) // CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %81 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: llvm.store %c0_i256, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %82 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %83 = "llvm.intrcall"(%82, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc27) -// CHECK-NEXT: %84 = arith.addi %66, %c31_i256 : i256 loc(#loc27) -// CHECK-NEXT: %85 = arith.divui %84, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %86 = arith.addi %83, %85 : i256 loc(#loc27) -// CHECK-NEXT: %87 = arith.cmpi ult, %66, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %88 = arith.select %87, %83, %86 : i256 loc(#loc27) -// CHECK-NEXT: %89 = arith.addi %73, %c31_i256 : i256 loc(#loc27) -// CHECK-NEXT: %90 = arith.divui %89, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %91 = arith.addi %83, %90 : i256 loc(#loc27) -// CHECK-NEXT: cf.br ^bb11(%88 : i256) loc(#loc27) -// CHECK-NEXT: ^bb11(%92: i256 loc({{.*}}:24:8)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %93 = arith.cmpi ult, %92, %91 : i256 loc(#loc27) -// CHECK-NEXT: cf.cond_br %93, ^bb12(%92 : i256), ^bb13 loc(#loc27) -// CHECK-NEXT: ^bb12(%94: i256 loc({{.*}}:24:8)): // pred: ^bb11 -// CHECK-NEXT: %95 = llvm.inttoptr %94 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: llvm.store %c0_i256, %95 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: %96 = arith.addi %94, %c1_i256 : i256 loc(#loc27) -// CHECK-NEXT: cf.br ^bb11(%96 : i256) loc(#loc27) -// CHECK-NEXT: ^bb13: // 2 preds: ^bb9, ^bb11 -// CHECK-NEXT: %97 = arith.cmpi ugt, %66, %c31_i256 : i256 loc(#loc27) -// CHECK-NEXT: cf.cond_br %97, ^bb17, ^bb14 loc(#loc27) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %98 = arith.cmpi ne, %66, %c0_i256 : i256 loc(#loc27) -// CHECK-NEXT: cf.cond_br %98, ^bb16, ^bb15 loc(#loc27) -// CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %99 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: llvm.store %c0_i256, %99 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: cf.br ^bb23 loc(#loc27) -// CHECK-NEXT: ^bb16: // pred: ^bb14 -// CHECK-NEXT: %100 = arith.addi %64, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %101 = llvm.inttoptr %100 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %102 = llvm.load %101 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc27) -// CHECK-NEXT: %103 = arith.muli %66, %c8_i256 : i256 loc(#loc27) -// CHECK-NEXT: %104 = arith.subi %c256_i256, %103 : i256 loc(#loc27) -// CHECK-NEXT: %105 = arith.shli %c-1_i256, %104 : i256 loc(#loc27) -// CHECK-NEXT: %106 = arith.andi %102, %105 : i256 loc(#loc27) -// CHECK-NEXT: %107 = arith.muli %66, %c2_i256 : i256 loc(#loc27) -// CHECK-NEXT: %108 = arith.ori %106, %107 : i256 loc(#loc27) -// CHECK-NEXT: %109 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: llvm.store %108, %109 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: cf.br ^bb23 loc(#loc27) -// CHECK-NEXT: ^bb17: // pred: ^bb13 -// CHECK-NEXT: %110 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: llvm.store %c0_i256, %110 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %111 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %112 = "llvm.intrcall"(%111, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc27) -// CHECK-NEXT: %113 = arith.addi %64, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %114 = arith.andi %66, %c-32_i256 : i256 loc(#loc27) -// CHECK-NEXT: cf.br ^bb18(%c0_i256 : i256) loc(#loc27) -// CHECK-NEXT: ^bb18(%115: i256 loc({{.*}}:24:8)): // 2 preds: ^bb17, ^bb19 -// CHECK-NEXT: %116 = arith.cmpi ult, %115, %114 : i256 loc(#loc27) -// CHECK-NEXT: cf.cond_br %116, ^bb19(%115 : i256), ^bb20 loc(#loc27) -// CHECK-NEXT: ^bb19(%117: i256 loc({{.*}}:24:8)): // pred: ^bb18 -// CHECK-NEXT: %118 = arith.divui %117, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %119 = arith.addi %113, %117 : i256 loc(#loc27) -// CHECK-NEXT: %120 = llvm.inttoptr %119 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %121 = llvm.load %120 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc27) -// CHECK-NEXT: %122 = arith.addi %112, %118 : i256 loc(#loc27) -// CHECK-NEXT: %123 = llvm.inttoptr %122 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: llvm.store %121, %123 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: %124 = arith.addi %117, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: cf.br ^bb18(%124 : i256) loc(#loc27) -// CHECK-NEXT: ^bb20: // pred: ^bb18 -// CHECK-NEXT: %125 = arith.cmpi ult, %114, %66 : i256 loc(#loc27) -// CHECK-NEXT: cf.cond_br %125, ^bb21, ^bb22 loc(#loc27) -// CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %126 = arith.andi %66, %c31_i256 : i256 loc(#loc27) -// CHECK-NEXT: %127 = arith.divui %114, %c32_i256 : i256 loc(#loc27) -// CHECK-NEXT: %128 = arith.addi %113, %114 : i256 loc(#loc27) -// CHECK-NEXT: %129 = llvm.inttoptr %128 : i256 to !llvm.ptr<1> loc(#loc27) -// CHECK-NEXT: %130 = llvm.load %129 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc27) -// CHECK-NEXT: %131 = arith.muli %126, %c8_i256 : i256 loc(#loc27) -// CHECK-NEXT: %132 = arith.subi %c256_i256, %131 : i256 loc(#loc27) -// CHECK-NEXT: %133 = arith.shli %c-1_i256, %132 : i256 loc(#loc27) -// CHECK-NEXT: %134 = arith.andi %130, %133 : i256 loc(#loc27) -// CHECK-NEXT: %135 = arith.addi %112, %127 : i256 loc(#loc27) -// CHECK-NEXT: %136 = llvm.inttoptr %135 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: llvm.store %134, %136 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: cf.br ^bb22 loc(#loc27) -// CHECK-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// CHECK-NEXT: %137 = arith.muli %66, %c2_i256 : i256 loc(#loc27) -// CHECK-NEXT: %138 = arith.ori %137, %c1_i256 : i256 loc(#loc27) -// CHECK-NEXT: %139 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: llvm.store %138, %139 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: cf.br ^bb23 loc(#loc27) -// CHECK-NEXT: ^bb23: // 3 preds: ^bb15, ^bb16, ^bb22 -// CHECK-NEXT: %140 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: %141 = llvm.load %140 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc28) -// CHECK-NEXT: %142 = arith.shrui %141, %c1_i256 : i256 loc(#loc28) -// CHECK-NEXT: %143 = arith.andi %141, %c1_i256 : i256 loc(#loc28) -// CHECK-NEXT: %144 = arith.cmpi eq, %143, %c0_i256 : i256 loc(#loc28) -// CHECK-NEXT: %145 = arith.andi %142, %c127_i256 : i256 loc(#loc28) -// CHECK-NEXT: %146 = arith.select %144, %145, %142 : i256 loc(#loc28) -// CHECK-NEXT: %147 = arith.cmpi ult, %146, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %148 = arith.extui %147 : i1 to i256 loc(#loc28) -// CHECK-NEXT: %149 = arith.cmpi eq, %143, %148 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %149, ^bb24, ^bb25 loc(#loc28) -// CHECK-NEXT: ^bb24: // pred: ^bb23 -// CHECK-NEXT: %150 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %150 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %151 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c34_i256, %151 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %152 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: "llvm.intrcall"(%152, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc28) +// CHECK-NEXT: %79 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %79 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %80 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c65_i256, %80 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %81 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: "llvm.intrcall"(%81, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc28) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc28) -// CHECK-NEXT: cf.br ^bb25 loc(#loc28) -// CHECK-NEXT: ^bb25: // 2 preds: ^bb23, ^bb24 -// CHECK-NEXT: %153 = arith.cmpi ugt, %146, %c18446744073709551616_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %153, ^bb26, ^bb27 loc(#loc28) -// CHECK-NEXT: ^bb26: // pred: ^bb25 -// CHECK-NEXT: %154 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %154 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %155 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c65_i256, %155 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %156 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: "llvm.intrcall"(%156, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc28) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc28) -// CHECK-NEXT: cf.br ^bb27 loc(#loc28) -// CHECK-NEXT: ^bb27: // 2 preds: ^bb25, ^bb26 -// CHECK-NEXT: %157 = arith.cmpi ugt, %146, %c31_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %157, ^bb31, ^bb28 loc(#loc28) -// CHECK-NEXT: ^bb28: // pred: ^bb27 -// CHECK-NEXT: %158 = arith.cmpi eq, %146, %c31_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %158, ^bb30, ^bb29 loc(#loc28) -// CHECK-NEXT: ^bb29: // pred: ^bb28 -// CHECK-NEXT: %159 = arith.addi %141, %c2_i256 : i256 loc(#loc28) -// CHECK-NEXT: %160 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %159, %160 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: cf.br ^bb32 loc(#loc28) -// CHECK-NEXT: ^bb30: // pred: ^bb28 -// CHECK-NEXT: %161 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c0_i256, %161 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %162 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %163 = "llvm.intrcall"(%162, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc28) -// CHECK-NEXT: %164 = arith.andi %141, %c-256_i256 : i256 loc(#loc28) -// CHECK-NEXT: %165 = llvm.inttoptr %163 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %164, %165 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: %166 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %c65_i256, %166 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: cf.br ^bb32 loc(#loc28) -// CHECK-NEXT: ^bb31: // pred: ^bb27 -// CHECK-NEXT: %167 = arith.addi %141, %c2_i256 : i256 loc(#loc28) -// CHECK-NEXT: %168 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c0_i256, %168 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %169 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %170 = "llvm.intrcall"(%169, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc28) -// CHECK-NEXT: %171 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %167, %171 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: cf.br ^bb32 loc(#loc28) -// CHECK-NEXT: ^bb32: // 3 preds: ^bb29, ^bb30, ^bb31 -// CHECK-NEXT: %172 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %173 = llvm.load %172 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %174 = arith.shrui %173, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %175 = arith.andi %173, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %176 = arith.cmpi eq, %175, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %177 = arith.andi %174, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %178 = arith.select %176, %177, %174 : i256 loc(#loc7) -// CHECK-NEXT: %179 = arith.cmpi ult, %178, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %180 = arith.extui %179 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %181 = arith.cmpi eq, %175, %180 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %181, ^bb33, ^bb34 loc(#loc7) -// CHECK-NEXT: ^bb33: // pred: ^bb32 -// CHECK-NEXT: %182 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %182 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %183 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %183 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %184 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%184, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb34 loc(#loc7) -// CHECK-NEXT: ^bb34: // 2 preds: ^bb32, ^bb33 -// CHECK-NEXT: %185 = arith.addi %178, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %186 = arith.andi %185, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %187 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %188 = llvm.load %187 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %189 = arith.addi %186, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %190 = arith.andi %189, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %191 = arith.addi %188, %190 : i256 loc(#loc7) -// CHECK-NEXT: %192 = arith.cmpi ugt, %191, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %193 = arith.cmpi ult, %191, %188 : i256 loc(#loc7) -// CHECK-NEXT: %194 = arith.ori %192, %193 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %194, ^bb35, ^bb36 loc(#loc7) -// CHECK-NEXT: ^bb35: // pred: ^bb34 -// CHECK-NEXT: %195 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %195 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %196 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %196 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %197 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%197, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb36 loc(#loc7) -// CHECK-NEXT: ^bb36: // 2 preds: ^bb34, ^bb35 -// CHECK-NEXT: %198 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %191, %198 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %199 = llvm.inttoptr %188 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %178, %199 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %200 = arith.addi %188, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %201 = llvm.inttoptr %188 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %178, %201 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %202 = arith.andi %173, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %203 = arith.cmpi eq, %202, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %203, ^bb40, ^bb37 loc(#loc7) -// CHECK-NEXT: ^bb37: // pred: ^bb36 -// CHECK-NEXT: %204 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %204 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %205 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %206 = "llvm.intrcall"(%205, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb38(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb38(%207: i256 loc({{.*}}:18:4)): // 2 preds: ^bb37, ^bb39 -// CHECK-NEXT: %208 = arith.cmpi ult, %207, %178 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %208, ^bb39(%207 : i256), ^bb41 loc(#loc7) -// CHECK-NEXT: ^bb39(%209: i256 loc({{.*}}:18:4)): // pred: ^bb38 -// CHECK-NEXT: %210 = arith.divui %209, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %211 = arith.addi %206, %210 : i256 loc(#loc7) -// CHECK-NEXT: %212 = llvm.inttoptr %211 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %213 = llvm.load %212 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %214 = arith.addi %200, %209 : i256 loc(#loc7) -// CHECK-NEXT: %215 = llvm.inttoptr %214 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %213, %215 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %216 = arith.addi %209, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb38(%216 : i256) loc(#loc7) -// CHECK-NEXT: ^bb40: // pred: ^bb36 -// CHECK-NEXT: %217 = arith.andi %173, %c-256_i256 : i256 loc(#loc7) -// CHECK-NEXT: %218 = llvm.inttoptr %200 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %217, %218 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb41 loc(#loc7) -// CHECK-NEXT: ^bb41: // 2 preds: ^bb38, ^bb40 -// CHECK-NEXT: return %188 : i256 loc(#loc29) -// CHECK-NEXT: } loc(#loc19) +// CHECK-NEXT: cf.br ^bb11 loc(#loc28) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %82 = arith.cmpi ugt, %71, %c31_i256 : i256 loc(#loc28) +// CHECK-NEXT: cf.cond_br %82, ^bb15, ^bb12 loc(#loc28) +// CHECK-NEXT: ^bb12: // pred: ^bb11 +// CHECK-NEXT: %83 = arith.cmpi eq, %71, %c31_i256 : i256 loc(#loc28) +// CHECK-NEXT: cf.cond_br %83, ^bb14, ^bb13 loc(#loc28) +// CHECK-NEXT: ^bb13: // pred: ^bb12 +// CHECK-NEXT: %84 = arith.addi %66, %c2_i256 : i256 loc(#loc28) +// CHECK-NEXT: %85 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: llvm.store %84, %85 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: cf.br ^bb16 loc(#loc28) +// CHECK-NEXT: ^bb14: // pred: ^bb12 +// CHECK-NEXT: %86 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c0_i256, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %88 = "llvm.intrcall"(%87, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc28) +// CHECK-NEXT: %89 = arith.andi %66, %c-256_i256 : i256 loc(#loc28) +// CHECK-NEXT: %90 = llvm.inttoptr %88 : i256 to !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: llvm.store %89, %90 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: %91 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: llvm.store %c65_i256, %91 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: cf.br ^bb16 loc(#loc28) +// CHECK-NEXT: ^bb15: // pred: ^bb11 +// CHECK-NEXT: %92 = arith.addi %66, %c2_i256 : i256 loc(#loc28) +// CHECK-NEXT: %93 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: llvm.store %c0_i256, %93 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %94 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) +// CHECK-NEXT: %95 = "llvm.intrcall"(%94, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc28) +// CHECK-NEXT: %96 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: llvm.store %92, %96 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: cf.br ^bb16 loc(#loc28) +// CHECK-NEXT: ^bb16: // 3 preds: ^bb13, ^bb14, ^bb15 +// CHECK-NEXT: %97 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %98 = llvm.load %97 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %99 = arith.shrui %98, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %100 = arith.andi %98, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %101 = arith.cmpi eq, %100, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: %102 = arith.andi %99, %c127_i256 : i256 loc(#loc4) +// CHECK-NEXT: %103 = arith.select %101, %102, %99 : i256 loc(#loc4) +// CHECK-NEXT: %104 = arith.cmpi ult, %103, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %105 = arith.extui %104 : i1 to i256 loc(#loc4) +// CHECK-NEXT: %106 = arith.cmpi eq, %100, %105 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %106, ^bb17, ^bb18 loc(#loc4) +// CHECK-NEXT: ^bb17: // pred: ^bb16 +// CHECK-NEXT: %107 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %107 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %108 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c34_i256, %108 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %109 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%109, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb18 loc(#loc4) +// CHECK-NEXT: ^bb18: // 2 preds: ^bb16, ^bb17 +// CHECK-NEXT: %110 = arith.addi %103, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %111 = arith.andi %110, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %112 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %113 = llvm.load %112 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %114 = arith.addi %111, %c63_i256 : i256 loc(#loc4) +// CHECK-NEXT: %115 = arith.andi %114, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %116 = arith.addi %113, %115 : i256 loc(#loc4) +// CHECK-NEXT: %117 = arith.cmpi ugt, %116, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: %118 = arith.cmpi ult, %116, %113 : i256 loc(#loc4) +// CHECK-NEXT: %119 = arith.ori %117, %118 : i1 loc(#loc4) +// CHECK-NEXT: cf.cond_br %119, ^bb19, ^bb20 loc(#loc4) +// CHECK-NEXT: ^bb19: // pred: ^bb18 +// CHECK-NEXT: %120 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %120 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %121 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %121 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %122 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%122, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb20 loc(#loc4) +// CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 +// CHECK-NEXT: %123 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %116, %123 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %124 = llvm.inttoptr %113 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %103, %124 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %125 = arith.addi %113, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %126 = llvm.inttoptr %113 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %103, %126 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %98, %103, %125) : (i256, i256, i256, i256) -> () loc(#loc4) +// CHECK-NEXT: return %113 : i256 loc(#loc29) +// CHECK-NEXT: } loc(#loc20) // CHECK-NEXT: func.func @get_s_9() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -1332,109 +1180,83 @@ contract C { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc7) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc7) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc4) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc4) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc4) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc4) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb2 loc(#loc7) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb2 loc(#loc4) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc7) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc7) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc7) +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc4) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc4) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc4) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc4) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc4) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb4 loc(#loc7) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb4 loc(#loc4) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc7) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:18:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc7) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:18:4)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc7) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc7) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc7) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc7) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb9 loc(#loc7) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: return %16 : i256 loc(#loc7) -// CHECK-NEXT: } loc(#loc7) +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc4) +// CHECK-NEXT: return %16 : i256 loc(#loc4) +// CHECK-NEXT: } loc(#loc4) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:16:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:39:4) -// CHECK-NEXT: #loc4 = loc({{.*}}:40:12) -// CHECK-NEXT: #loc6 = loc({{.*}}:41:8) -// CHECK-NEXT: #loc8 = loc({{.*}}:42:8) -// CHECK-NEXT: #loc9 = loc({{.*}}:29:4) -// CHECK-NEXT: #loc10 = loc({{.*}}:30:25) -// CHECK-NEXT: #loc11 = loc({{.*}}:30:8) -// CHECK-NEXT: #loc12 = loc({{.*}}:32:24) -// CHECK-NEXT: #loc13 = loc({{.*}}:32:20) -// CHECK-NEXT: #loc14 = loc({{.*}}:32:12) -// CHECK-NEXT: #loc15 = loc({{.*}}:34:12) -// CHECK-NEXT: #loc17 = loc({{.*}}:35:8) -// CHECK-NEXT: #loc18 = loc({{.*}}:36:8) -// CHECK-NEXT: #loc19 = loc({{.*}}:20:4) -// CHECK-NEXT: #loc20 = loc({{.*}}:21:26) -// CHECK-NEXT: #loc21 = loc({{.*}}:21:8) -// CHECK-NEXT: #loc22 = loc({{.*}}:22:16) -// CHECK-NEXT: #loc24 = loc({{.*}}:23:25) -// CHECK-NEXT: #loc25 = loc({{.*}}:23:8) -// CHECK-NEXT: #loc26 = loc({{.*}}:24:12) +// CHECK-NEXT: #loc5 = loc({{.*}}:39:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:40:12) +// CHECK-NEXT: #loc8 = loc({{.*}}:41:8) +// CHECK-NEXT: #loc9 = loc({{.*}}:42:8) +// CHECK-NEXT: #loc10 = loc({{.*}}:29:4) +// CHECK-NEXT: #loc11 = loc({{.*}}:30:25) +// CHECK-NEXT: #loc12 = loc({{.*}}:30:8) +// CHECK-NEXT: #loc13 = loc({{.*}}:32:24) +// CHECK-NEXT: #loc14 = loc({{.*}}:32:20) +// CHECK-NEXT: #loc15 = loc({{.*}}:32:12) +// CHECK-NEXT: #loc16 = loc({{.*}}:34:12) +// CHECK-NEXT: #loc17 = loc({{.*}}:34:8) +// CHECK-NEXT: #loc18 = loc({{.*}}:35:8) +// CHECK-NEXT: #loc19 = loc({{.*}}:36:8) +// CHECK-NEXT: #loc20 = loc({{.*}}:20:4) +// CHECK-NEXT: #loc21 = loc({{.*}}:21:26) +// CHECK-NEXT: #loc22 = loc({{.*}}:21:8) +// CHECK-NEXT: #loc23 = loc({{.*}}:22:16) +// CHECK-NEXT: #loc25 = loc({{.*}}:23:25) +// CHECK-NEXT: #loc26 = loc({{.*}}:23:8) +// CHECK-NEXT: #loc27 = loc({{.*}}:24:12) // CHECK-NEXT: #loc28 = loc({{.*}}:25:8) // CHECK-NEXT: #loc29 = loc({{.*}}:26:8) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/concat.sol b/test/lit/mlirCodegen/EVM/concat.sol index 782e22e71..a3a10b320 100644 --- a/test/lit/mlirCodegen/EVM/concat.sol +++ b/test/lit/mlirCodegen/EVM/concat.sol @@ -123,33 +123,26 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: #loc42 = loc({{.*}}:26:29) // CHECK-NEXT: #loc48 = loc({{.*}}:30:13) // CHECK-NEXT: #loc49 = loc({{.*}}:30:29) -// CHECK-NEXT: #loc52 = loc({{.*}}:31:12) // CHECK-NEXT: #loc55 = loc({{.*}}:34:13) // CHECK-NEXT: #loc56 = loc({{.*}}:34:31) // CHECK-NEXT: #loc62 = loc({{.*}}:38:13) // CHECK-NEXT: #loc63 = loc({{.*}}:38:31) // CHECK-NEXT: #loc69 = loc({{.*}}:42:13) // CHECK-NEXT: #loc70 = loc({{.*}}:42:31) -// CHECK-NEXT: #loc73 = loc({{.*}}:43:12) // CHECK-NEXT: #loc76 = loc({{.*}}:46:13) // CHECK-NEXT: #loc77 = loc({{.*}}:46:24) -// CHECK-NEXT: #loc80 = loc({{.*}}:47:12) // CHECK-NEXT: #loc83 = loc({{.*}}:50:13) // CHECK-NEXT: #loc84 = loc({{.*}}:50:30) -// CHECK-NEXT: #loc87 = loc({{.*}}:51:12) // CHECK-NEXT: #loc90 = loc({{.*}}:54:13) // CHECK-NEXT: #loc91 = loc({{.*}}:54:30) -// CHECK-NEXT: #loc94 = loc({{.*}}:55:12) // CHECK-NEXT: #loc97 = loc({{.*}}:58:13) // CHECK-NEXT: #loc98 = loc({{.*}}:58:23) // CHECK-NEXT: #loc104 = loc({{.*}}:62:13) // CHECK-NEXT: #loc105 = loc({{.*}}:62:30) -// CHECK-NEXT: #loc108 = loc({{.*}}:63:12) // CHECK-NEXT: #loc114 = loc({{.*}}:70:13) // CHECK-NEXT: #loc119 = loc({{.*}}:74:13) // CHECK-NEXT: #loc124 = loc({{.*}}:78:13) // CHECK-NEXT: #loc129 = loc({{.*}}:82:13) -// CHECK-NEXT: #loc131 = loc({{.*}}:83:12) // CHECK-NEXT: #loc134 = loc({{.*}}:86:12) // CHECK-NEXT: #loc135 = loc({{.*}}:86:28) // CHECK-NEXT: #loc136 = loc({{.*}}:86:46) @@ -159,7 +152,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: #loc151 = loc({{.*}}:94:36) // CHECK-NEXT: #loc157 = loc({{.*}}:98:17) // CHECK-NEXT: #loc158 = loc({{.*}}:98:35) -// CHECK-NEXT: #loc161 = loc({{.*}}:99:13) // CHECK-NEXT: #loc164 = loc({{.*}}:102:17) // CHECK-NEXT: #loc165 = loc({{.*}}:102:34) // CHECK-NEXT: module attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { @@ -358,7 +350,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -398,108 +389,54 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc31) // CHECK-NEXT: cf.br ^bb2 loc(#loc31) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %20 = arith.andi %8, %c1_i256 : i256 loc(#loc31) -// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc31) -// CHECK-NEXT: cf.cond_br %21, ^bb6, ^bb3 loc(#loc31) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%2, %8, %13, %6) : (i256, i256, i256, i256) -> () loc(#loc31) +// CHECK-NEXT: %20 = arith.addi %6, %13 : i256 loc(#loc31) +// CHECK-NEXT: %21 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc31) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc31) +// CHECK-NEXT: %23 = arith.shrui %22, %c1_i256 : i256 loc(#loc31) +// CHECK-NEXT: %24 = arith.andi %22, %c1_i256 : i256 loc(#loc31) +// CHECK-NEXT: %25 = arith.cmpi eq, %24, %c0_i256 : i256 loc(#loc31) +// CHECK-NEXT: %26 = arith.andi %23, %c127_i256 : i256 loc(#loc31) +// CHECK-NEXT: %27 = arith.select %25, %26, %23 : i256 loc(#loc31) +// CHECK-NEXT: %28 = arith.cmpi ult, %27, %c32_i256 : i256 loc(#loc31) +// CHECK-NEXT: %29 = arith.extui %28 : i1 to i256 loc(#loc31) +// CHECK-NEXT: %30 = arith.cmpi eq, %24, %29 : i256 loc(#loc31) +// CHECK-NEXT: cf.cond_br %30, ^bb3, ^bb4 loc(#loc31) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %2, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc31) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc31) -// CHECK-NEXT: ^bb4(%25: i256 loc({{.*}}:19:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %26 = arith.cmpi ult, %25, %13 : i256 loc(#loc31) -// CHECK-NEXT: cf.cond_br %26, ^bb5(%25 : i256), ^bb7 loc(#loc31) -// CHECK-NEXT: ^bb5(%27: i256 loc({{.*}}:19:12)): // pred: ^bb4 -// CHECK-NEXT: %28 = arith.divui %27, %c32_i256 : i256 loc(#loc31) -// CHECK-NEXT: %29 = arith.addi %24, %28 : i256 loc(#loc31) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc31) -// CHECK-NEXT: %31 = llvm.load %30 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc31) -// CHECK-NEXT: %32 = arith.addi %6, %27 : i256 loc(#loc31) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %31, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %34 = arith.addi %27, %c32_i256 : i256 loc(#loc31) -// CHECK-NEXT: cf.br ^bb4(%34 : i256) loc(#loc31) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %35 = arith.andi %8, %c-256_i256 : i256 loc(#loc31) -// CHECK-NEXT: %36 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: cf.br ^bb7 loc(#loc31) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %37 = arith.addi %6, %13 : i256 loc(#loc31) -// CHECK-NEXT: %38 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc31) -// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc31) -// CHECK-NEXT: %40 = arith.shrui %39, %c1_i256 : i256 loc(#loc31) -// CHECK-NEXT: %41 = arith.andi %39, %c1_i256 : i256 loc(#loc31) -// CHECK-NEXT: %42 = arith.cmpi eq, %41, %c0_i256 : i256 loc(#loc31) -// CHECK-NEXT: %43 = arith.andi %40, %c127_i256 : i256 loc(#loc31) -// CHECK-NEXT: %44 = arith.select %42, %43, %40 : i256 loc(#loc31) -// CHECK-NEXT: %45 = arith.cmpi ult, %44, %c32_i256 : i256 loc(#loc31) -// CHECK-NEXT: %46 = arith.extui %45 : i1 to i256 loc(#loc31) -// CHECK-NEXT: %47 = arith.cmpi eq, %41, %46 : i256 loc(#loc31) -// CHECK-NEXT: cf.cond_br %47, ^bb8, ^bb9 loc(#loc31) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %49 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %c34_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: "llvm.intrcall"(%50, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc31) +// CHECK-NEXT: %31 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %32 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %c34_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: "llvm.intrcall"(%33, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc31) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc31) -// CHECK-NEXT: cf.br ^bb9 loc(#loc31) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %51 = arith.andi %39, %c1_i256 : i256 loc(#loc31) -// CHECK-NEXT: %52 = arith.cmpi eq, %51, %c0_i256 : i256 loc(#loc31) -// CHECK-NEXT: cf.cond_br %52, ^bb13, ^bb10 loc(#loc31) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %53 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %3, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %55 = "llvm.intrcall"(%54, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc31) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc31) -// CHECK-NEXT: ^bb11(%56: i256 loc({{.*}}:19:12)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %57 = arith.cmpi ult, %56, %44 : i256 loc(#loc31) -// CHECK-NEXT: cf.cond_br %57, ^bb12(%56 : i256), ^bb14 loc(#loc31) -// CHECK-NEXT: ^bb12(%58: i256 loc({{.*}}:19:12)): // pred: ^bb11 -// CHECK-NEXT: %59 = arith.divui %58, %c32_i256 : i256 loc(#loc31) -// CHECK-NEXT: %60 = arith.addi %55, %59 : i256 loc(#loc31) -// CHECK-NEXT: %61 = llvm.inttoptr %60 : i256 to !llvm.ptr<5> loc(#loc31) -// CHECK-NEXT: %62 = llvm.load %61 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc31) -// CHECK-NEXT: %63 = arith.addi %37, %58 : i256 loc(#loc31) -// CHECK-NEXT: %64 = llvm.inttoptr %63 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %62, %64 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %65 = arith.addi %58, %c32_i256 : i256 loc(#loc31) -// CHECK-NEXT: cf.br ^bb11(%65 : i256) loc(#loc31) -// CHECK-NEXT: ^bb13: // pred: ^bb9 -// CHECK-NEXT: %66 = arith.andi %39, %c-256_i256 : i256 loc(#loc31) -// CHECK-NEXT: %67 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %66, %67 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: cf.br ^bb14 loc(#loc31) -// CHECK-NEXT: ^bb14: // 2 preds: ^bb11, ^bb13 -// CHECK-NEXT: %68 = arith.addi %37, %44 : i256 loc(#loc31) -// CHECK-NEXT: %69 = arith.subi %68, %6 : i256 loc(#loc31) -// CHECK-NEXT: %70 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %69, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %71 = arith.subi %68, %5 : i256 loc(#loc31) -// CHECK-NEXT: %72 = arith.addi %71, %c31_i256 : i256 loc(#loc31) -// CHECK-NEXT: %73 = arith.andi %72, %c-32_i256 : i256 loc(#loc31) -// CHECK-NEXT: %74 = arith.addi %5, %73 : i256 loc(#loc31) -// CHECK-NEXT: %75 = arith.cmpi ugt, %74, %c18446744073709551615_i256 : i256 loc(#loc31) -// CHECK-NEXT: %76 = arith.cmpi ult, %74, %5 : i256 loc(#loc31) -// CHECK-NEXT: %77 = arith.ori %75, %76 : i1 loc(#loc31) -// CHECK-NEXT: cf.cond_br %77, ^bb15, ^bb16 loc(#loc31) -// CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %78 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %78 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %79 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %c65_i256, %79 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %80 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: "llvm.intrcall"(%80, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc31) +// CHECK-NEXT: cf.br ^bb4 loc(#loc31) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%3, %22, %27, %20) : (i256, i256, i256, i256) -> () loc(#loc31) +// CHECK-NEXT: %34 = arith.addi %20, %27 : i256 loc(#loc31) +// CHECK-NEXT: %35 = arith.subi %34, %6 : i256 loc(#loc31) +// CHECK-NEXT: %36 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %37 = arith.subi %34, %5 : i256 loc(#loc31) +// CHECK-NEXT: %38 = arith.addi %37, %c31_i256 : i256 loc(#loc31) +// CHECK-NEXT: %39 = arith.andi %38, %c-32_i256 : i256 loc(#loc31) +// CHECK-NEXT: %40 = arith.addi %5, %39 : i256 loc(#loc31) +// CHECK-NEXT: %41 = arith.cmpi ugt, %40, %c18446744073709551615_i256 : i256 loc(#loc31) +// CHECK-NEXT: %42 = arith.cmpi ult, %40, %5 : i256 loc(#loc31) +// CHECK-NEXT: %43 = arith.ori %41, %42 : i1 loc(#loc31) +// CHECK-NEXT: cf.cond_br %43, ^bb5, ^bb6 loc(#loc31) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %45 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %c65_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: "llvm.intrcall"(%46, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc31) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc31) -// CHECK-NEXT: cf.br ^bb16 loc(#loc31) -// CHECK-NEXT: ^bb16: // 2 preds: ^bb14, ^bb15 -// CHECK-NEXT: %81 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %74, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: cf.br ^bb6 loc(#loc31) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %47 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %40, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) // CHECK-NEXT: call @f_bytes_6(%5) : (i256) -> () loc(#loc32) // CHECK-NEXT: return loc(#loc26) // CHECK-NEXT: } loc(#loc26) @@ -628,7 +565,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -675,58 +611,31 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc52) // CHECK-NEXT: cf.br ^bb2 loc(#loc52) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %26 = arith.andi %14, %c1_i256 : i256 loc(#loc52) -// CHECK-NEXT: %27 = arith.cmpi eq, %26, %c0_i256 : i256 loc(#loc52) -// CHECK-NEXT: cf.cond_br %27, ^bb6, ^bb3 loc(#loc52) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%3, %14, %19, %12) : (i256, i256, i256, i256) -> () loc(#loc52) +// CHECK-NEXT: %26 = arith.addi %12, %19 : i256 loc(#loc52) +// CHECK-NEXT: %27 = arith.subi %26, %6 : i256 loc(#loc52) +// CHECK-NEXT: %28 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: llvm.store %27, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: %29 = arith.subi %26, %5 : i256 loc(#loc52) +// CHECK-NEXT: %30 = arith.addi %29, %c31_i256 : i256 loc(#loc52) +// CHECK-NEXT: %31 = arith.andi %30, %c-32_i256 : i256 loc(#loc52) +// CHECK-NEXT: %32 = arith.addi %5, %31 : i256 loc(#loc52) +// CHECK-NEXT: %33 = arith.cmpi ugt, %32, %c18446744073709551615_i256 : i256 loc(#loc52) +// CHECK-NEXT: %34 = arith.cmpi ult, %32, %5 : i256 loc(#loc52) +// CHECK-NEXT: %35 = arith.ori %33, %34 : i1 loc(#loc52) +// CHECK-NEXT: cf.cond_br %35, ^bb3, ^bb4 loc(#loc52) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: llvm.store %3, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc52) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc52) -// CHECK-NEXT: ^bb4(%31: i256 loc({{.*}}:31:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %32 = arith.cmpi ult, %31, %19 : i256 loc(#loc52) -// CHECK-NEXT: cf.cond_br %32, ^bb5(%31 : i256), ^bb7 loc(#loc52) -// CHECK-NEXT: ^bb5(%33: i256 loc({{.*}}:31:12)): // pred: ^bb4 -// CHECK-NEXT: %34 = arith.divui %33, %c32_i256 : i256 loc(#loc52) -// CHECK-NEXT: %35 = arith.addi %30, %34 : i256 loc(#loc52) -// CHECK-NEXT: %36 = llvm.inttoptr %35 : i256 to !llvm.ptr<5> loc(#loc52) -// CHECK-NEXT: %37 = llvm.load %36 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc52) -// CHECK-NEXT: %38 = arith.addi %12, %33 : i256 loc(#loc52) -// CHECK-NEXT: %39 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: llvm.store %37, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: %40 = arith.addi %33, %c32_i256 : i256 loc(#loc52) -// CHECK-NEXT: cf.br ^bb4(%40 : i256) loc(#loc52) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %41 = arith.andi %14, %c-256_i256 : i256 loc(#loc52) -// CHECK-NEXT: %42 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: llvm.store %41, %42 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: cf.br ^bb7 loc(#loc52) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %43 = arith.addi %12, %19 : i256 loc(#loc52) -// CHECK-NEXT: %44 = arith.subi %43, %6 : i256 loc(#loc52) -// CHECK-NEXT: %45 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: %46 = arith.subi %43, %5 : i256 loc(#loc52) -// CHECK-NEXT: %47 = arith.addi %46, %c31_i256 : i256 loc(#loc52) -// CHECK-NEXT: %48 = arith.andi %47, %c-32_i256 : i256 loc(#loc52) -// CHECK-NEXT: %49 = arith.addi %5, %48 : i256 loc(#loc52) -// CHECK-NEXT: %50 = arith.cmpi ugt, %49, %c18446744073709551615_i256 : i256 loc(#loc52) -// CHECK-NEXT: %51 = arith.cmpi ult, %49, %5 : i256 loc(#loc52) -// CHECK-NEXT: %52 = arith.ori %50, %51 : i1 loc(#loc52) -// CHECK-NEXT: cf.cond_br %52, ^bb8, ^bb9 loc(#loc52) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %53 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: %54 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: llvm.store %c65_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: "llvm.intrcall"(%55, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc52) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: %37 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: llvm.store %c65_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: "llvm.intrcall"(%38, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc52) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc52) -// CHECK-NEXT: cf.br ^bb9 loc(#loc52) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %56 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc52) -// CHECK-NEXT: llvm.store %49, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: cf.br ^bb4 loc(#loc52) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %39 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc52) +// CHECK-NEXT: llvm.store %32, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc52) // CHECK-NEXT: call @f_bytes_6(%5) : (i256) -> () loc(#loc53) // CHECK-NEXT: return loc(#loc47) // CHECK-NEXT: } loc(#loc47) @@ -854,7 +763,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -900,58 +808,31 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc73) // CHECK-NEXT: cf.br ^bb2 loc(#loc73) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %25 = arith.andi %13, %c1_i256 : i256 loc(#loc73) -// CHECK-NEXT: %26 = arith.cmpi eq, %25, %c0_i256 : i256 loc(#loc73) -// CHECK-NEXT: cf.cond_br %26, ^bb6, ^bb3 loc(#loc73) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%3, %13, %18, %11) : (i256, i256, i256, i256) -> () loc(#loc73) +// CHECK-NEXT: %25 = arith.addi %11, %18 : i256 loc(#loc73) +// CHECK-NEXT: %26 = arith.subi %25, %6 : i256 loc(#loc73) +// CHECK-NEXT: %27 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: %28 = arith.subi %25, %5 : i256 loc(#loc73) +// CHECK-NEXT: %29 = arith.addi %28, %c31_i256 : i256 loc(#loc73) +// CHECK-NEXT: %30 = arith.andi %29, %c-32_i256 : i256 loc(#loc73) +// CHECK-NEXT: %31 = arith.addi %5, %30 : i256 loc(#loc73) +// CHECK-NEXT: %32 = arith.cmpi ugt, %31, %c18446744073709551615_i256 : i256 loc(#loc73) +// CHECK-NEXT: %33 = arith.cmpi ult, %31, %5 : i256 loc(#loc73) +// CHECK-NEXT: %34 = arith.ori %32, %33 : i1 loc(#loc73) +// CHECK-NEXT: cf.cond_br %34, ^bb3, ^bb4 loc(#loc73) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %3, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc73) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc73) -// CHECK-NEXT: ^bb4(%30: i256 loc({{.*}}:43:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %31 = arith.cmpi ult, %30, %18 : i256 loc(#loc73) -// CHECK-NEXT: cf.cond_br %31, ^bb5(%30 : i256), ^bb7 loc(#loc73) -// CHECK-NEXT: ^bb5(%32: i256 loc({{.*}}:43:12)): // pred: ^bb4 -// CHECK-NEXT: %33 = arith.divui %32, %c32_i256 : i256 loc(#loc73) -// CHECK-NEXT: %34 = arith.addi %29, %33 : i256 loc(#loc73) -// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<5> loc(#loc73) -// CHECK-NEXT: %36 = llvm.load %35 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc73) -// CHECK-NEXT: %37 = arith.addi %11, %32 : i256 loc(#loc73) -// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %36, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %39 = arith.addi %32, %c32_i256 : i256 loc(#loc73) -// CHECK-NEXT: cf.br ^bb4(%39 : i256) loc(#loc73) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %40 = arith.andi %13, %c-256_i256 : i256 loc(#loc73) -// CHECK-NEXT: %41 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %40, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: cf.br ^bb7 loc(#loc73) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %42 = arith.addi %11, %18 : i256 loc(#loc73) -// CHECK-NEXT: %43 = arith.subi %42, %6 : i256 loc(#loc73) -// CHECK-NEXT: %44 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %43, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %45 = arith.subi %42, %5 : i256 loc(#loc73) -// CHECK-NEXT: %46 = arith.addi %45, %c31_i256 : i256 loc(#loc73) -// CHECK-NEXT: %47 = arith.andi %46, %c-32_i256 : i256 loc(#loc73) -// CHECK-NEXT: %48 = arith.addi %5, %47 : i256 loc(#loc73) -// CHECK-NEXT: %49 = arith.cmpi ugt, %48, %c18446744073709551615_i256 : i256 loc(#loc73) -// CHECK-NEXT: %50 = arith.cmpi ult, %48, %5 : i256 loc(#loc73) -// CHECK-NEXT: %51 = arith.ori %49, %50 : i1 loc(#loc73) -// CHECK-NEXT: cf.cond_br %51, ^bb8, ^bb9 loc(#loc73) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %53 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %c65_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: "llvm.intrcall"(%54, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc73) +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: %36 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: llvm.store %c65_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: "llvm.intrcall"(%37, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc73) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc73) -// CHECK-NEXT: cf.br ^bb9 loc(#loc73) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %55 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %48, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: cf.br ^bb4 loc(#loc73) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %38 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc73) +// CHECK-NEXT: llvm.store %31, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) // CHECK-NEXT: call @f_bytes_6(%5) : (i256) -> () loc(#loc74) // CHECK-NEXT: return loc(#loc68) // CHECK-NEXT: } loc(#loc68) @@ -961,7 +842,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1006,58 +886,31 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc80) // CHECK-NEXT: cf.br ^bb2 loc(#loc80) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %23 = arith.andi %11, %c1_i256 : i256 loc(#loc80) -// CHECK-NEXT: %24 = arith.cmpi eq, %23, %c0_i256 : i256 loc(#loc80) -// CHECK-NEXT: cf.cond_br %24, ^bb6, ^bb3 loc(#loc80) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%3, %11, %16, %9) : (i256, i256, i256, i256) -> () loc(#loc80) +// CHECK-NEXT: %23 = arith.addi %9, %16 : i256 loc(#loc80) +// CHECK-NEXT: %24 = arith.subi %23, %6 : i256 loc(#loc80) +// CHECK-NEXT: %25 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: llvm.store %24, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: %26 = arith.subi %23, %5 : i256 loc(#loc80) +// CHECK-NEXT: %27 = arith.addi %26, %c31_i256 : i256 loc(#loc80) +// CHECK-NEXT: %28 = arith.andi %27, %c-32_i256 : i256 loc(#loc80) +// CHECK-NEXT: %29 = arith.addi %5, %28 : i256 loc(#loc80) +// CHECK-NEXT: %30 = arith.cmpi ugt, %29, %c18446744073709551615_i256 : i256 loc(#loc80) +// CHECK-NEXT: %31 = arith.cmpi ult, %29, %5 : i256 loc(#loc80) +// CHECK-NEXT: %32 = arith.ori %30, %31 : i1 loc(#loc80) +// CHECK-NEXT: cf.cond_br %32, ^bb3, ^bb4 loc(#loc80) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: llvm.store %3, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc80) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc80) -// CHECK-NEXT: ^bb4(%28: i256 loc({{.*}}:47:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %29 = arith.cmpi ult, %28, %16 : i256 loc(#loc80) -// CHECK-NEXT: cf.cond_br %29, ^bb5(%28 : i256), ^bb7 loc(#loc80) -// CHECK-NEXT: ^bb5(%30: i256 loc({{.*}}:47:12)): // pred: ^bb4 -// CHECK-NEXT: %31 = arith.divui %30, %c32_i256 : i256 loc(#loc80) -// CHECK-NEXT: %32 = arith.addi %27, %31 : i256 loc(#loc80) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<5> loc(#loc80) -// CHECK-NEXT: %34 = llvm.load %33 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc80) -// CHECK-NEXT: %35 = arith.addi %9, %30 : i256 loc(#loc80) -// CHECK-NEXT: %36 = llvm.inttoptr %35 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: llvm.store %34, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: %37 = arith.addi %30, %c32_i256 : i256 loc(#loc80) -// CHECK-NEXT: cf.br ^bb4(%37 : i256) loc(#loc80) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %38 = arith.andi %11, %c-256_i256 : i256 loc(#loc80) -// CHECK-NEXT: %39 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: cf.br ^bb7 loc(#loc80) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %40 = arith.addi %9, %16 : i256 loc(#loc80) -// CHECK-NEXT: %41 = arith.subi %40, %6 : i256 loc(#loc80) -// CHECK-NEXT: %42 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: llvm.store %41, %42 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: %43 = arith.subi %40, %5 : i256 loc(#loc80) -// CHECK-NEXT: %44 = arith.addi %43, %c31_i256 : i256 loc(#loc80) -// CHECK-NEXT: %45 = arith.andi %44, %c-32_i256 : i256 loc(#loc80) -// CHECK-NEXT: %46 = arith.addi %5, %45 : i256 loc(#loc80) -// CHECK-NEXT: %47 = arith.cmpi ugt, %46, %c18446744073709551615_i256 : i256 loc(#loc80) -// CHECK-NEXT: %48 = arith.cmpi ult, %46, %5 : i256 loc(#loc80) -// CHECK-NEXT: %49 = arith.ori %47, %48 : i1 loc(#loc80) -// CHECK-NEXT: cf.cond_br %49, ^bb8, ^bb9 loc(#loc80) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: %51 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: llvm.store %c65_i256, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: "llvm.intrcall"(%52, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc80) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: %34 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: llvm.store %c65_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: "llvm.intrcall"(%35, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc80) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc80) -// CHECK-NEXT: cf.br ^bb9 loc(#loc80) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %53 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc80) -// CHECK-NEXT: llvm.store %46, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: cf.br ^bb4 loc(#loc80) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %36 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc80) +// CHECK-NEXT: llvm.store %29, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc80) // CHECK-NEXT: call @f_bytes_6(%5) : (i256) -> () loc(#loc81) // CHECK-NEXT: return loc(#loc75) // CHECK-NEXT: } loc(#loc75) @@ -1066,7 +919,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1106,65 +958,38 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc87) // CHECK-NEXT: cf.br ^bb2 loc(#loc87) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %20 = arith.andi %8, %c1_i256 : i256 loc(#loc87) -// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc87) -// CHECK-NEXT: cf.cond_br %21, ^bb6, ^bb3 loc(#loc87) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%2, %8, %13, %6) : (i256, i256, i256, i256) -> () loc(#loc87) +// CHECK-NEXT: %20 = arith.addi %6, %13 : i256 loc(#loc87) +// CHECK-NEXT: %21 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc87) +// CHECK-NEXT: %23 = arith.addi %3, %c32_i256 : i256 loc(#loc87) +// CHECK-NEXT: %24 = llvm.inttoptr %20 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: %25 = llvm.inttoptr %23 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: "llvm.intr.memmove"(%24, %25, %22) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc87) +// CHECK-NEXT: %26 = arith.addi %20, %22 : i256 loc(#loc87) +// CHECK-NEXT: %27 = arith.subi %26, %6 : i256 loc(#loc87) +// CHECK-NEXT: %28 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: llvm.store %27, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: %29 = arith.subi %26, %5 : i256 loc(#loc87) +// CHECK-NEXT: %30 = arith.addi %29, %c31_i256 : i256 loc(#loc87) +// CHECK-NEXT: %31 = arith.andi %30, %c-32_i256 : i256 loc(#loc87) +// CHECK-NEXT: %32 = arith.addi %5, %31 : i256 loc(#loc87) +// CHECK-NEXT: %33 = arith.cmpi ugt, %32, %c18446744073709551615_i256 : i256 loc(#loc87) +// CHECK-NEXT: %34 = arith.cmpi ult, %32, %5 : i256 loc(#loc87) +// CHECK-NEXT: %35 = arith.ori %33, %34 : i1 loc(#loc87) +// CHECK-NEXT: cf.cond_br %35, ^bb3, ^bb4 loc(#loc87) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %2, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc87) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc87) -// CHECK-NEXT: ^bb4(%25: i256 loc({{.*}}:51:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %26 = arith.cmpi ult, %25, %13 : i256 loc(#loc87) -// CHECK-NEXT: cf.cond_br %26, ^bb5(%25 : i256), ^bb7 loc(#loc87) -// CHECK-NEXT: ^bb5(%27: i256 loc({{.*}}:51:12)): // pred: ^bb4 -// CHECK-NEXT: %28 = arith.divui %27, %c32_i256 : i256 loc(#loc87) -// CHECK-NEXT: %29 = arith.addi %24, %28 : i256 loc(#loc87) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc87) -// CHECK-NEXT: %31 = llvm.load %30 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc87) -// CHECK-NEXT: %32 = arith.addi %6, %27 : i256 loc(#loc87) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %31, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %34 = arith.addi %27, %c32_i256 : i256 loc(#loc87) -// CHECK-NEXT: cf.br ^bb4(%34 : i256) loc(#loc87) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %35 = arith.andi %8, %c-256_i256 : i256 loc(#loc87) -// CHECK-NEXT: %36 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: cf.br ^bb7 loc(#loc87) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %37 = arith.addi %6, %13 : i256 loc(#loc87) -// CHECK-NEXT: %38 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc87) -// CHECK-NEXT: %40 = arith.addi %3, %c32_i256 : i256 loc(#loc87) -// CHECK-NEXT: %41 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %42 = llvm.inttoptr %40 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: "llvm.intr.memmove"(%41, %42, %39) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc87) -// CHECK-NEXT: %43 = arith.addi %37, %39 : i256 loc(#loc87) -// CHECK-NEXT: %44 = arith.subi %43, %6 : i256 loc(#loc87) -// CHECK-NEXT: %45 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %46 = arith.subi %43, %5 : i256 loc(#loc87) -// CHECK-NEXT: %47 = arith.addi %46, %c31_i256 : i256 loc(#loc87) -// CHECK-NEXT: %48 = arith.andi %47, %c-32_i256 : i256 loc(#loc87) -// CHECK-NEXT: %49 = arith.addi %5, %48 : i256 loc(#loc87) -// CHECK-NEXT: %50 = arith.cmpi ugt, %49, %c18446744073709551615_i256 : i256 loc(#loc87) -// CHECK-NEXT: %51 = arith.cmpi ult, %49, %5 : i256 loc(#loc87) -// CHECK-NEXT: %52 = arith.ori %50, %51 : i1 loc(#loc87) -// CHECK-NEXT: cf.cond_br %52, ^bb8, ^bb9 loc(#loc87) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %53 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %54 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %c65_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: "llvm.intrcall"(%55, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc87) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: %37 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: llvm.store %c65_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: "llvm.intrcall"(%38, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc87) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc87) -// CHECK-NEXT: cf.br ^bb9 loc(#loc87) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %56 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %49, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: cf.br ^bb4 loc(#loc87) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %39 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc87) +// CHECK-NEXT: llvm.store %32, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) // CHECK-NEXT: call @f_bytes_6(%5) : (i256) -> () loc(#loc88) // CHECK-NEXT: return loc(#loc82) // CHECK-NEXT: } loc(#loc82) @@ -1173,7 +998,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1213,64 +1037,37 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc94) // CHECK-NEXT: cf.br ^bb2 loc(#loc94) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %20 = arith.andi %8, %c1_i256 : i256 loc(#loc94) -// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc94) -// CHECK-NEXT: cf.cond_br %21, ^bb6, ^bb3 loc(#loc94) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%2, %8, %13, %6) : (i256, i256, i256, i256) -> () loc(#loc94) +// CHECK-NEXT: %20 = arith.addi %6, %13 : i256 loc(#loc94) +// CHECK-NEXT: %21 = llvm.extractvalue %3[1] : !llvm.struct<(i256, i256)> loc(#loc94) +// CHECK-NEXT: %22 = llvm.extractvalue %3[0] : !llvm.struct<(i256, i256)> loc(#loc94) +// CHECK-NEXT: %23 = llvm.inttoptr %20 : i256 to !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: %24 = llvm.inttoptr %22 : i256 to !llvm.ptr<2> loc(#loc94) +// CHECK-NEXT: "llvm.intr.memcpy"(%23, %24, %21) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc94) +// CHECK-NEXT: %25 = arith.addi %20, %21 : i256 loc(#loc94) +// CHECK-NEXT: %26 = arith.subi %25, %6 : i256 loc(#loc94) +// CHECK-NEXT: %27 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: %28 = arith.subi %25, %5 : i256 loc(#loc94) +// CHECK-NEXT: %29 = arith.addi %28, %c31_i256 : i256 loc(#loc94) +// CHECK-NEXT: %30 = arith.andi %29, %c-32_i256 : i256 loc(#loc94) +// CHECK-NEXT: %31 = arith.addi %5, %30 : i256 loc(#loc94) +// CHECK-NEXT: %32 = arith.cmpi ugt, %31, %c18446744073709551615_i256 : i256 loc(#loc94) +// CHECK-NEXT: %33 = arith.cmpi ult, %31, %5 : i256 loc(#loc94) +// CHECK-NEXT: %34 = arith.ori %32, %33 : i1 loc(#loc94) +// CHECK-NEXT: cf.cond_br %34, ^bb3, ^bb4 loc(#loc94) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: llvm.store %2, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc94) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc94) -// CHECK-NEXT: ^bb4(%25: i256 loc({{.*}}:55:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %26 = arith.cmpi ult, %25, %13 : i256 loc(#loc94) -// CHECK-NEXT: cf.cond_br %26, ^bb5(%25 : i256), ^bb7 loc(#loc94) -// CHECK-NEXT: ^bb5(%27: i256 loc({{.*}}:55:12)): // pred: ^bb4 -// CHECK-NEXT: %28 = arith.divui %27, %c32_i256 : i256 loc(#loc94) -// CHECK-NEXT: %29 = arith.addi %24, %28 : i256 loc(#loc94) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc94) -// CHECK-NEXT: %31 = llvm.load %30 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc94) -// CHECK-NEXT: %32 = arith.addi %6, %27 : i256 loc(#loc94) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: llvm.store %31, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: %34 = arith.addi %27, %c32_i256 : i256 loc(#loc94) -// CHECK-NEXT: cf.br ^bb4(%34 : i256) loc(#loc94) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %35 = arith.andi %8, %c-256_i256 : i256 loc(#loc94) -// CHECK-NEXT: %36 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: cf.br ^bb7 loc(#loc94) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %37 = arith.addi %6, %13 : i256 loc(#loc94) -// CHECK-NEXT: %38 = llvm.extractvalue %3[1] : !llvm.struct<(i256, i256)> loc(#loc94) -// CHECK-NEXT: %39 = llvm.extractvalue %3[0] : !llvm.struct<(i256, i256)> loc(#loc94) -// CHECK-NEXT: %40 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: %41 = llvm.inttoptr %39 : i256 to !llvm.ptr<2> loc(#loc94) -// CHECK-NEXT: "llvm.intr.memcpy"(%40, %41, %38) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc94) -// CHECK-NEXT: %42 = arith.addi %37, %38 : i256 loc(#loc94) -// CHECK-NEXT: %43 = arith.subi %42, %6 : i256 loc(#loc94) -// CHECK-NEXT: %44 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: llvm.store %43, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: %45 = arith.subi %42, %5 : i256 loc(#loc94) -// CHECK-NEXT: %46 = arith.addi %45, %c31_i256 : i256 loc(#loc94) -// CHECK-NEXT: %47 = arith.andi %46, %c-32_i256 : i256 loc(#loc94) -// CHECK-NEXT: %48 = arith.addi %5, %47 : i256 loc(#loc94) -// CHECK-NEXT: %49 = arith.cmpi ugt, %48, %c18446744073709551615_i256 : i256 loc(#loc94) -// CHECK-NEXT: %50 = arith.cmpi ult, %48, %5 : i256 loc(#loc94) -// CHECK-NEXT: %51 = arith.ori %49, %50 : i1 loc(#loc94) -// CHECK-NEXT: cf.cond_br %51, ^bb8, ^bb9 loc(#loc94) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: %53 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: llvm.store %c65_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: "llvm.intrcall"(%54, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc94) +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: %36 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: llvm.store %c65_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: "llvm.intrcall"(%37, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc94) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc94) -// CHECK-NEXT: cf.br ^bb9 loc(#loc94) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %55 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc94) -// CHECK-NEXT: llvm.store %48, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: cf.br ^bb4 loc(#loc94) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %38 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc94) +// CHECK-NEXT: llvm.store %31, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc94) // CHECK-NEXT: call @f_bytes_6(%5) : (i256) -> () loc(#loc95) // CHECK-NEXT: return loc(#loc89) // CHECK-NEXT: } loc(#loc89) @@ -1341,7 +1138,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c-6277101735386680763835789423207666416102355444464034512896_i256 = arith.constant -6277101735386680763835789423207666416102355444464034512896 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1381,62 +1177,35 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc108) // CHECK-NEXT: cf.br ^bb2 loc(#loc108) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %20 = arith.andi %8, %c1_i256 : i256 loc(#loc108) -// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc108) -// CHECK-NEXT: cf.cond_br %21, ^bb6, ^bb3 loc(#loc108) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%2, %8, %13, %6) : (i256, i256, i256, i256) -> () loc(#loc108) +// CHECK-NEXT: %20 = arith.addi %6, %13 : i256 loc(#loc108) +// CHECK-NEXT: %21 = arith.andi %3, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc108) +// CHECK-NEXT: %22 = llvm.inttoptr %20 : i256 to !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: llvm.store %21, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: %23 = arith.addi %20, %c8_i256 : i256 loc(#loc108) +// CHECK-NEXT: %24 = arith.subi %23, %6 : i256 loc(#loc108) +// CHECK-NEXT: %25 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: llvm.store %24, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: %26 = arith.subi %23, %5 : i256 loc(#loc108) +// CHECK-NEXT: %27 = arith.addi %26, %c31_i256 : i256 loc(#loc108) +// CHECK-NEXT: %28 = arith.andi %27, %c-32_i256 : i256 loc(#loc108) +// CHECK-NEXT: %29 = arith.addi %5, %28 : i256 loc(#loc108) +// CHECK-NEXT: %30 = arith.cmpi ugt, %29, %c18446744073709551615_i256 : i256 loc(#loc108) +// CHECK-NEXT: %31 = arith.cmpi ult, %29, %5 : i256 loc(#loc108) +// CHECK-NEXT: %32 = arith.ori %30, %31 : i1 loc(#loc108) +// CHECK-NEXT: cf.cond_br %32, ^bb3, ^bb4 loc(#loc108) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %2, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc108) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc108) -// CHECK-NEXT: ^bb4(%25: i256 loc({{.*}}:63:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %26 = arith.cmpi ult, %25, %13 : i256 loc(#loc108) -// CHECK-NEXT: cf.cond_br %26, ^bb5(%25 : i256), ^bb7 loc(#loc108) -// CHECK-NEXT: ^bb5(%27: i256 loc({{.*}}:63:12)): // pred: ^bb4 -// CHECK-NEXT: %28 = arith.divui %27, %c32_i256 : i256 loc(#loc108) -// CHECK-NEXT: %29 = arith.addi %24, %28 : i256 loc(#loc108) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc108) -// CHECK-NEXT: %31 = llvm.load %30 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc108) -// CHECK-NEXT: %32 = arith.addi %6, %27 : i256 loc(#loc108) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %31, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: %34 = arith.addi %27, %c32_i256 : i256 loc(#loc108) -// CHECK-NEXT: cf.br ^bb4(%34 : i256) loc(#loc108) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %35 = arith.andi %8, %c-256_i256 : i256 loc(#loc108) -// CHECK-NEXT: %36 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: cf.br ^bb7 loc(#loc108) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %37 = arith.addi %6, %13 : i256 loc(#loc108) -// CHECK-NEXT: %38 = arith.andi %3, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc108) -// CHECK-NEXT: %39 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: %40 = arith.addi %37, %c8_i256 : i256 loc(#loc108) -// CHECK-NEXT: %41 = arith.subi %40, %6 : i256 loc(#loc108) -// CHECK-NEXT: %42 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %41, %42 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: %43 = arith.subi %40, %5 : i256 loc(#loc108) -// CHECK-NEXT: %44 = arith.addi %43, %c31_i256 : i256 loc(#loc108) -// CHECK-NEXT: %45 = arith.andi %44, %c-32_i256 : i256 loc(#loc108) -// CHECK-NEXT: %46 = arith.addi %5, %45 : i256 loc(#loc108) -// CHECK-NEXT: %47 = arith.cmpi ugt, %46, %c18446744073709551615_i256 : i256 loc(#loc108) -// CHECK-NEXT: %48 = arith.cmpi ult, %46, %5 : i256 loc(#loc108) -// CHECK-NEXT: %49 = arith.ori %47, %48 : i1 loc(#loc108) -// CHECK-NEXT: cf.cond_br %49, ^bb8, ^bb9 loc(#loc108) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: %51 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %c65_i256, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: "llvm.intrcall"(%52, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc108) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: %34 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: llvm.store %c65_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: "llvm.intrcall"(%35, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc108) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc108) -// CHECK-NEXT: cf.br ^bb9 loc(#loc108) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %53 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc108) -// CHECK-NEXT: llvm.store %46, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: cf.br ^bb4 loc(#loc108) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %36 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc108) +// CHECK-NEXT: llvm.store %29, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc108) // CHECK-NEXT: call @f_bytes_6(%5) : (i256) -> () loc(#loc109) // CHECK-NEXT: return loc(#loc103) // CHECK-NEXT: } loc(#loc103) @@ -1621,7 +1390,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1658,57 +1426,30 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc131) // CHECK-NEXT: cf.br ^bb2 loc(#loc131) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %18 = arith.andi %6, %c1_i256 : i256 loc(#loc131) -// CHECK-NEXT: %19 = arith.cmpi eq, %18, %c0_i256 : i256 loc(#loc131) -// CHECK-NEXT: cf.cond_br %19, ^bb6, ^bb3 loc(#loc131) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%1, %6, %11, %4) : (i256, i256, i256, i256) -> () loc(#loc131) +// CHECK-NEXT: %18 = arith.addi %4, %11 : i256 loc(#loc131) +// CHECK-NEXT: %19 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: llvm.store %11, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: %20 = arith.subi %18, %3 : i256 loc(#loc131) +// CHECK-NEXT: %21 = arith.addi %20, %c31_i256 : i256 loc(#loc131) +// CHECK-NEXT: %22 = arith.andi %21, %c-32_i256 : i256 loc(#loc131) +// CHECK-NEXT: %23 = arith.addi %3, %22 : i256 loc(#loc131) +// CHECK-NEXT: %24 = arith.cmpi ugt, %23, %c18446744073709551615_i256 : i256 loc(#loc131) +// CHECK-NEXT: %25 = arith.cmpi ult, %23, %3 : i256 loc(#loc131) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i1 loc(#loc131) +// CHECK-NEXT: cf.cond_br %26, ^bb3, ^bb4 loc(#loc131) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: llvm.store %1, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: %22 = "llvm.intrcall"(%21, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc131) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc131) -// CHECK-NEXT: ^bb4(%23: i256 loc({{.*}}:83:12)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %24 = arith.cmpi ult, %23, %11 : i256 loc(#loc131) -// CHECK-NEXT: cf.cond_br %24, ^bb5(%23 : i256), ^bb7 loc(#loc131) -// CHECK-NEXT: ^bb5(%25: i256 loc({{.*}}:83:12)): // pred: ^bb4 -// CHECK-NEXT: %26 = arith.divui %25, %c32_i256 : i256 loc(#loc131) -// CHECK-NEXT: %27 = arith.addi %22, %26 : i256 loc(#loc131) -// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc131) -// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc131) -// CHECK-NEXT: %30 = arith.addi %4, %25 : i256 loc(#loc131) -// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: llvm.store %29, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: %32 = arith.addi %25, %c32_i256 : i256 loc(#loc131) -// CHECK-NEXT: cf.br ^bb4(%32 : i256) loc(#loc131) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %33 = arith.andi %6, %c-256_i256 : i256 loc(#loc131) -// CHECK-NEXT: %34 = llvm.inttoptr %4 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: llvm.store %33, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: cf.br ^bb7 loc(#loc131) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %35 = arith.addi %4, %11 : i256 loc(#loc131) -// CHECK-NEXT: %36 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: llvm.store %11, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: %37 = arith.subi %35, %3 : i256 loc(#loc131) -// CHECK-NEXT: %38 = arith.addi %37, %c31_i256 : i256 loc(#loc131) -// CHECK-NEXT: %39 = arith.andi %38, %c-32_i256 : i256 loc(#loc131) -// CHECK-NEXT: %40 = arith.addi %3, %39 : i256 loc(#loc131) -// CHECK-NEXT: %41 = arith.cmpi ugt, %40, %c18446744073709551615_i256 : i256 loc(#loc131) -// CHECK-NEXT: %42 = arith.cmpi ult, %40, %3 : i256 loc(#loc131) -// CHECK-NEXT: %43 = arith.ori %41, %42 : i1 loc(#loc131) -// CHECK-NEXT: cf.cond_br %43, ^bb8, ^bb9 loc(#loc131) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: %45 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: llvm.store %c65_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: "llvm.intrcall"(%46, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc131) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: %28 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: llvm.store %c65_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: "llvm.intrcall"(%29, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc131) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc131) -// CHECK-NEXT: cf.br ^bb9 loc(#loc131) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %47 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc131) -// CHECK-NEXT: llvm.store %40, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: cf.br ^bb4 loc(#loc131) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %30 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc131) +// CHECK-NEXT: llvm.store %23, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc131) // CHECK-NEXT: call @f_bytes_6(%3) : (i256) -> () loc(#loc132) // CHECK-NEXT: return loc(#loc128) // CHECK-NEXT: } loc(#loc128) @@ -1906,7 +1647,6 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -1946,108 +1686,54 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc161) // CHECK-NEXT: cf.br ^bb2 loc(#loc161) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %20 = arith.andi %8, %c1_i256 : i256 loc(#loc161) -// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc161) -// CHECK-NEXT: cf.cond_br %21, ^bb6, ^bb3 loc(#loc161) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%2, %8, %13, %6) : (i256, i256, i256, i256) -> () loc(#loc161) +// CHECK-NEXT: %20 = arith.addi %6, %13 : i256 loc(#loc161) +// CHECK-NEXT: %21 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc161) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc161) +// CHECK-NEXT: %23 = arith.shrui %22, %c1_i256 : i256 loc(#loc161) +// CHECK-NEXT: %24 = arith.andi %22, %c1_i256 : i256 loc(#loc161) +// CHECK-NEXT: %25 = arith.cmpi eq, %24, %c0_i256 : i256 loc(#loc161) +// CHECK-NEXT: %26 = arith.andi %23, %c127_i256 : i256 loc(#loc161) +// CHECK-NEXT: %27 = arith.select %25, %26, %23 : i256 loc(#loc161) +// CHECK-NEXT: %28 = arith.cmpi ult, %27, %c32_i256 : i256 loc(#loc161) +// CHECK-NEXT: %29 = arith.extui %28 : i1 to i256 loc(#loc161) +// CHECK-NEXT: %30 = arith.cmpi eq, %24, %29 : i256 loc(#loc161) +// CHECK-NEXT: cf.cond_br %30, ^bb3, ^bb4 loc(#loc161) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %2, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc161) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc161) -// CHECK-NEXT: ^bb4(%25: i256 loc({{.*}}:99:13)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %26 = arith.cmpi ult, %25, %13 : i256 loc(#loc161) -// CHECK-NEXT: cf.cond_br %26, ^bb5(%25 : i256), ^bb7 loc(#loc161) -// CHECK-NEXT: ^bb5(%27: i256 loc({{.*}}:99:13)): // pred: ^bb4 -// CHECK-NEXT: %28 = arith.divui %27, %c32_i256 : i256 loc(#loc161) -// CHECK-NEXT: %29 = arith.addi %24, %28 : i256 loc(#loc161) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc161) -// CHECK-NEXT: %31 = llvm.load %30 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc161) -// CHECK-NEXT: %32 = arith.addi %6, %27 : i256 loc(#loc161) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %31, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %34 = arith.addi %27, %c32_i256 : i256 loc(#loc161) -// CHECK-NEXT: cf.br ^bb4(%34 : i256) loc(#loc161) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %35 = arith.andi %8, %c-256_i256 : i256 loc(#loc161) -// CHECK-NEXT: %36 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: cf.br ^bb7 loc(#loc161) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %37 = arith.addi %6, %13 : i256 loc(#loc161) -// CHECK-NEXT: %38 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc161) -// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc161) -// CHECK-NEXT: %40 = arith.shrui %39, %c1_i256 : i256 loc(#loc161) -// CHECK-NEXT: %41 = arith.andi %39, %c1_i256 : i256 loc(#loc161) -// CHECK-NEXT: %42 = arith.cmpi eq, %41, %c0_i256 : i256 loc(#loc161) -// CHECK-NEXT: %43 = arith.andi %40, %c127_i256 : i256 loc(#loc161) -// CHECK-NEXT: %44 = arith.select %42, %43, %40 : i256 loc(#loc161) -// CHECK-NEXT: %45 = arith.cmpi ult, %44, %c32_i256 : i256 loc(#loc161) -// CHECK-NEXT: %46 = arith.extui %45 : i1 to i256 loc(#loc161) -// CHECK-NEXT: %47 = arith.cmpi eq, %41, %46 : i256 loc(#loc161) -// CHECK-NEXT: cf.cond_br %47, ^bb8, ^bb9 loc(#loc161) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %49 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %c34_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: "llvm.intrcall"(%50, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc161) +// CHECK-NEXT: %31 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: %32 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: llvm.store %c34_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: "llvm.intrcall"(%33, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc161) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc161) -// CHECK-NEXT: cf.br ^bb9 loc(#loc161) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %51 = arith.andi %39, %c1_i256 : i256 loc(#loc161) -// CHECK-NEXT: %52 = arith.cmpi eq, %51, %c0_i256 : i256 loc(#loc161) -// CHECK-NEXT: cf.cond_br %52, ^bb13, ^bb10 loc(#loc161) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %53 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %3, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %55 = "llvm.intrcall"(%54, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc161) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc161) -// CHECK-NEXT: ^bb11(%56: i256 loc({{.*}}:99:13)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %57 = arith.cmpi ult, %56, %44 : i256 loc(#loc161) -// CHECK-NEXT: cf.cond_br %57, ^bb12(%56 : i256), ^bb14 loc(#loc161) -// CHECK-NEXT: ^bb12(%58: i256 loc({{.*}}:99:13)): // pred: ^bb11 -// CHECK-NEXT: %59 = arith.divui %58, %c32_i256 : i256 loc(#loc161) -// CHECK-NEXT: %60 = arith.addi %55, %59 : i256 loc(#loc161) -// CHECK-NEXT: %61 = llvm.inttoptr %60 : i256 to !llvm.ptr<5> loc(#loc161) -// CHECK-NEXT: %62 = llvm.load %61 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc161) -// CHECK-NEXT: %63 = arith.addi %37, %58 : i256 loc(#loc161) -// CHECK-NEXT: %64 = llvm.inttoptr %63 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %62, %64 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %65 = arith.addi %58, %c32_i256 : i256 loc(#loc161) -// CHECK-NEXT: cf.br ^bb11(%65 : i256) loc(#loc161) -// CHECK-NEXT: ^bb13: // pred: ^bb9 -// CHECK-NEXT: %66 = arith.andi %39, %c-256_i256 : i256 loc(#loc161) -// CHECK-NEXT: %67 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %66, %67 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: cf.br ^bb14 loc(#loc161) -// CHECK-NEXT: ^bb14: // 2 preds: ^bb11, ^bb13 -// CHECK-NEXT: %68 = arith.addi %37, %44 : i256 loc(#loc161) -// CHECK-NEXT: %69 = arith.subi %68, %6 : i256 loc(#loc161) -// CHECK-NEXT: %70 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %69, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %71 = arith.subi %68, %5 : i256 loc(#loc161) -// CHECK-NEXT: %72 = arith.addi %71, %c31_i256 : i256 loc(#loc161) -// CHECK-NEXT: %73 = arith.andi %72, %c-32_i256 : i256 loc(#loc161) -// CHECK-NEXT: %74 = arith.addi %5, %73 : i256 loc(#loc161) -// CHECK-NEXT: %75 = arith.cmpi ugt, %74, %c18446744073709551615_i256 : i256 loc(#loc161) -// CHECK-NEXT: %76 = arith.cmpi ult, %74, %5 : i256 loc(#loc161) -// CHECK-NEXT: %77 = arith.ori %75, %76 : i1 loc(#loc161) -// CHECK-NEXT: cf.cond_br %77, ^bb15, ^bb16 loc(#loc161) -// CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %78 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %78 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %79 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %c65_i256, %79 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: %80 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: "llvm.intrcall"(%80, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc161) +// CHECK-NEXT: cf.br ^bb4 loc(#loc161) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%3, %22, %27, %20) : (i256, i256, i256, i256) -> () loc(#loc161) +// CHECK-NEXT: %34 = arith.addi %20, %27 : i256 loc(#loc161) +// CHECK-NEXT: %35 = arith.subi %34, %6 : i256 loc(#loc161) +// CHECK-NEXT: %36 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: %37 = arith.subi %34, %5 : i256 loc(#loc161) +// CHECK-NEXT: %38 = arith.addi %37, %c31_i256 : i256 loc(#loc161) +// CHECK-NEXT: %39 = arith.andi %38, %c-32_i256 : i256 loc(#loc161) +// CHECK-NEXT: %40 = arith.addi %5, %39 : i256 loc(#loc161) +// CHECK-NEXT: %41 = arith.cmpi ugt, %40, %c18446744073709551615_i256 : i256 loc(#loc161) +// CHECK-NEXT: %42 = arith.cmpi ult, %40, %5 : i256 loc(#loc161) +// CHECK-NEXT: %43 = arith.ori %41, %42 : i1 loc(#loc161) +// CHECK-NEXT: cf.cond_br %43, ^bb5, ^bb6 loc(#loc161) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: %45 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: llvm.store %c65_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: "llvm.intrcall"(%46, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc161) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc161) -// CHECK-NEXT: cf.br ^bb16 loc(#loc161) -// CHECK-NEXT: ^bb16: // 2 preds: ^bb14, ^bb15 -// CHECK-NEXT: %81 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc161) -// CHECK-NEXT: llvm.store %74, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: cf.br ^bb6 loc(#loc161) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %47 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc161) +// CHECK-NEXT: llvm.store %40, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc161) // CHECK-NEXT: call @f_string_12(%5) : (i256) -> () loc(#loc162) // CHECK-NEXT: return loc(#loc156) // CHECK-NEXT: } loc(#loc156) @@ -2111,6 +1797,41 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: call @f_string_12(%5) : (i256) -> () loc(#loc169) // CHECK-NEXT: return loc(#loc163) // CHECK-NEXT: } loc(#loc163) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:19:12), %arg1: i256 loc({{.*}}:19:12), %arg2: i256 loc({{.*}}:19:12), %arg3: i256 loc({{.*}}:19:12)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc31) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc31) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc31) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc31) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc31) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc31) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:19:12)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc31) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc31) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:19:12)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc31) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc31) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc31) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc31) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc31) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc31) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc31) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc31) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: cf.br ^bb5 loc(#loc31) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc31) +// CHECK-NEXT: } loc(#loc31) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:7:12) @@ -2147,6 +1868,7 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: #loc47 = loc({{.*}}:30:0) // CHECK-NEXT: #loc50 = loc({{.*}}:31:25) // CHECK-NEXT: #loc51 = loc({{.*}}:31:28) +// CHECK-NEXT: #loc52 = loc({{.*}}:31:12) // CHECK-NEXT: #loc53 = loc({{.*}}:31:4) // CHECK-NEXT: #loc54 = loc({{.*}}:34:0) // CHECK-NEXT: #loc57 = loc({{.*}}:35:25) @@ -2161,18 +1883,22 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: #loc68 = loc({{.*}}:42:0) // CHECK-NEXT: #loc71 = loc({{.*}}:43:25) // CHECK-NEXT: #loc72 = loc({{.*}}:43:28) +// CHECK-NEXT: #loc73 = loc({{.*}}:43:12) // CHECK-NEXT: #loc74 = loc({{.*}}:43:4) // CHECK-NEXT: #loc75 = loc({{.*}}:46:0) // CHECK-NEXT: #loc78 = loc({{.*}}:47:25) // CHECK-NEXT: #loc79 = loc({{.*}}:47:28) +// CHECK-NEXT: #loc80 = loc({{.*}}:47:12) // CHECK-NEXT: #loc81 = loc({{.*}}:47:4) // CHECK-NEXT: #loc82 = loc({{.*}}:50:0) // CHECK-NEXT: #loc85 = loc({{.*}}:51:25) // CHECK-NEXT: #loc86 = loc({{.*}}:51:28) +// CHECK-NEXT: #loc87 = loc({{.*}}:51:12) // CHECK-NEXT: #loc88 = loc({{.*}}:51:4) // CHECK-NEXT: #loc89 = loc({{.*}}:54:0) // CHECK-NEXT: #loc92 = loc({{.*}}:55:25) // CHECK-NEXT: #loc93 = loc({{.*}}:55:28) +// CHECK-NEXT: #loc94 = loc({{.*}}:55:12) // CHECK-NEXT: #loc95 = loc({{.*}}:55:4) // CHECK-NEXT: #loc96 = loc({{.*}}:58:0) // CHECK-NEXT: #loc99 = loc({{.*}}:59:25) @@ -2182,6 +1908,7 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: #loc103 = loc({{.*}}:62:0) // CHECK-NEXT: #loc106 = loc({{.*}}:63:25) // CHECK-NEXT: #loc107 = loc({{.*}}:63:28) +// CHECK-NEXT: #loc108 = loc({{.*}}:63:12) // CHECK-NEXT: #loc109 = loc({{.*}}:63:4) // CHECK-NEXT: #loc110 = loc({{.*}}:66:0) // CHECK-NEXT: #loc111 = loc({{.*}}:67:12) @@ -2200,6 +1927,7 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: #loc127 = loc({{.*}}:79:4) // CHECK-NEXT: #loc128 = loc({{.*}}:82:0) // CHECK-NEXT: #loc130 = loc({{.*}}:83:25) +// CHECK-NEXT: #loc131 = loc({{.*}}:83:12) // CHECK-NEXT: #loc132 = loc({{.*}}:83:4) // CHECK-NEXT: #loc133 = loc({{.*}}:86:0) // CHECK-NEXT: #loc137 = loc({{.*}}:87:25) @@ -2220,6 +1948,7 @@ function fstr_ab(string memory a, string calldata b) { // CHECK-NEXT: #loc156 = loc({{.*}}:98:0) // CHECK-NEXT: #loc159 = loc({{.*}}:99:27) // CHECK-NEXT: #loc160 = loc({{.*}}:99:30) +// CHECK-NEXT: #loc161 = loc({{.*}}:99:13) // CHECK-NEXT: #loc162 = loc({{.*}}:99:4) // CHECK-NEXT: #loc163 = loc({{.*}}:102:0) // CHECK-NEXT: #loc166 = loc({{.*}}:103:27) diff --git a/test/lit/mlirCodegen/EVM/delete-mapping-array.sol b/test/lit/mlirCodegen/EVM/delete-mapping-array.sol index 3cbb05d48..f4c38d074 100644 --- a/test/lit/mlirCodegen/EVM/delete-mapping-array.sol +++ b/test/lit/mlirCodegen/EVM/delete-mapping-array.sol @@ -8,6 +8,7 @@ contract C { function delFixed() public { delete fixedArr; } function delDyn() public { delete dynArr; } } + // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol diff --git a/test/lit/mlirCodegen/EVM/delete.sol b/test/lit/mlirCodegen/EVM/delete.sol index 6fdf10fc4..37bca6a45 100644 --- a/test/lit/mlirCodegen/EVM/delete.sol +++ b/test/lit/mlirCodegen/EVM/delete.sol @@ -139,8 +139,12 @@ contract Delete { // CHECK-NEXT: #loc7 = loc({{.*}}:125:8) // CHECK-NEXT: #loc10 = loc({{.*}}:119:8) // CHECK-NEXT: #loc16 = loc({{.*}}:107:8) +// CHECK-NEXT: #loc19 = loc({{.*}}:101:8) // CHECK-NEXT: #loc22 = loc({{.*}}:96:8) // CHECK-NEXT: #loc37 = loc({{.*}}:78:8) +// CHECK-NEXT: #loc42 = loc({{.*}}:72:8) +// CHECK-NEXT: #loop_unroll = #llvm.loop_unroll +// CHECK-NEXT: #loop_annotation = #llvm.loop_annotation // CHECK-NEXT: module @Delete_287 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -575,42 +579,46 @@ contract Delete { // CHECK-NEXT: func.func @deleteMixedStruct_279() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c21_i256 = arith.constant 21 : i256 loc(#loc) // CHECK-NEXT: %c19_i256 = arith.constant 19 : i256 loc(#loc) -// CHECK-NEXT: %c18_i256 = arith.constant 18 : i256 loc(#loc) -// CHECK-NEXT: %c17_i256 = arith.constant 17 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c16_i256 = arith.constant 16 : i256 loc(#loc6) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c16_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1 = llvm.inttoptr %c17_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %1 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %2 = llvm.inttoptr %c18_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %3 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %5 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %6 = arith.cmpi ugt, %4, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %6, ^bb1, ^bb4 loc(#loc7) -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c19_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb2(%10: i256 loc({{.*}}:125:8)): // 2 preds: ^bb1, ^bb3 -// CHECK-NEXT: %11 = arith.cmpi ult, %10, %4 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %11, ^bb3(%10 : i256), ^bb4 loc(#loc7) -// CHECK-NEXT: ^bb3(%12: i256 loc({{.*}}:125:8)): // pred: ^bb2 -// CHECK-NEXT: %13 = arith.addi %9, %12 : i256 loc(#loc7) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %15 = arith.addi %12, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb2(%15 : i256) loc(#loc7) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 -// CHECK-NEXT: %16 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: llvm.store %c0_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc7) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:125:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c3_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc7) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:125:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = arith.addi %2, %c16_i256 : i256 loc(#loc7) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %5 = arith.addi %2, %c1_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.br ^bb1(%5 : i256) {loop_annotation = #loop_annotation} loc(#loc7) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: %6 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %7 = llvm.load %6 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) +// CHECK-NEXT: %8 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: llvm.store %c0_i256, %8 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %9 = arith.cmpi ugt, %7, %c0_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.cond_br %9, ^bb4, ^bb7 loc(#loc7) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c19_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %12 = "llvm.intrcall"(%11, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) +// CHECK-NEXT: cf.br ^bb5(%c0_i256 : i256) loc(#loc7) +// CHECK-NEXT: ^bb5(%13: i256 loc({{.*}}:125:8)): // 2 preds: ^bb4, ^bb6 +// CHECK-NEXT: %14 = arith.cmpi ult, %13, %7 : i256 loc(#loc7) +// CHECK-NEXT: cf.cond_br %14, ^bb6(%13 : i256), ^bb7 loc(#loc7) +// CHECK-NEXT: ^bb6(%15: i256 loc({{.*}}:125:8)): // pred: ^bb5 +// CHECK-NEXT: %16 = arith.addi %12, %15 : i256 loc(#loc7) +// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %18 = arith.addi %15, %c1_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.br ^bb5(%18 : i256) loc(#loc7) +// CHECK-NEXT: ^bb7: // 2 preds: ^bb3, ^bb5 +// CHECK-NEXT: %19 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: llvm.store %c0_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) // CHECK-NEXT: return loc(#loc5) // CHECK-NEXT: } loc(#loc5) // CHECK-NEXT: func.func @deleteMapArr2D_272() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { @@ -680,19 +688,21 @@ contract Delete { // CHECK-NEXT: return loc(#loc14) // CHECK-NEXT: } loc(#loc14) // CHECK-NEXT: func.func @deletePointFixed_251() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c12_i256 = arith.constant 12 : i256 loc(#loc) -// CHECK-NEXT: %c11_i256 = arith.constant 11 : i256 loc(#loc) -// CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc) // CHECK-NEXT: %c9_i256 = arith.constant 9 : i256 loc(#loc18) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c9_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1 = llvm.inttoptr %c10_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %1 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %2 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %3 = llvm.inttoptr %c12_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc19) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc19) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:101:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c4_i256 : i256 loc(#loc19) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc19) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:101:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = arith.addi %2, %c9_i256 : i256 loc(#loc19) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: %5 = arith.addi %2, %c1_i256 : i256 loc(#loc19) +// CHECK-NEXT: cf.br ^bb1(%5 : i256) {loop_annotation = #loop_annotation} loc(#loc19) +// CHECK-NEXT: ^bb3: // pred: ^bb1 // CHECK-NEXT: return loc(#loc17) // CHECK-NEXT: } loc(#loc17) // CHECK-NEXT: func.func @deletePointArr_244() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { @@ -865,25 +875,30 @@ contract Delete { // CHECK-NEXT: return loc(#loc34) // CHECK-NEXT: } loc(#loc34) // CHECK-NEXT: func.func @deleteStaticArr_176() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc) +// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc39) // CHECK-NEXT: %0 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc39) // CHECK-NEXT: llvm.store %c1_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc39) // CHECK-NEXT: %1 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc40) // CHECK-NEXT: llvm.store %c2_i256, %1 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc40) // CHECK-NEXT: %2 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc41) // CHECK-NEXT: llvm.store %c3_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: %3 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc42) -// CHECK-NEXT: llvm.store %c0_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) -// CHECK-NEXT: %4 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc42) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) -// CHECK-NEXT: %5 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc42) -// CHECK-NEXT: llvm.store %c0_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc42) +// CHECK-NEXT: ^bb1(%3: i256 loc({{.*}}:72:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %4 = arith.cmpi ult, %3, %c3_i256 : i256 loc(#loc42) +// CHECK-NEXT: cf.cond_br %4, ^bb2(%3 : i256), ^bb3 loc(#loc42) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:72:8)): // pred: ^bb1 +// CHECK-NEXT: %6 = arith.addi %5, %c4_i256 : i256 loc(#loc42) +// CHECK-NEXT: %7 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %c0_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: %8 = arith.addi %5, %c1_i256 : i256 loc(#loc42) +// CHECK-NEXT: cf.br ^bb1(%8 : i256) {loop_annotation = #loop_annotation} loc(#loc42) +// CHECK-NEXT: ^bb3: // pred: ^bb1 // CHECK-NEXT: return loc(#loc38) // CHECK-NEXT: } loc(#loc38) // CHECK-NEXT: func.func @deleteStaticElem_151() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { @@ -981,7 +996,6 @@ contract Delete { // CHECK-NEXT: #loc15 = loc({{.*}}:27:4) // CHECK-NEXT: #loc17 = loc({{.*}}:100:4) // CHECK-NEXT: #loc18 = loc({{.*}}:26:4) -// CHECK-NEXT: #loc19 = loc({{.*}}:101:8) // CHECK-NEXT: #loc20 = loc({{.*}}:95:4) // CHECK-NEXT: #loc21 = loc({{.*}}:25:4) // CHECK-NEXT: #loc23 = loc({{.*}}:88:4) @@ -1002,7 +1016,6 @@ contract Delete { // CHECK-NEXT: #loc39 = loc({{.*}}:71:8) // CHECK-NEXT: #loc40 = loc({{.*}}:71:26) // CHECK-NEXT: #loc41 = loc({{.*}}:71:44) -// CHECK-NEXT: #loc42 = loc({{.*}}:72:8) // CHECK-NEXT: #loc43 = loc({{.*}}:64:4) // CHECK-NEXT: #loc44 = loc({{.*}}:65:8) // CHECK-NEXT: #loc45 = loc({{.*}}:65:26) diff --git a/test/lit/mlirCodegen/EVM/erc20.sol b/test/lit/mlirCodegen/EVM/erc20.sol index a497467ca..891c0a303 100644 --- a/test/lit/mlirCodegen/EVM/erc20.sol +++ b/test/lit/mlirCodegen/EVM/erc20.sol @@ -158,33 +158,31 @@ contract ERC20 { // CHECK-NEXT: #loc3 = loc({{.*}}:16:14) // CHECK-NEXT: #loc4 = loc({{.*}}:16:35) // CHECK-NEXT: #loc6 = loc({{.*}}:17:4) -// CHECK-NEXT: #loc8 = loc({{.*}}:18:4) -// CHECK-NEXT: #loc10 = loc({{.*}}:142:20) -// CHECK-NEXT: #loc11 = loc({{.*}}:142:35) -// CHECK-NEXT: #loc12 = loc({{.*}}:142:52) -// CHECK-NEXT: #loc26 = loc({{.*}}:124:17) -// CHECK-NEXT: #loc27 = loc({{.*}}:124:34) -// CHECK-NEXT: #loc46 = loc({{.*}}:114:17) -// CHECK-NEXT: #loc47 = loc({{.*}}:114:34) -// CHECK-NEXT: #loc59 = loc({{.*}}:96:21) -// CHECK-NEXT: #loc60 = loc({{.*}}:96:37) -// CHECK-NEXT: #loc61 = loc({{.*}}:96:56) -// CHECK-NEXT: #loc84 = loc({{.*}}:83:29) -// CHECK-NEXT: #loc85 = loc({{.*}}:83:46) -// CHECK-NEXT: #loc100 = loc({{.*}}:74:29) -// CHECK-NEXT: #loc101 = loc({{.*}}:74:46) -// CHECK-NEXT: #loc111 = loc({{.*}}:59:24) -// CHECK-NEXT: #loc112 = loc({{.*}}:59:40) -// CHECK-NEXT: #loc113 = loc({{.*}}:59:59) -// CHECK-NEXT: #loc132 = loc({{.*}}:54:19) -// CHECK-NEXT: #loc133 = loc({{.*}}:54:36) -// CHECK-NEXT: #loc140 = loc({{.*}}:50:21) -// CHECK-NEXT: #loc141 = loc({{.*}}:50:36) -// CHECK-NEXT: #loc147 = loc({{.*}}:45:20) -// CHECK-NEXT: #loc148 = loc({{.*}}:45:39) -// CHECK-NEXT: #loc155 = loc({{.*}}:41:21) -// CHECK-NEXT: #loc167 = loc({{.*}}:11:2) -// CHECK-NEXT: #loc170 = loc({{.*}}:10:2) +// CHECK-NEXT: #loc9 = loc({{.*}}:10:2) +// CHECK-NEXT: #loc11 = loc({{.*}}:142:20) +// CHECK-NEXT: #loc12 = loc({{.*}}:142:35) +// CHECK-NEXT: #loc13 = loc({{.*}}:142:52) +// CHECK-NEXT: #loc27 = loc({{.*}}:124:17) +// CHECK-NEXT: #loc28 = loc({{.*}}:124:34) +// CHECK-NEXT: #loc47 = loc({{.*}}:114:17) +// CHECK-NEXT: #loc48 = loc({{.*}}:114:34) +// CHECK-NEXT: #loc60 = loc({{.*}}:96:21) +// CHECK-NEXT: #loc61 = loc({{.*}}:96:37) +// CHECK-NEXT: #loc62 = loc({{.*}}:96:56) +// CHECK-NEXT: #loc85 = loc({{.*}}:83:29) +// CHECK-NEXT: #loc86 = loc({{.*}}:83:46) +// CHECK-NEXT: #loc101 = loc({{.*}}:74:29) +// CHECK-NEXT: #loc102 = loc({{.*}}:74:46) +// CHECK-NEXT: #loc112 = loc({{.*}}:59:24) +// CHECK-NEXT: #loc113 = loc({{.*}}:59:40) +// CHECK-NEXT: #loc114 = loc({{.*}}:59:59) +// CHECK-NEXT: #loc133 = loc({{.*}}:54:19) +// CHECK-NEXT: #loc134 = loc({{.*}}:54:36) +// CHECK-NEXT: #loc141 = loc({{.*}}:50:21) +// CHECK-NEXT: #loc142 = loc({{.*}}:50:36) +// CHECK-NEXT: #loc148 = loc({{.*}}:45:20) +// CHECK-NEXT: #loc149 = loc({{.*}}:45:39) +// CHECK-NEXT: #loc156 = loc({{.*}}:41:21) // CHECK-NEXT: module @ERC20_470 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -416,19 +414,7 @@ contract ERC20 { // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: func.func @_49(%arg0: i256 loc({{.*}}:16:14), %arg1: i256 loc({{.*}}:16:35)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) -// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) @@ -436,237 +422,9 @@ contract ERC20 { // CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc4) // CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc4) // CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc5) -// CHECK-NEXT: %3 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %5 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %6 = llvm.load %5 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) -// CHECK-NEXT: %7 = arith.shrui %6, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %8 = arith.andi %6, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %9 = arith.cmpi eq, %8, %c0_i256 : i256 loc(#loc6) -// CHECK-NEXT: %10 = arith.andi %7, %c127_i256 : i256 loc(#loc6) -// CHECK-NEXT: %11 = arith.select %9, %10, %7 : i256 loc(#loc6) -// CHECK-NEXT: %12 = arith.cmpi ult, %11, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %13 = arith.extui %12 : i1 to i256 loc(#loc6) -// CHECK-NEXT: %14 = arith.cmpi eq, %8, %13 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %14, ^bb1, ^bb2 loc(#loc6) -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c34_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) -// CHECK-NEXT: cf.br ^bb2 loc(#loc6) -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %18 = arith.cmpi ugt, %11, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %18, ^bb3, ^bb6 loc(#loc6) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c3_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %21 = "llvm.intrcall"(%20, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %22 = arith.addi %4, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: %23 = arith.divui %22, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %24 = arith.addi %21, %23 : i256 loc(#loc6) -// CHECK-NEXT: %25 = arith.cmpi ult, %4, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %26 = arith.select %25, %21, %24 : i256 loc(#loc6) -// CHECK-NEXT: %27 = arith.addi %11, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: %28 = arith.divui %27, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %29 = arith.addi %21, %28 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb4(%26 : i256) loc(#loc6) -// CHECK-NEXT: ^bb4(%30: i256 loc({{.*}}:17:4)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %31 = arith.cmpi ult, %30, %29 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %31, ^bb5(%30 : i256), ^bb6 loc(#loc6) -// CHECK-NEXT: ^bb5(%32: i256 loc({{.*}}:17:4)): // pred: ^bb4 -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %34 = arith.addi %32, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb4(%34 : i256) loc(#loc6) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %35 = arith.cmpi ugt, %4, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %35, ^bb10, ^bb7 loc(#loc6) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %36 = arith.cmpi ne, %4, %c0_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %36, ^bb9, ^bb8 loc(#loc6) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %37 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb16 loc(#loc6) -// CHECK-NEXT: ^bb9: // pred: ^bb7 -// CHECK-NEXT: %38 = arith.addi %2, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %39 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %40 = llvm.load %39 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %41 = arith.muli %4, %c8_i256 : i256 loc(#loc6) -// CHECK-NEXT: %42 = arith.subi %c256_i256, %41 : i256 loc(#loc6) -// CHECK-NEXT: %43 = arith.shli %c-1_i256, %42 : i256 loc(#loc6) -// CHECK-NEXT: %44 = arith.andi %40, %43 : i256 loc(#loc6) -// CHECK-NEXT: %45 = arith.muli %4, %c2_i256 : i256 loc(#loc6) -// CHECK-NEXT: %46 = arith.ori %44, %45 : i256 loc(#loc6) -// CHECK-NEXT: %47 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %46, %47 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb16 loc(#loc6) -// CHECK-NEXT: ^bb10: // pred: ^bb6 -// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c3_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %50 = "llvm.intrcall"(%49, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %51 = arith.addi %2, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %52 = arith.andi %4, %c-32_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc6) -// CHECK-NEXT: ^bb11(%53: i256 loc({{.*}}:17:4)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %54 = arith.cmpi ult, %53, %52 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %54, ^bb12(%53 : i256), ^bb13 loc(#loc6) -// CHECK-NEXT: ^bb12(%55: i256 loc({{.*}}:17:4)): // pred: ^bb11 -// CHECK-NEXT: %56 = arith.divui %55, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %57 = arith.addi %51, %55 : i256 loc(#loc6) -// CHECK-NEXT: %58 = llvm.inttoptr %57 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %59 = llvm.load %58 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %60 = arith.addi %50, %56 : i256 loc(#loc6) -// CHECK-NEXT: %61 = llvm.inttoptr %60 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %59, %61 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %62 = arith.addi %55, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb11(%62 : i256) loc(#loc6) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %63 = arith.cmpi ult, %52, %4 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %63, ^bb14, ^bb15 loc(#loc6) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %64 = arith.andi %4, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: %65 = arith.divui %52, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %66 = arith.addi %51, %52 : i256 loc(#loc6) -// CHECK-NEXT: %67 = llvm.inttoptr %66 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %68 = llvm.load %67 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %69 = arith.muli %64, %c8_i256 : i256 loc(#loc6) -// CHECK-NEXT: %70 = arith.subi %c256_i256, %69 : i256 loc(#loc6) -// CHECK-NEXT: %71 = arith.shli %c-1_i256, %70 : i256 loc(#loc6) -// CHECK-NEXT: %72 = arith.andi %68, %71 : i256 loc(#loc6) -// CHECK-NEXT: %73 = arith.addi %50, %65 : i256 loc(#loc6) -// CHECK-NEXT: %74 = llvm.inttoptr %73 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %72, %74 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb15 loc(#loc6) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %75 = arith.muli %4, %c2_i256 : i256 loc(#loc6) -// CHECK-NEXT: %76 = arith.ori %75, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %77 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %76, %77 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb16 loc(#loc6) -// CHECK-NEXT: ^bb16: // 3 preds: ^bb8, ^bb9, ^bb15 -// CHECK-NEXT: %78 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc7) -// CHECK-NEXT: %79 = llvm.inttoptr %78 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %80 = llvm.load %79 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %81 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %82 = llvm.load %81 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %83 = arith.shrui %82, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %84 = arith.andi %82, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %85 = arith.cmpi eq, %84, %c0_i256 : i256 loc(#loc8) -// CHECK-NEXT: %86 = arith.andi %83, %c127_i256 : i256 loc(#loc8) -// CHECK-NEXT: %87 = arith.select %85, %86, %83 : i256 loc(#loc8) -// CHECK-NEXT: %88 = arith.cmpi ult, %87, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %89 = arith.extui %88 : i1 to i256 loc(#loc8) -// CHECK-NEXT: %90 = arith.cmpi eq, %84, %89 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %90, ^bb17, ^bb18 loc(#loc8) -// CHECK-NEXT: ^bb17: // pred: ^bb16 -// CHECK-NEXT: %91 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %91 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %92 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c34_i256, %92 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %93 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: "llvm.intrcall"(%93, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) -// CHECK-NEXT: cf.br ^bb18 loc(#loc8) -// CHECK-NEXT: ^bb18: // 2 preds: ^bb16, ^bb17 -// CHECK-NEXT: %94 = arith.cmpi ugt, %87, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %94, ^bb19, ^bb22 loc(#loc8) -// CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %95 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c4_i256, %95 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %96 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %97 = "llvm.intrcall"(%96, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) -// CHECK-NEXT: %98 = arith.addi %80, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %99 = arith.divui %98, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %100 = arith.addi %97, %99 : i256 loc(#loc8) -// CHECK-NEXT: %101 = arith.cmpi ult, %80, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %102 = arith.select %101, %97, %100 : i256 loc(#loc8) -// CHECK-NEXT: %103 = arith.addi %87, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %104 = arith.divui %103, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %105 = arith.addi %97, %104 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb20(%102 : i256) loc(#loc8) -// CHECK-NEXT: ^bb20(%106: i256 loc({{.*}}:18:4)): // 2 preds: ^bb19, ^bb21 -// CHECK-NEXT: %107 = arith.cmpi ult, %106, %105 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %107, ^bb21(%106 : i256), ^bb22 loc(#loc8) -// CHECK-NEXT: ^bb21(%108: i256 loc({{.*}}:18:4)): // pred: ^bb20 -// CHECK-NEXT: %109 = llvm.inttoptr %108 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %c0_i256, %109 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %110 = arith.addi %108, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb20(%110 : i256) loc(#loc8) -// CHECK-NEXT: ^bb22: // 2 preds: ^bb18, ^bb20 -// CHECK-NEXT: %111 = arith.cmpi ugt, %80, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %111, ^bb26, ^bb23 loc(#loc8) -// CHECK-NEXT: ^bb23: // pred: ^bb22 -// CHECK-NEXT: %112 = arith.cmpi ne, %80, %c0_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %112, ^bb25, ^bb24 loc(#loc8) -// CHECK-NEXT: ^bb24: // pred: ^bb23 -// CHECK-NEXT: %113 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %c0_i256, %113 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb32 loc(#loc8) -// CHECK-NEXT: ^bb25: // pred: ^bb23 -// CHECK-NEXT: %114 = arith.addi %78, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %115 = llvm.inttoptr %114 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %116 = llvm.load %115 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %117 = arith.muli %80, %c8_i256 : i256 loc(#loc8) -// CHECK-NEXT: %118 = arith.subi %c256_i256, %117 : i256 loc(#loc8) -// CHECK-NEXT: %119 = arith.shli %c-1_i256, %118 : i256 loc(#loc8) -// CHECK-NEXT: %120 = arith.andi %116, %119 : i256 loc(#loc8) -// CHECK-NEXT: %121 = arith.muli %80, %c2_i256 : i256 loc(#loc8) -// CHECK-NEXT: %122 = arith.ori %120, %121 : i256 loc(#loc8) -// CHECK-NEXT: %123 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %122, %123 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb32 loc(#loc8) -// CHECK-NEXT: ^bb26: // pred: ^bb22 -// CHECK-NEXT: %124 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c4_i256, %124 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %125 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %126 = "llvm.intrcall"(%125, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) -// CHECK-NEXT: %127 = arith.addi %78, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %128 = arith.andi %80, %c-32_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb27(%c0_i256 : i256) loc(#loc8) -// CHECK-NEXT: ^bb27(%129: i256 loc({{.*}}:18:4)): // 2 preds: ^bb26, ^bb28 -// CHECK-NEXT: %130 = arith.cmpi ult, %129, %128 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %130, ^bb28(%129 : i256), ^bb29 loc(#loc8) -// CHECK-NEXT: ^bb28(%131: i256 loc({{.*}}:18:4)): // pred: ^bb27 -// CHECK-NEXT: %132 = arith.divui %131, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %133 = arith.addi %127, %131 : i256 loc(#loc8) -// CHECK-NEXT: %134 = llvm.inttoptr %133 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %135 = llvm.load %134 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %136 = arith.addi %126, %132 : i256 loc(#loc8) -// CHECK-NEXT: %137 = llvm.inttoptr %136 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %135, %137 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %138 = arith.addi %131, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb27(%138 : i256) loc(#loc8) -// CHECK-NEXT: ^bb29: // pred: ^bb27 -// CHECK-NEXT: %139 = arith.cmpi ult, %128, %80 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %139, ^bb30, ^bb31 loc(#loc8) -// CHECK-NEXT: ^bb30: // pred: ^bb29 -// CHECK-NEXT: %140 = arith.andi %80, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %141 = arith.divui %128, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %142 = arith.addi %127, %128 : i256 loc(#loc8) -// CHECK-NEXT: %143 = llvm.inttoptr %142 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %144 = llvm.load %143 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %145 = arith.muli %140, %c8_i256 : i256 loc(#loc8) -// CHECK-NEXT: %146 = arith.subi %c256_i256, %145 : i256 loc(#loc8) -// CHECK-NEXT: %147 = arith.shli %c-1_i256, %146 : i256 loc(#loc8) -// CHECK-NEXT: %148 = arith.andi %144, %147 : i256 loc(#loc8) -// CHECK-NEXT: %149 = arith.addi %126, %141 : i256 loc(#loc8) -// CHECK-NEXT: %150 = llvm.inttoptr %149 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %148, %150 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb31 loc(#loc8) -// CHECK-NEXT: ^bb31: // 2 preds: ^bb29, ^bb30 -// CHECK-NEXT: %151 = arith.muli %80, %c2_i256 : i256 loc(#loc8) -// CHECK-NEXT: %152 = arith.ori %151, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %153 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %152, %153 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb32 loc(#loc8) -// CHECK-NEXT: ^bb32: // 3 preds: ^bb24, ^bb25, ^bb31 +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%2, %c3_i256) : (i256, i256) -> () loc(#loc6) +// CHECK-NEXT: %3 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc7) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%3, %c4_i256) : (i256, i256) -> () loc(#loc8) // CHECK-NEXT: return loc(#loc2) // CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: module @ERC20_470_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { @@ -1322,6 +1080,41 @@ contract ERC20 { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:10:2), %arg1: i256 loc({{.*}}:10:2), %arg2: i256 loc({{.*}}:10:2), %arg3: i256 loc({{.*}}:10:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc9) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc9) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc9) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:10:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc9) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:10:2)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc9) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc9) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc9) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc9) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: cf.br ^bb5 loc(#loc9) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc9) +// CHECK-NEXT: } loc(#loc9) // CHECK-NEXT: func.func @_approve_469(%arg0: i256 loc({{.*}}:142:20), %arg1: i256 loc({{.*}}:142:35), %arg2: i256 loc({{.*}}:142:52)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c132_i256 = arith.constant 132 : i256 loc(#loc) // CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc) @@ -1340,100 +1133,100 @@ contract ERC20 { // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc10) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc10) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc11) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc11) -// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc12) -// CHECK-NEXT: llvm.store %arg2, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc12) -// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc13) -// CHECK-NEXT: %4 = arith.andi %3, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc13) -// CHECK-NEXT: %5 = arith.cmpi ne, %4, %c0_i256 : i256 loc(#loc13) -// CHECK-NEXT: %6 = arith.extui %5 : i1 to i256 loc(#loc13) -// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %7, ^bb1, ^bb2 loc(#loc14) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc11) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc11) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc12) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc12) +// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc13) +// CHECK-NEXT: llvm.store %arg2, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc13) +// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc14) +// CHECK-NEXT: %4 = arith.andi %3, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc14) +// CHECK-NEXT: %5 = arith.cmpi ne, %4, %c0_i256 : i256 loc(#loc14) +// CHECK-NEXT: %6 = arith.extui %5 : i1 to i256 loc(#loc14) +// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc15) +// CHECK-NEXT: cf.cond_br %7, ^bb1, ^bb2 loc(#loc15) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %8 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %9 = llvm.load %8 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc14) -// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %11 = arith.addi %9, %c4_i256 : i256 loc(#loc14) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c32_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %13 = arith.addi %9, %c36_i256 : i256 loc(#loc14) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c36_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %15 = arith.addi %9, %c68_i256 : i256 loc(#loc14) -// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c31354931781638678487916134672869638484047149969764982831501014746446650500196_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %17 = arith.addi %9, %c100_i256 : i256 loc(#loc14) -// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c51742913093258732729005998692887265601192425265805909375210916622055285719040_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %19 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: "llvm.intrcall"(%19, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc14) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc14) -// CHECK-NEXT: cf.br ^bb2 loc(#loc14) +// CHECK-NEXT: %8 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %9 = llvm.load %8 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc15) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %11 = arith.addi %9, %c4_i256 : i256 loc(#loc15) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c32_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %13 = arith.addi %9, %c36_i256 : i256 loc(#loc15) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c36_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %15 = arith.addi %9, %c68_i256 : i256 loc(#loc15) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c31354931781638678487916134672869638484047149969764982831501014746446650500196_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %17 = arith.addi %9, %c100_i256 : i256 loc(#loc15) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c51742913093258732729005998692887265601192425265805909375210916622055285719040_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %19 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: "llvm.intrcall"(%19, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc15) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc15) +// CHECK-NEXT: cf.br ^bb2 loc(#loc15) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %20 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc15) -// CHECK-NEXT: %21 = arith.andi %20, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc15) -// CHECK-NEXT: %22 = arith.cmpi ne, %21, %c0_i256 : i256 loc(#loc15) -// CHECK-NEXT: %23 = arith.extui %22 : i1 to i256 loc(#loc15) -// CHECK-NEXT: %24 = arith.cmpi eq, %23, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc16) +// CHECK-NEXT: %20 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc16) +// CHECK-NEXT: %21 = arith.andi %20, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc16) +// CHECK-NEXT: %22 = arith.cmpi ne, %21, %c0_i256 : i256 loc(#loc16) +// CHECK-NEXT: %23 = arith.extui %22 : i1 to i256 loc(#loc16) +// CHECK-NEXT: %24 = arith.cmpi eq, %23, %c0_i256 : i256 loc(#loc17) +// CHECK-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc17) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %25 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %27 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %28 = arith.addi %26, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c32_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %30 = arith.addi %26, %c36_i256 : i256 loc(#loc16) -// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c34_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %32 = arith.addi %26, %c68_i256 : i256 loc(#loc16) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c31354931781638678487916134672869638488806705378895508030211234510262059168357_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %34 = arith.addi %26, %c100_i256 : i256 loc(#loc16) -// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c52219164999525148860834357634456956735281286572158918307284071279203377479680_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %36 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%36, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb4 loc(#loc16) +// CHECK-NEXT: %25 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc17) +// CHECK-NEXT: %27 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %28 = arith.addi %26, %c4_i256 : i256 loc(#loc17) +// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c32_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %30 = arith.addi %26, %c36_i256 : i256 loc(#loc17) +// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c34_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %32 = arith.addi %26, %c68_i256 : i256 loc(#loc17) +// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c31354931781638678487916134672869638488806705378895508030211234510262059168357_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %34 = arith.addi %26, %c100_i256 : i256 loc(#loc17) +// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: llvm.store %c52219164999525148860834357634456956735281286572158918307284071279203377479680_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %36 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: "llvm.intrcall"(%36, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) +// CHECK-NEXT: cf.br ^bb4 loc(#loc17) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %37 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc17) -// CHECK-NEXT: %38 = arith.andi %37, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc18) -// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: %40 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: llvm.store %c1_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc18) -// CHECK-NEXT: %43 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc19) -// CHECK-NEXT: %44 = arith.andi %43, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc18) -// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: %46 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: llvm.store %42, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) -// CHECK-NEXT: %48 = "llvm.intrcall"(%47, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc18) -// CHECK-NEXT: %49 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc20) -// CHECK-NEXT: %50 = llvm.inttoptr %48 : i256 to !llvm.ptr<5> loc(#loc18) -// CHECK-NEXT: llvm.store %49, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) -// CHECK-NEXT: %51 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc21) -// CHECK-NEXT: %52 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc22) -// CHECK-NEXT: %53 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc23) -// CHECK-NEXT: %54 = arith.andi %51, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc24) -// CHECK-NEXT: %55 = arith.andi %52, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc24) -// CHECK-NEXT: %56 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc24) -// CHECK-NEXT: %58 = llvm.inttoptr %57 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %53, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %59 = llvm.inttoptr %57 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: "llvm.intrcall"(%59, %c32_i256, %c-52305948261162578668367882225327028569797882979485679342215860919519743330011_i256, %54, %55) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc24) -// CHECK-NEXT: return loc(#loc9) -// CHECK-NEXT: } loc(#loc9) +// CHECK-NEXT: %37 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc18) +// CHECK-NEXT: %38 = arith.andi %37, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) +// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: %40 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: llvm.store %c1_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) +// CHECK-NEXT: %43 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc20) +// CHECK-NEXT: %44 = arith.andi %43, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) +// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: %46 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: llvm.store %42, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) +// CHECK-NEXT: %48 = "llvm.intrcall"(%47, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) +// CHECK-NEXT: %49 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc21) +// CHECK-NEXT: %50 = llvm.inttoptr %48 : i256 to !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: llvm.store %49, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: %51 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc22) +// CHECK-NEXT: %52 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc23) +// CHECK-NEXT: %53 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc24) +// CHECK-NEXT: %54 = arith.andi %51, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc25) +// CHECK-NEXT: %55 = arith.andi %52, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc25) +// CHECK-NEXT: %56 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc25) +// CHECK-NEXT: %58 = llvm.inttoptr %57 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: llvm.store %53, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: %59 = llvm.inttoptr %57 : i256 to !llvm.ptr<1> loc(#loc25) +// CHECK-NEXT: "llvm.intrcall"(%59, %c32_i256, %c-52305948261162578668367882225327028569797882979485679342215860919519743330011_i256, %54, %55) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc25) +// CHECK-NEXT: return loc(#loc10) +// CHECK-NEXT: } loc(#loc10) // CHECK-NEXT: func.func @_burn_424(%arg0: i256 loc({{.*}}:124:17), %arg1: i256 loc({{.*}}:124:34)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c132_i256 = arith.constant 132 : i256 loc(#loc) // CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc) @@ -1454,108 +1247,108 @@ contract ERC20 { // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc26) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc26) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc27) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc27) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc28) -// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc28) -// CHECK-NEXT: %4 = arith.cmpi ne, %3, %c0_i256 : i256 loc(#loc28) -// CHECK-NEXT: %5 = arith.extui %4 : i1 to i256 loc(#loc28) -// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc29) -// CHECK-NEXT: cf.cond_br %6, ^bb1, ^bb2 loc(#loc29) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc27) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc27) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc28) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc28) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc29) +// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc29) +// CHECK-NEXT: %4 = arith.cmpi ne, %3, %c0_i256 : i256 loc(#loc29) +// CHECK-NEXT: %5 = arith.extui %4 : i1 to i256 loc(#loc29) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc30) +// CHECK-NEXT: cf.cond_br %6, ^bb1, ^bb2 loc(#loc30) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc29) -// CHECK-NEXT: %9 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %10 = arith.addi %8, %c4_i256 : i256 loc(#loc29) -// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: llvm.store %c32_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %12 = arith.addi %8, %c36_i256 : i256 loc(#loc29) -// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: llvm.store %c33_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %14 = arith.addi %8, %c68_i256 : i256 loc(#loc29) -// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: llvm.store %c31354931781638678494316026001340845558170976982936511063842609339963588896115_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %16 = arith.addi %8, %c100_i256 : i256 loc(#loc29) -// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: llvm.store %c52015977587075634662932278421871521105961125924018222127100086566054726205440_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %18 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: "llvm.intrcall"(%18, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc29) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc29) -// CHECK-NEXT: cf.br ^bb2 loc(#loc29) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc30) +// CHECK-NEXT: %9 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %10 = arith.addi %8, %c4_i256 : i256 loc(#loc30) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: llvm.store %c32_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %12 = arith.addi %8, %c36_i256 : i256 loc(#loc30) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: llvm.store %c33_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %14 = arith.addi %8, %c68_i256 : i256 loc(#loc30) +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: llvm.store %c31354931781638678494316026001340845558170976982936511063842609339963588896115_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %16 = arith.addi %8, %c100_i256 : i256 loc(#loc30) +// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: llvm.store %c52015977587075634662932278421871521105961125924018222127100086566054726205440_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %18 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: "llvm.intrcall"(%18, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc30) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc30) +// CHECK-NEXT: cf.br ^bb2 loc(#loc30) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %19 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc30) -// CHECK-NEXT: %20 = arith.andi %19, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc31) -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %22 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: llvm.store %c0_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) -// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc31) -// CHECK-NEXT: %25 = llvm.inttoptr %24 : i256 to !llvm.ptr<5> loc(#loc31) -// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc31) -// CHECK-NEXT: %27 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc32) -// CHECK-NEXT: llvm.store %26, %27 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc32) -// CHECK-NEXT: %28 = llvm.load %27 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc33) -// CHECK-NEXT: %29 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc34) -// CHECK-NEXT: %30 = arith.cmpi uge, %28, %29 : i256 loc(#loc33) -// CHECK-NEXT: %31 = arith.extui %30 : i1 to i256 loc(#loc33) -// CHECK-NEXT: %32 = arith.cmpi eq, %31, %c0_i256 : i256 loc(#loc35) -// CHECK-NEXT: cf.cond_br %32, ^bb3, ^bb4 loc(#loc35) +// CHECK-NEXT: %19 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc31) +// CHECK-NEXT: %20 = arith.andi %19, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc32) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc32) +// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc32) +// CHECK-NEXT: %22 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc32) +// CHECK-NEXT: llvm.store %c0_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc32) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc32) +// CHECK-NEXT: %24 = "llvm.intrcall"(%23, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc32) +// CHECK-NEXT: %25 = llvm.inttoptr %24 : i256 to !llvm.ptr<5> loc(#loc32) +// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc32) +// CHECK-NEXT: %27 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc33) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc33) +// CHECK-NEXT: %28 = llvm.load %27 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc34) +// CHECK-NEXT: %29 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc35) +// CHECK-NEXT: %30 = arith.cmpi uge, %28, %29 : i256 loc(#loc34) +// CHECK-NEXT: %31 = arith.extui %30 : i1 to i256 loc(#loc34) +// CHECK-NEXT: %32 = arith.cmpi eq, %31, %c0_i256 : i256 loc(#loc36) +// CHECK-NEXT: cf.cond_br %32, ^bb3, ^bb4 loc(#loc36) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %33 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %34 = llvm.load %33 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc35) -// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %36 = arith.addi %34, %c4_i256 : i256 loc(#loc35) -// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c32_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %38 = arith.addi %34, %c36_i256 : i256 loc(#loc35) -// CHECK-NEXT: %39 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c34_i256, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %40 = arith.addi %34, %c68_i256 : i256 loc(#loc35) -// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c31354931781638678494316026001312189103416802390932084224065329695412615668078_i256, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %42 = arith.addi %34, %c100_i256 : i256 loc(#loc35) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c44957423563285989266247004906403561635230327756000124389404269791890710200320_i256, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %44 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: "llvm.intrcall"(%44, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc35) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc35) -// CHECK-NEXT: cf.br ^bb4 loc(#loc35) +// CHECK-NEXT: %33 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %34 = llvm.load %33 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc36) +// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %36 = arith.addi %34, %c4_i256 : i256 loc(#loc36) +// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c32_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %38 = arith.addi %34, %c36_i256 : i256 loc(#loc36) +// CHECK-NEXT: %39 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c34_i256, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %40 = arith.addi %34, %c68_i256 : i256 loc(#loc36) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c31354931781638678494316026001312189103416802390932084224065329695412615668078_i256, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %42 = arith.addi %34, %c100_i256 : i256 loc(#loc36) +// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c44957423563285989266247004906403561635230327756000124389404269791890710200320_i256, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %44 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: "llvm.intrcall"(%44, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc36) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc36) +// CHECK-NEXT: cf.br ^bb4 loc(#loc36) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %45 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc36) -// CHECK-NEXT: %46 = arith.andi %45, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc37) -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %46, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %48 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %c0_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %50 = "llvm.intrcall"(%49, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc37) -// CHECK-NEXT: %51 = llvm.load %27 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc38) -// CHECK-NEXT: %52 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc39) -// CHECK-NEXT: %53 = arith.subi %51, %52 : i256 loc(#loc38) -// CHECK-NEXT: %54 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: llvm.store %53, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: %55 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc40) -// CHECK-NEXT: %56 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc41) -// CHECK-NEXT: %58 = arith.subi %57, %55 : i256 loc(#loc41) -// CHECK-NEXT: %59 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: llvm.store %58, %59 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: %60 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc42) -// CHECK-NEXT: %61 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc43) -// CHECK-NEXT: %62 = arith.andi %60, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc44) -// CHECK-NEXT: %63 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc44) -// CHECK-NEXT: %64 = llvm.load %63 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc44) -// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<1> loc(#loc44) -// CHECK-NEXT: llvm.store %61, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc44) -// CHECK-NEXT: %66 = llvm.inttoptr %64 : i256 to !llvm.ptr<1> loc(#loc44) -// CHECK-NEXT: "llvm.intrcall"(%66, %c32_i256, %c-15402802100530019096323380498944738953123845089667699673314898783681816316945_i256, %62, %c0_i256) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc44) -// CHECK-NEXT: return loc(#loc25) -// CHECK-NEXT: } loc(#loc25) +// CHECK-NEXT: %45 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc37) +// CHECK-NEXT: %46 = arith.andi %45, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc38) +// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %46, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %48 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %c0_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %50 = "llvm.intrcall"(%49, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc38) +// CHECK-NEXT: %51 = llvm.load %27 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc39) +// CHECK-NEXT: %52 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc40) +// CHECK-NEXT: %53 = arith.subi %51, %52 : i256 loc(#loc39) +// CHECK-NEXT: %54 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: llvm.store %53, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: %55 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc41) +// CHECK-NEXT: %56 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc42) +// CHECK-NEXT: %58 = arith.subi %57, %55 : i256 loc(#loc42) +// CHECK-NEXT: %59 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %58, %59 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: %60 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc43) +// CHECK-NEXT: %61 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc44) +// CHECK-NEXT: %62 = arith.andi %60, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc45) +// CHECK-NEXT: %63 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc45) +// CHECK-NEXT: %64 = llvm.load %63 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc45) +// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<1> loc(#loc45) +// CHECK-NEXT: llvm.store %61, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc45) +// CHECK-NEXT: %66 = llvm.inttoptr %64 : i256 to !llvm.ptr<1> loc(#loc45) +// CHECK-NEXT: "llvm.intrcall"(%66, %c32_i256, %c-15402802100530019096323380498944738953123845089667699673314898783681816316945_i256, %62, %c0_i256) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc45) +// CHECK-NEXT: return loc(#loc26) +// CHECK-NEXT: } loc(#loc26) // CHECK-NEXT: func.func @_mint_370(%arg0: i256 loc({{.*}}:114:17), %arg1: i256 loc({{.*}}:114:34)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc) // CHECK-NEXT: %c68_i256 = arith.constant 68 : i256 loc(#loc) @@ -1571,66 +1364,66 @@ contract ERC20 { // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc46) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc46) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc47) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc47) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc48) -// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc48) -// CHECK-NEXT: %4 = arith.cmpi ne, %3, %c0_i256 : i256 loc(#loc48) -// CHECK-NEXT: %5 = arith.extui %4 : i1 to i256 loc(#loc48) -// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc49) -// CHECK-NEXT: cf.cond_br %6, ^bb1, ^bb2 loc(#loc49) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc47) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc47) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc48) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc48) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc49) +// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc49) +// CHECK-NEXT: %4 = arith.cmpi ne, %3, %c0_i256 : i256 loc(#loc49) +// CHECK-NEXT: %5 = arith.extui %4 : i1 to i256 loc(#loc49) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc50) +// CHECK-NEXT: cf.cond_br %6, ^bb1, ^bb2 loc(#loc50) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc49) -// CHECK-NEXT: %9 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %10 = arith.addi %8, %c4_i256 : i256 loc(#loc49) -// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c32_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %12 = arith.addi %8, %c36_i256 : i256 loc(#loc49) -// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c31_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %14 = arith.addi %8, %c68_i256 : i256 loc(#loc49) -// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c31354931781638678563069525067809233856775101976563302031013534919694566519552_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %16 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: "llvm.intrcall"(%16, %c100_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc49) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc49) -// CHECK-NEXT: cf.br ^bb2 loc(#loc49) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc50) +// CHECK-NEXT: %9 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: %10 = arith.addi %8, %c4_i256 : i256 loc(#loc50) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: llvm.store %c32_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: %12 = arith.addi %8, %c36_i256 : i256 loc(#loc50) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: llvm.store %c31_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: %14 = arith.addi %8, %c68_i256 : i256 loc(#loc50) +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: llvm.store %c31354931781638678563069525067809233856775101976563302031013534919694566519552_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: %16 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc50) +// CHECK-NEXT: "llvm.intrcall"(%16, %c100_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc50) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc50) +// CHECK-NEXT: cf.br ^bb2 loc(#loc50) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %17 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc50) -// CHECK-NEXT: %18 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc51) -// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc51) -// CHECK-NEXT: %20 = arith.addi %19, %17 : i256 loc(#loc51) -// CHECK-NEXT: %21 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc51) -// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc51) -// CHECK-NEXT: %22 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc52) -// CHECK-NEXT: %23 = arith.andi %22, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc53) -// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc53) -// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc53) -// CHECK-NEXT: %25 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc53) -// CHECK-NEXT: llvm.store %c0_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc53) -// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc53) -// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc53) -// CHECK-NEXT: %28 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc54) -// CHECK-NEXT: %29 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc53) -// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc53) -// CHECK-NEXT: %31 = arith.addi %30, %28 : i256 loc(#loc53) -// CHECK-NEXT: %32 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc53) -// CHECK-NEXT: llvm.store %31, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc53) -// CHECK-NEXT: %33 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc55) -// CHECK-NEXT: %34 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc56) -// CHECK-NEXT: %35 = arith.andi %33, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc57) -// CHECK-NEXT: %36 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc57) -// CHECK-NEXT: %37 = llvm.load %36 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc57) -// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc57) -// CHECK-NEXT: llvm.store %34, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc57) -// CHECK-NEXT: %39 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc57) -// CHECK-NEXT: "llvm.intrcall"(%39, %c32_i256, %c-15402802100530019096323380498944738953123845089667699673314898783681816316945_i256, %c0_i256, %35) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc57) -// CHECK-NEXT: return loc(#loc45) -// CHECK-NEXT: } loc(#loc45) +// CHECK-NEXT: %17 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc51) +// CHECK-NEXT: %18 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc52) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc52) +// CHECK-NEXT: %20 = arith.addi %19, %17 : i256 loc(#loc52) +// CHECK-NEXT: %21 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc52) +// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc52) +// CHECK-NEXT: %22 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc53) +// CHECK-NEXT: %23 = arith.andi %22, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc54) +// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc54) +// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc54) +// CHECK-NEXT: %25 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc54) +// CHECK-NEXT: llvm.store %c0_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc54) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc54) +// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc54) +// CHECK-NEXT: %28 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc55) +// CHECK-NEXT: %29 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc54) +// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc54) +// CHECK-NEXT: %31 = arith.addi %30, %28 : i256 loc(#loc54) +// CHECK-NEXT: %32 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc54) +// CHECK-NEXT: llvm.store %31, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc54) +// CHECK-NEXT: %33 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc56) +// CHECK-NEXT: %34 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc57) +// CHECK-NEXT: %35 = arith.andi %33, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc58) +// CHECK-NEXT: %36 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc58) +// CHECK-NEXT: %37 = llvm.load %36 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc58) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc58) +// CHECK-NEXT: llvm.store %34, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc58) +// CHECK-NEXT: %39 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc58) +// CHECK-NEXT: "llvm.intrcall"(%39, %c32_i256, %c-15402802100530019096323380498944738953123845089667699673314898783681816316945_i256, %c0_i256, %35) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc58) +// CHECK-NEXT: return loc(#loc46) +// CHECK-NEXT: } loc(#loc46) // CHECK-NEXT: func.func @_transfer_332(%arg0: i256 loc({{.*}}:96:21), %arg1: i256 loc({{.*}}:96:37), %arg2: i256 loc({{.*}}:96:56)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c132_i256 = arith.constant 132 : i256 loc(#loc) // CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc) @@ -1653,148 +1446,148 @@ contract ERC20 { // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc59) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc59) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc60) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc60) -// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc61) -// CHECK-NEXT: llvm.store %arg2, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc61) -// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc62) -// CHECK-NEXT: %4 = arith.andi %3, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc62) -// CHECK-NEXT: %5 = arith.cmpi ne, %4, %c0_i256 : i256 loc(#loc62) -// CHECK-NEXT: %6 = arith.extui %5 : i1 to i256 loc(#loc62) -// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc63) -// CHECK-NEXT: cf.cond_br %7, ^bb1, ^bb2 loc(#loc63) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc60) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc60) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc61) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc61) +// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc62) +// CHECK-NEXT: llvm.store %arg2, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc62) +// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc63) +// CHECK-NEXT: %4 = arith.andi %3, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc63) +// CHECK-NEXT: %5 = arith.cmpi ne, %4, %c0_i256 : i256 loc(#loc63) +// CHECK-NEXT: %6 = arith.extui %5 : i1 to i256 loc(#loc63) +// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc64) +// CHECK-NEXT: cf.cond_br %7, ^bb1, ^bb2 loc(#loc64) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %8 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: %9 = llvm.load %8 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc63) -// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: %11 = arith.addi %9, %c4_i256 : i256 loc(#loc63) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: llvm.store %c32_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: %13 = arith.addi %9, %c36_i256 : i256 loc(#loc63) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: llvm.store %c37_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: %15 = arith.addi %9, %c68_i256 : i256 loc(#loc63) -// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859107492772550336241160036866987736981860_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: %17 = arith.addi %9, %c100_i256 : i256 loc(#loc63) -// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: llvm.store %c45433405612597180762055095701412804886438245671210399661410036396145969725440_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: %19 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc63) -// CHECK-NEXT: "llvm.intrcall"(%19, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc63) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc63) -// CHECK-NEXT: cf.br ^bb2 loc(#loc63) +// CHECK-NEXT: %8 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: %9 = llvm.load %8 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc64) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: %11 = arith.addi %9, %c4_i256 : i256 loc(#loc64) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: llvm.store %c32_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: %13 = arith.addi %9, %c36_i256 : i256 loc(#loc64) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: llvm.store %c37_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: %15 = arith.addi %9, %c68_i256 : i256 loc(#loc64) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859107492772550336241160036866987736981860_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: %17 = arith.addi %9, %c100_i256 : i256 loc(#loc64) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: llvm.store %c45433405612597180762055095701412804886438245671210399661410036396145969725440_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: %19 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc64) +// CHECK-NEXT: "llvm.intrcall"(%19, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc64) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc64) +// CHECK-NEXT: cf.br ^bb2 loc(#loc64) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %20 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc64) -// CHECK-NEXT: %21 = arith.andi %20, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc64) -// CHECK-NEXT: %22 = arith.cmpi ne, %21, %c0_i256 : i256 loc(#loc64) -// CHECK-NEXT: %23 = arith.extui %22 : i1 to i256 loc(#loc64) -// CHECK-NEXT: %24 = arith.cmpi eq, %23, %c0_i256 : i256 loc(#loc65) -// CHECK-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc65) +// CHECK-NEXT: %20 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc65) +// CHECK-NEXT: %21 = arith.andi %20, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc65) +// CHECK-NEXT: %22 = arith.cmpi ne, %21, %c0_i256 : i256 loc(#loc65) +// CHECK-NEXT: %23 = arith.extui %22 : i1 to i256 loc(#loc65) +// CHECK-NEXT: %24 = arith.cmpi eq, %23, %c0_i256 : i256 loc(#loc66) +// CHECK-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc66) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %25 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc65) -// CHECK-NEXT: %27 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: %28 = arith.addi %26, %c4_i256 : i256 loc(#loc65) -// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: llvm.store %c32_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: %30 = arith.addi %26, %c36_i256 : i256 loc(#loc65) -// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: llvm.store %c35_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: %32 = arith.addi %26, %c68_i256 : i256 loc(#loc65) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859126084785867252355217498662940140921970_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: %34 = arith.addi %26, %c100_i256 : i256 loc(#loc65) -// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: llvm.store %c45887578820189300338443374388718498632482616163288499555830078344056365121536_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: %36 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc65) -// CHECK-NEXT: "llvm.intrcall"(%36, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc65) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc65) -// CHECK-NEXT: cf.br ^bb4 loc(#loc65) +// CHECK-NEXT: %25 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc66) +// CHECK-NEXT: %27 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: %28 = arith.addi %26, %c4_i256 : i256 loc(#loc66) +// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: llvm.store %c32_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: %30 = arith.addi %26, %c36_i256 : i256 loc(#loc66) +// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: llvm.store %c35_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: %32 = arith.addi %26, %c68_i256 : i256 loc(#loc66) +// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859126084785867252355217498662940140921970_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: %34 = arith.addi %26, %c100_i256 : i256 loc(#loc66) +// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: llvm.store %c45887578820189300338443374388718498632482616163288499555830078344056365121536_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: %36 = llvm.inttoptr %26 : i256 to !llvm.ptr<1> loc(#loc66) +// CHECK-NEXT: "llvm.intrcall"(%36, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc66) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc66) +// CHECK-NEXT: cf.br ^bb4 loc(#loc66) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %37 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc66) -// CHECK-NEXT: %38 = arith.andi %37, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc67) -// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc67) -// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc67) -// CHECK-NEXT: %40 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc67) -// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc67) -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc67) -// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc67) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<5> loc(#loc67) -// CHECK-NEXT: %44 = llvm.load %43 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc67) -// CHECK-NEXT: %45 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc68) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc68) -// CHECK-NEXT: %46 = llvm.load %45 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc69) -// CHECK-NEXT: %47 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc70) -// CHECK-NEXT: %48 = arith.cmpi uge, %46, %47 : i256 loc(#loc69) -// CHECK-NEXT: %49 = arith.extui %48 : i1 to i256 loc(#loc69) -// CHECK-NEXT: %50 = arith.cmpi eq, %49, %c0_i256 : i256 loc(#loc71) -// CHECK-NEXT: cf.cond_br %50, ^bb5, ^bb6 loc(#loc71) +// CHECK-NEXT: %37 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc67) +// CHECK-NEXT: %38 = arith.andi %37, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc68) +// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc68) +// CHECK-NEXT: llvm.store %38, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc68) +// CHECK-NEXT: %40 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc68) +// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc68) +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc68) +// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc68) +// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<5> loc(#loc68) +// CHECK-NEXT: %44 = llvm.load %43 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc68) +// CHECK-NEXT: %45 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc69) +// CHECK-NEXT: llvm.store %44, %45 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc69) +// CHECK-NEXT: %46 = llvm.load %45 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc70) +// CHECK-NEXT: %47 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc71) +// CHECK-NEXT: %48 = arith.cmpi uge, %46, %47 : i256 loc(#loc70) +// CHECK-NEXT: %49 = arith.extui %48 : i1 to i256 loc(#loc70) +// CHECK-NEXT: %50 = arith.cmpi eq, %49, %c0_i256 : i256 loc(#loc72) +// CHECK-NEXT: cf.cond_br %50, ^bb5, ^bb6 loc(#loc72) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %51 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: %52 = llvm.load %51 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc71) -// CHECK-NEXT: %53 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: %54 = arith.addi %52, %c4_i256 : i256 loc(#loc71) -// CHECK-NEXT: %55 = llvm.inttoptr %54 : i256 to !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: llvm.store %c32_i256, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: %56 = arith.addi %52, %c36_i256 : i256 loc(#loc71) -// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: llvm.store %c38_i256, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: %58 = arith.addi %52, %c68_i256 : i256 loc(#loc71) -// CHECK-NEXT: %59 = llvm.inttoptr %58 : i256 to !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859100820671745083778533502622993977909346_i256, %59 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: %60 = arith.addi %52, %c100_i256 : i256 loc(#loc71) -// CHECK-NEXT: %61 = llvm.inttoptr %60 : i256 to !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: llvm.store %c44065838241030143116324720188876985940908656145555552347773292252211112312832_i256, %61 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: %62 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc71) -// CHECK-NEXT: "llvm.intrcall"(%62, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc71) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc71) -// CHECK-NEXT: cf.br ^bb6 loc(#loc71) +// CHECK-NEXT: %51 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: %52 = llvm.load %51 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc72) +// CHECK-NEXT: %53 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: %54 = arith.addi %52, %c4_i256 : i256 loc(#loc72) +// CHECK-NEXT: %55 = llvm.inttoptr %54 : i256 to !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: llvm.store %c32_i256, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: %56 = arith.addi %52, %c36_i256 : i256 loc(#loc72) +// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: llvm.store %c38_i256, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: %58 = arith.addi %52, %c68_i256 : i256 loc(#loc72) +// CHECK-NEXT: %59 = llvm.inttoptr %58 : i256 to !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859100820671745083778533502622993977909346_i256, %59 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: %60 = arith.addi %52, %c100_i256 : i256 loc(#loc72) +// CHECK-NEXT: %61 = llvm.inttoptr %60 : i256 to !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: llvm.store %c44065838241030143116324720188876985940908656145555552347773292252211112312832_i256, %61 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: %62 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc72) +// CHECK-NEXT: "llvm.intrcall"(%62, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc72) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc72) +// CHECK-NEXT: cf.br ^bb6 loc(#loc72) // CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 -// CHECK-NEXT: %63 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc72) -// CHECK-NEXT: %64 = arith.andi %63, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc73) -// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %64, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %66 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: llvm.store %c0_i256, %66 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %67 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc73) -// CHECK-NEXT: %68 = "llvm.intrcall"(%67, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc73) -// CHECK-NEXT: %69 = llvm.load %45 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc74) -// CHECK-NEXT: %70 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc75) -// CHECK-NEXT: %71 = arith.subi %69, %70 : i256 loc(#loc74) -// CHECK-NEXT: %72 = llvm.inttoptr %68 : i256 to !llvm.ptr<5> loc(#loc73) -// CHECK-NEXT: llvm.store %71, %72 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc73) -// CHECK-NEXT: %73 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc76) -// CHECK-NEXT: %74 = arith.andi %73, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc77) -// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc77) -// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc77) -// CHECK-NEXT: %76 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc77) -// CHECK-NEXT: llvm.store %c0_i256, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc77) -// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc77) -// CHECK-NEXT: %78 = "llvm.intrcall"(%77, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc77) -// CHECK-NEXT: %79 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc78) -// CHECK-NEXT: %80 = llvm.inttoptr %78 : i256 to !llvm.ptr<5> loc(#loc77) -// CHECK-NEXT: %81 = llvm.load %80 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc77) -// CHECK-NEXT: %82 = arith.addi %81, %79 : i256 loc(#loc77) -// CHECK-NEXT: %83 = llvm.inttoptr %78 : i256 to !llvm.ptr<5> loc(#loc77) -// CHECK-NEXT: llvm.store %82, %83 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc77) -// CHECK-NEXT: %84 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc79) -// CHECK-NEXT: %85 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc80) -// CHECK-NEXT: %86 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc81) -// CHECK-NEXT: %87 = arith.andi %84, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc82) -// CHECK-NEXT: %88 = arith.andi %85, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc82) -// CHECK-NEXT: %89 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc82) -// CHECK-NEXT: %90 = llvm.load %89 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc82) -// CHECK-NEXT: %91 = llvm.inttoptr %90 : i256 to !llvm.ptr<1> loc(#loc82) -// CHECK-NEXT: llvm.store %86, %91 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc82) -// CHECK-NEXT: %92 = llvm.inttoptr %90 : i256 to !llvm.ptr<1> loc(#loc82) -// CHECK-NEXT: "llvm.intrcall"(%92, %c32_i256, %c-15402802100530019096323380498944738953123845089667699673314898783681816316945_i256, %87, %88) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc82) -// CHECK-NEXT: return loc(#loc58) -// CHECK-NEXT: } loc(#loc58) +// CHECK-NEXT: %63 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc73) +// CHECK-NEXT: %64 = arith.andi %63, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc74) +// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc74) +// CHECK-NEXT: llvm.store %64, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc74) +// CHECK-NEXT: %66 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc74) +// CHECK-NEXT: llvm.store %c0_i256, %66 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc74) +// CHECK-NEXT: %67 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc74) +// CHECK-NEXT: %68 = "llvm.intrcall"(%67, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc74) +// CHECK-NEXT: %69 = llvm.load %45 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc75) +// CHECK-NEXT: %70 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc76) +// CHECK-NEXT: %71 = arith.subi %69, %70 : i256 loc(#loc75) +// CHECK-NEXT: %72 = llvm.inttoptr %68 : i256 to !llvm.ptr<5> loc(#loc74) +// CHECK-NEXT: llvm.store %71, %72 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc74) +// CHECK-NEXT: %73 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc77) +// CHECK-NEXT: %74 = arith.andi %73, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc78) +// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc78) +// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc78) +// CHECK-NEXT: %76 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc78) +// CHECK-NEXT: llvm.store %c0_i256, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc78) +// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc78) +// CHECK-NEXT: %78 = "llvm.intrcall"(%77, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc78) +// CHECK-NEXT: %79 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc79) +// CHECK-NEXT: %80 = llvm.inttoptr %78 : i256 to !llvm.ptr<5> loc(#loc78) +// CHECK-NEXT: %81 = llvm.load %80 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc78) +// CHECK-NEXT: %82 = arith.addi %81, %79 : i256 loc(#loc78) +// CHECK-NEXT: %83 = llvm.inttoptr %78 : i256 to !llvm.ptr<5> loc(#loc78) +// CHECK-NEXT: llvm.store %82, %83 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc78) +// CHECK-NEXT: %84 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc80) +// CHECK-NEXT: %85 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc81) +// CHECK-NEXT: %86 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc82) +// CHECK-NEXT: %87 = arith.andi %84, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc83) +// CHECK-NEXT: %88 = arith.andi %85, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc83) +// CHECK-NEXT: %89 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc83) +// CHECK-NEXT: %90 = llvm.load %89 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc83) +// CHECK-NEXT: %91 = llvm.inttoptr %90 : i256 to !llvm.ptr<1> loc(#loc83) +// CHECK-NEXT: llvm.store %86, %91 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc83) +// CHECK-NEXT: %92 = llvm.inttoptr %90 : i256 to !llvm.ptr<1> loc(#loc83) +// CHECK-NEXT: "llvm.intrcall"(%92, %c32_i256, %c-15402802100530019096323380498944738953123845089667699673314898783681816316945_i256, %87, %88) <{id = 4064 : i32, name = "evm.log3"}> : (!llvm.ptr<1>, i256, i256, i256, i256) -> () loc(#loc83) +// CHECK-NEXT: return loc(#loc59) +// CHECK-NEXT: } loc(#loc59) // CHECK-NEXT: func.func @decreaseAllowance_267(%arg0: i256 loc({{.*}}:83:29), %arg1: i256 loc({{.*}}:83:46)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c132_i256 = arith.constant 132 : i256 loc(#loc) // CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc) @@ -1810,101 +1603,101 @@ contract ERC20 { // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc84) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc84) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc85) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc85) -// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc86) -// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc87) -// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %3, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %5 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %c1_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %7 = "llvm.intrcall"(%6, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc87) -// CHECK-NEXT: %8 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc88) -// CHECK-NEXT: %9 = arith.andi %8, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc87) -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %11 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: llvm.store %7, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc87) -// CHECK-NEXT: %13 = "llvm.intrcall"(%12, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc87) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc87) -// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc87) -// CHECK-NEXT: %16 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc89) -// CHECK-NEXT: llvm.store %15, %16 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc89) -// CHECK-NEXT: %17 = llvm.load %16 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc90) -// CHECK-NEXT: %18 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc91) -// CHECK-NEXT: %19 = arith.cmpi uge, %17, %18 : i256 loc(#loc90) -// CHECK-NEXT: %20 = arith.extui %19 : i1 to i256 loc(#loc90) -// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc92) -// CHECK-NEXT: cf.cond_br %21, ^bb1, ^bb2 loc(#loc92) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc85) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc85) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc86) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc86) +// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc87) +// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc88) +// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: llvm.store %3, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: %5 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: llvm.store %c1_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: %7 = "llvm.intrcall"(%6, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc88) +// CHECK-NEXT: %8 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc89) +// CHECK-NEXT: %9 = arith.andi %8, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc88) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: %11 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: llvm.store %7, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc88) +// CHECK-NEXT: %13 = "llvm.intrcall"(%12, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc88) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc88) +// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc88) +// CHECK-NEXT: %16 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc90) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc90) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc91) +// CHECK-NEXT: %18 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc92) +// CHECK-NEXT: %19 = arith.cmpi uge, %17, %18 : i256 loc(#loc91) +// CHECK-NEXT: %20 = arith.extui %19 : i1 to i256 loc(#loc91) +// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc93) +// CHECK-NEXT: cf.cond_br %21, ^bb1, ^bb2 loc(#loc93) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %22 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc92) -// CHECK-NEXT: %24 = llvm.inttoptr %23 : i256 to !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: %25 = arith.addi %23, %c4_i256 : i256 loc(#loc92) -// CHECK-NEXT: %26 = llvm.inttoptr %25 : i256 to !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: llvm.store %c32_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: %27 = arith.addi %23, %c36_i256 : i256 loc(#loc92) -// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: llvm.store %c37_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: %29 = arith.addi %23, %c68_i256 : i256 loc(#loc92) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: llvm.store %c31354931781638678506476475496475743842680577777870365728514456330491174612855_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: %31 = arith.addi %23, %c100_i256 : i256 loc(#loc92) -// CHECK-NEXT: %32 = llvm.inttoptr %31 : i256 to !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: llvm.store %c14690266658072097593480850647027335513285713462661904985951319567533531463680_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: %33 = llvm.inttoptr %23 : i256 to !llvm.ptr<1> loc(#loc92) -// CHECK-NEXT: "llvm.intrcall"(%33, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc92) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc92) -// CHECK-NEXT: cf.br ^bb2 loc(#loc92) +// CHECK-NEXT: %22 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc93) +// CHECK-NEXT: %24 = llvm.inttoptr %23 : i256 to !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: %25 = arith.addi %23, %c4_i256 : i256 loc(#loc93) +// CHECK-NEXT: %26 = llvm.inttoptr %25 : i256 to !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: llvm.store %c32_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: %27 = arith.addi %23, %c36_i256 : i256 loc(#loc93) +// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: llvm.store %c37_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: %29 = arith.addi %23, %c68_i256 : i256 loc(#loc93) +// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: llvm.store %c31354931781638678506476475496475743842680577777870365728514456330491174612855_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: %31 = arith.addi %23, %c100_i256 : i256 loc(#loc93) +// CHECK-NEXT: %32 = llvm.inttoptr %31 : i256 to !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: llvm.store %c14690266658072097593480850647027335513285713462661904985951319567533531463680_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: %33 = llvm.inttoptr %23 : i256 to !llvm.ptr<1> loc(#loc93) +// CHECK-NEXT: "llvm.intrcall"(%33, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc93) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc93) +// CHECK-NEXT: cf.br ^bb2 loc(#loc93) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %34 = call @_msgSender_58() : () -> i256 loc(#loc93) -// CHECK-NEXT: %35 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc94) -// CHECK-NEXT: %36 = llvm.load %16 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc95) -// CHECK-NEXT: %37 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc96) -// CHECK-NEXT: %38 = arith.subi %36, %37 : i256 loc(#loc95) -// CHECK-NEXT: call @_approve_469(%34, %35, %38) : (i256, i256, i256) -> () loc(#loc97) -// CHECK-NEXT: return %c1_i256 : i256 loc(#loc98) -// CHECK-NEXT: } loc(#loc83) +// CHECK-NEXT: %34 = call @_msgSender_58() : () -> i256 loc(#loc94) +// CHECK-NEXT: %35 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc95) +// CHECK-NEXT: %36 = llvm.load %16 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc96) +// CHECK-NEXT: %37 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc97) +// CHECK-NEXT: %38 = arith.subi %36, %37 : i256 loc(#loc96) +// CHECK-NEXT: call @_approve_469(%34, %35, %38) : (i256, i256, i256) -> () loc(#loc98) +// CHECK-NEXT: return %c1_i256 : i256 loc(#loc99) +// CHECK-NEXT: } loc(#loc84) // CHECK-NEXT: func.func @increaseAllowance_229(%arg0: i256 loc({{.*}}:74:29), %arg1: i256 loc({{.*}}:74:46)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc100) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc100) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc101) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc101) -// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc102) -// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc103) -// CHECK-NEXT: %4 = call @_msgSender_58() : () -> i256 loc(#loc104) -// CHECK-NEXT: %5 = arith.andi %4, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc105) -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: llvm.store %5, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: %7 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: llvm.store %c1_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc105) -// CHECK-NEXT: %10 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc106) -// CHECK-NEXT: %11 = arith.andi %10, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc105) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: %13 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: llvm.store %9, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc105) -// CHECK-NEXT: %15 = "llvm.intrcall"(%14, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc105) -// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc105) -// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc105) -// CHECK-NEXT: %18 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc107) -// CHECK-NEXT: %19 = arith.addi %17, %18 : i256 loc(#loc105) -// CHECK-NEXT: call @_approve_469(%2, %3, %19) : (i256, i256, i256) -> () loc(#loc108) -// CHECK-NEXT: return %c1_i256 : i256 loc(#loc109) -// CHECK-NEXT: } loc(#loc99) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc101) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc101) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc102) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc102) +// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc103) +// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc104) +// CHECK-NEXT: %4 = call @_msgSender_58() : () -> i256 loc(#loc105) +// CHECK-NEXT: %5 = arith.andi %4, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc106) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: llvm.store %5, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: %7 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: llvm.store %c1_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: %9 = "llvm.intrcall"(%8, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc106) +// CHECK-NEXT: %10 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc107) +// CHECK-NEXT: %11 = arith.andi %10, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc106) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: %13 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: llvm.store %9, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc106) +// CHECK-NEXT: %15 = "llvm.intrcall"(%14, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc106) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc106) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc106) +// CHECK-NEXT: %18 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc108) +// CHECK-NEXT: %19 = arith.addi %17, %18 : i256 loc(#loc106) +// CHECK-NEXT: call @_approve_469(%2, %3, %19) : (i256, i256, i256) -> () loc(#loc109) +// CHECK-NEXT: return %c1_i256 : i256 loc(#loc110) +// CHECK-NEXT: } loc(#loc100) // CHECK-NEXT: func.func @transferFrom_202(%arg0: i256 loc({{.*}}:59:24), %arg1: i256 loc({{.*}}:59:40), %arg2: i256 loc({{.*}}:59:59)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c132_i256 = arith.constant 132 : i256 loc(#loc) // CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc) @@ -1920,159 +1713,158 @@ contract ERC20 { // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc111) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc111) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc112) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc112) -// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc113) -// CHECK-NEXT: llvm.store %arg2, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc113) -// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc114) -// CHECK-NEXT: %4 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc115) -// CHECK-NEXT: %5 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc116) -// CHECK-NEXT: call @_transfer_332(%3, %4, %5) : (i256, i256, i256) -> () loc(#loc117) -// CHECK-NEXT: %6 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc118) -// CHECK-NEXT: %7 = arith.andi %6, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc119) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: llvm.store %7, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: %9 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: llvm.store %c1_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: %11 = "llvm.intrcall"(%10, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc119) -// CHECK-NEXT: %12 = call @_msgSender_58() : () -> i256 loc(#loc120) -// CHECK-NEXT: %13 = arith.andi %12, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc119) -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: llvm.store %13, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: %15 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: llvm.store %11, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc119) -// CHECK-NEXT: %17 = "llvm.intrcall"(%16, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc119) -// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc119) -// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc119) -// CHECK-NEXT: %20 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc121) -// CHECK-NEXT: llvm.store %19, %20 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc121) -// CHECK-NEXT: %21 = llvm.load %20 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc122) -// CHECK-NEXT: %22 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc123) -// CHECK-NEXT: %23 = arith.cmpi uge, %21, %22 : i256 loc(#loc122) -// CHECK-NEXT: %24 = arith.extui %23 : i1 to i256 loc(#loc122) -// CHECK-NEXT: %25 = arith.cmpi eq, %24, %c0_i256 : i256 loc(#loc124) -// CHECK-NEXT: cf.cond_br %25, ^bb1, ^bb2 loc(#loc124) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc112) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc112) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc113) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc113) +// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc114) +// CHECK-NEXT: llvm.store %arg2, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc114) +// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc115) +// CHECK-NEXT: %4 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc116) +// CHECK-NEXT: %5 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc117) +// CHECK-NEXT: call @_transfer_332(%3, %4, %5) : (i256, i256, i256) -> () loc(#loc118) +// CHECK-NEXT: %6 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc119) +// CHECK-NEXT: %7 = arith.andi %6, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc120) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: llvm.store %7, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: %9 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: llvm.store %c1_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: %11 = "llvm.intrcall"(%10, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc120) +// CHECK-NEXT: %12 = call @_msgSender_58() : () -> i256 loc(#loc121) +// CHECK-NEXT: %13 = arith.andi %12, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc120) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: llvm.store %13, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: %15 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: llvm.store %11, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc120) +// CHECK-NEXT: %17 = "llvm.intrcall"(%16, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc120) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<5> loc(#loc120) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc120) +// CHECK-NEXT: %20 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc122) +// CHECK-NEXT: llvm.store %19, %20 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc122) +// CHECK-NEXT: %21 = llvm.load %20 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc123) +// CHECK-NEXT: %22 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc124) +// CHECK-NEXT: %23 = arith.cmpi uge, %21, %22 : i256 loc(#loc123) +// CHECK-NEXT: %24 = arith.extui %23 : i1 to i256 loc(#loc123) +// CHECK-NEXT: %25 = arith.cmpi eq, %24, %c0_i256 : i256 loc(#loc125) +// CHECK-NEXT: cf.cond_br %25, ^bb1, ^bb2 loc(#loc125) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc124) -// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: %29 = arith.addi %27, %c4_i256 : i256 loc(#loc124) -// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: llvm.store %c32_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: %31 = arith.addi %27, %c36_i256 : i256 loc(#loc124) -// CHECK-NEXT: %32 = llvm.inttoptr %31 : i256 to !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: llvm.store %c40_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: %33 = arith.addi %27, %c68_i256 : i256 loc(#loc124) -// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859100820671745083778533502622993977909345_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: %35 = arith.addi %27, %c100_i256 : i256 loc(#loc124) -// CHECK-NEXT: %36 = llvm.inttoptr %35 : i256 to !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: llvm.store %c49041376442327685983450583443845300569967147870487584211451521639864848089088_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: %37 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc124) -// CHECK-NEXT: "llvm.intrcall"(%37, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc124) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc124) -// CHECK-NEXT: cf.br ^bb2 loc(#loc124) +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc125) +// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: %29 = arith.addi %27, %c4_i256 : i256 loc(#loc125) +// CHECK-NEXT: %30 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: llvm.store %c32_i256, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: %31 = arith.addi %27, %c36_i256 : i256 loc(#loc125) +// CHECK-NEXT: %32 = llvm.inttoptr %31 : i256 to !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: llvm.store %c40_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: %33 = arith.addi %27, %c68_i256 : i256 loc(#loc125) +// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: llvm.store %c31354931781638678607228669297131712859100820671745083778533502622993977909345_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: %35 = arith.addi %27, %c100_i256 : i256 loc(#loc125) +// CHECK-NEXT: %36 = llvm.inttoptr %35 : i256 to !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: llvm.store %c49041376442327685983450583443845300569967147870487584211451521639864848089088_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: %37 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc125) +// CHECK-NEXT: "llvm.intrcall"(%37, %c132_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc125) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc125) +// CHECK-NEXT: cf.br ^bb2 loc(#loc125) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %38 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc125) -// CHECK-NEXT: %39 = call @_msgSender_58() : () -> i256 loc(#loc126) -// CHECK-NEXT: %40 = llvm.load %20 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc127) -// CHECK-NEXT: %41 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc128) -// CHECK-NEXT: %42 = arith.subi %40, %41 : i256 loc(#loc127) -// CHECK-NEXT: call @_approve_469(%38, %39, %42) : (i256, i256, i256) -> () loc(#loc129) -// CHECK-NEXT: return %c1_i256 : i256 loc(#loc130) -// CHECK-NEXT: } loc(#loc110) +// CHECK-NEXT: %38 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc126) +// CHECK-NEXT: %39 = call @_msgSender_58() : () -> i256 loc(#loc127) +// CHECK-NEXT: %40 = llvm.load %20 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc128) +// CHECK-NEXT: %41 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc129) +// CHECK-NEXT: %42 = arith.subi %40, %41 : i256 loc(#loc128) +// CHECK-NEXT: call @_approve_469(%38, %39, %42) : (i256, i256, i256) -> () loc(#loc130) +// CHECK-NEXT: return %c1_i256 : i256 loc(#loc131) +// CHECK-NEXT: } loc(#loc111) // CHECK-NEXT: func.func @approve_156(%arg0: i256 loc({{.*}}:54:19), %arg1: i256 loc({{.*}}:54:36)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc132) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc132) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc133) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc133) -// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc134) -// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc135) -// CHECK-NEXT: %4 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc136) -// CHECK-NEXT: call @_approve_469(%2, %3, %4) : (i256, i256, i256) -> () loc(#loc137) -// CHECK-NEXT: return %c1_i256 : i256 loc(#loc138) -// CHECK-NEXT: } loc(#loc131) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc133) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc133) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc134) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc134) +// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc135) +// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc136) +// CHECK-NEXT: %4 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc137) +// CHECK-NEXT: call @_approve_469(%2, %3, %4) : (i256, i256, i256) -> () loc(#loc138) +// CHECK-NEXT: return %c1_i256 : i256 loc(#loc139) +// CHECK-NEXT: } loc(#loc132) // CHECK-NEXT: func.func @allowance_137(%arg0: i256 loc({{.*}}:50:21), %arg1: i256 loc({{.*}}:50:36)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc140) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc140) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc141) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc141) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc142) -// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc143) -// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: llvm.store %3, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: %5 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: llvm.store %c1_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: %7 = "llvm.intrcall"(%6, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc143) -// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc144) -// CHECK-NEXT: %9 = arith.andi %8, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc143) -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: %11 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: llvm.store %7, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc143) -// CHECK-NEXT: %13 = "llvm.intrcall"(%12, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc143) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc143) -// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc143) -// CHECK-NEXT: return %15 : i256 loc(#loc145) -// CHECK-NEXT: } loc(#loc139) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc141) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc141) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc142) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc142) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc143) +// CHECK-NEXT: %3 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc144) +// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: llvm.store %3, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: %5 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: llvm.store %c1_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: %7 = "llvm.intrcall"(%6, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc144) +// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc145) +// CHECK-NEXT: %9 = arith.andi %8, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc144) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: %11 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: llvm.store %7, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc144) +// CHECK-NEXT: %13 = "llvm.intrcall"(%12, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc144) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc144) +// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc144) +// CHECK-NEXT: return %15 : i256 loc(#loc146) +// CHECK-NEXT: } loc(#loc140) // CHECK-NEXT: func.func @transfer_121(%arg0: i256 loc({{.*}}:45:20), %arg1: i256 loc({{.*}}:45:39)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc147) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc147) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc148) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc148) -// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc149) -// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc150) -// CHECK-NEXT: %4 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc151) -// CHECK-NEXT: call @_transfer_332(%2, %3, %4) : (i256, i256, i256) -> () loc(#loc152) -// CHECK-NEXT: return %c1_i256 : i256 loc(#loc153) -// CHECK-NEXT: } loc(#loc146) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc148) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc148) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc149) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc149) +// CHECK-NEXT: %2 = call @_msgSender_58() : () -> i256 loc(#loc150) +// CHECK-NEXT: %3 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc151) +// CHECK-NEXT: %4 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc152) +// CHECK-NEXT: call @_transfer_332(%2, %3, %4) : (i256, i256, i256) -> () loc(#loc153) +// CHECK-NEXT: return %c1_i256 : i256 loc(#loc154) +// CHECK-NEXT: } loc(#loc147) // CHECK-NEXT: func.func @balanceOf_102(%arg0: i256 loc({{.*}}:41:21)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc155) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc155) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc155) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc156) -// CHECK-NEXT: %2 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc157) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc157) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc157) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc157) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc157) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc157) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc157) -// CHECK-NEXT: %7 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc157) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc157) -// CHECK-NEXT: return %8 : i256 loc(#loc158) -// CHECK-NEXT: } loc(#loc154) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc156) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc156) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc156) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc157) +// CHECK-NEXT: %2 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc158) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc158) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc158) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc158) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc158) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc158) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc158) +// CHECK-NEXT: %7 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc158) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc158) +// CHECK-NEXT: return %8 : i256 loc(#loc159) +// CHECK-NEXT: } loc(#loc155) // CHECK-NEXT: func.func @totalSupply_90() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc160) -// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc161) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc161) -// CHECK-NEXT: return %1 : i256 loc(#loc162) -// CHECK-NEXT: } loc(#loc159) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc161) +// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc162) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc162) +// CHECK-NEXT: return %1 : i256 loc(#loc163) +// CHECK-NEXT: } loc(#loc160) // CHECK-NEXT: func.func @decimals_82() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c18_i256 = arith.constant 18 : i256 loc(#loc164) -// CHECK-NEXT: return %c18_i256 : i256 loc(#loc165) -// CHECK-NEXT: } loc(#loc163) +// CHECK-NEXT: %c18_i256 = arith.constant 18 : i256 loc(#loc165) +// CHECK-NEXT: return %c18_i256 : i256 loc(#loc166) +// CHECK-NEXT: } loc(#loc164) // CHECK-NEXT: func.func @symbol_74() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -2086,88 +1878,60 @@ contract ERC20 { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc167) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc167) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc167) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc167) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc167) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc167) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc167) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc167) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc167) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc167) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc167) +// CHECK-NEXT: %0 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc168) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc168) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc168) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc168) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc168) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc168) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc168) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc168) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc168) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc168) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc168) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc167) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc167) -// CHECK-NEXT: cf.br ^bb2 loc(#loc167) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc168) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc168) +// CHECK-NEXT: cf.br ^bb2 loc(#loc168) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc167) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc167) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc167) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc167) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc167) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc167) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc167) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc167) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc167) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc167) +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc168) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc168) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc168) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc168) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc168) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc168) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc168) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc168) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc168) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc168) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc167) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc167) -// CHECK-NEXT: cf.br ^bb4 loc(#loc167) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc168) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc168) +// CHECK-NEXT: cf.br ^bb4 loc(#loc168) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc167) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc167) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc167) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc167) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %c4_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc167) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc167) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:11:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc167) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc167) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:11:2)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc167) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc167) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc167) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc167) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc167) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc167) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc167) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc167) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc167) -// CHECK-NEXT: cf.br ^bb9 loc(#loc167) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: return %16 : i256 loc(#loc168) -// CHECK-NEXT: } loc(#loc166) +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc168) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc168) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c4_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc168) +// CHECK-NEXT: return %16 : i256 loc(#loc169) +// CHECK-NEXT: } loc(#loc167) // CHECK-NEXT: func.func @name_66() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -2181,233 +1945,488 @@ contract ERC20 { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc170) -// CHECK-NEXT: %0 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc170) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc170) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc170) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc170) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc170) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc170) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc170) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc170) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc170) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc170) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc170) +// CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc9) +// CHECK-NEXT: %0 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc9) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc9) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc9) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc9) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc9) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc170) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc170) -// CHECK-NEXT: cf.br ^bb2 loc(#loc170) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) +// CHECK-NEXT: cf.br ^bb2 loc(#loc9) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc170) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc170) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc170) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc170) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc170) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc170) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc170) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc170) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc170) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc170) +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc9) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc9) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc9) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc9) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc9) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc9) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc9) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc9) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc170) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc170) -// CHECK-NEXT: cf.br ^bb4 loc(#loc170) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) +// CHECK-NEXT: cf.br ^bb4 loc(#loc9) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc170) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc170) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc170) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc170) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %c3_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc170) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc170) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:10:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc170) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc170) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:10:2)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc170) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc170) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc170) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc170) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc170) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc170) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc170) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc170) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc170) -// CHECK-NEXT: cf.br ^bb9 loc(#loc170) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c3_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc9) // CHECK-NEXT: return %16 : i256 loc(#loc171) -// CHECK-NEXT: } loc(#loc169) +// CHECK-NEXT: } loc(#loc170) // CHECK-NEXT: func.func @_msgSender_58() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %0 = "llvm.intrcall"() <{id = 4039 : i32, name = "evm.caller"}> : () -> i256 loc(#loc173) // CHECK-NEXT: return %0 : i256 loc(#loc174) // CHECK-NEXT: } loc(#loc172) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:17:4), %arg1: i256 loc({{.*}}:17:4), %arg2: i256 loc({{.*}}:17:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc6) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:17:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:17:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc6) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:17:4), %arg1: i256 loc({{.*}}:17:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: cf.br ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc6) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc6) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc6) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc6) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc6) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc6) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc6) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:17:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc6) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:17:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc6) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc6) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc6) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc6) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc6) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc6) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc6) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc6) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:17:4), %arg1: i256 loc({{.*}}:17:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: cf.br ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc6) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc6) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc6) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc6) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc6) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc6) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc6) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:17:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc6) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:17:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc6) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc6) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc6) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc6) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc6) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc6) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc6) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc6) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:17:4), %arg1: i256 loc({{.*}}:17:4), %arg2: i256 loc({{.*}}:17:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc6) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:17:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:17:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc6) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:6:0) // CHECK-NEXT: #loc2 = loc({{.*}}:16:2) // CHECK-NEXT: #loc5 = loc({{.*}}:17:12) // CHECK-NEXT: #loc7 = loc({{.*}}:18:14) -// CHECK-NEXT: #loc9 = loc({{.*}}:142:2) -// CHECK-NEXT: #loc13 = loc({{.*}}:145:14) -// CHECK-NEXT: #loc14 = loc({{.*}}:145:6) -// CHECK-NEXT: #loc15 = loc({{.*}}:146:14) -// CHECK-NEXT: #loc16 = loc({{.*}}:146:6) -// CHECK-NEXT: #loc17 = loc({{.*}}:149:16) -// CHECK-NEXT: #loc18 = loc({{.*}}:149:4) -// CHECK-NEXT: #loc19 = loc({{.*}}:149:23) -// CHECK-NEXT: #loc20 = loc({{.*}}:149:34) -// CHECK-NEXT: #loc21 = loc({{.*}}:150:18) -// CHECK-NEXT: #loc22 = loc({{.*}}:150:25) -// CHECK-NEXT: #loc23 = loc({{.*}}:150:34) -// CHECK-NEXT: #loc24 = loc({{.*}}:150:9) -// CHECK-NEXT: #loc25 = loc({{.*}}:124:2) -// CHECK-NEXT: #loc28 = loc({{.*}}:127:14) -// CHECK-NEXT: #loc29 = loc({{.*}}:127:6) -// CHECK-NEXT: #loc30 = loc({{.*}}:130:39) -// CHECK-NEXT: #loc31 = loc({{.*}}:130:29) -// CHECK-NEXT: #loc32 = loc({{.*}}:130:4) -// CHECK-NEXT: #loc33 = loc({{.*}}:133:14) -// CHECK-NEXT: #loc34 = loc({{.*}}:133:32) -// CHECK-NEXT: #loc35 = loc({{.*}}:133:6) -// CHECK-NEXT: #loc36 = loc({{.*}}:135:16) -// CHECK-NEXT: #loc37 = loc({{.*}}:135:6) -// CHECK-NEXT: #loc38 = loc({{.*}}:135:27) -// CHECK-NEXT: #loc39 = loc({{.*}}:135:44) -// CHECK-NEXT: #loc40 = loc({{.*}}:136:22) -// CHECK-NEXT: #loc41 = loc({{.*}}:136:6) -// CHECK-NEXT: #loc42 = loc({{.*}}:139:18) -// CHECK-NEXT: #loc43 = loc({{.*}}:139:39) -// CHECK-NEXT: #loc44 = loc({{.*}}:139:9) -// CHECK-NEXT: #loc45 = loc({{.*}}:114:2) -// CHECK-NEXT: #loc48 = loc({{.*}}:117:14) -// CHECK-NEXT: #loc49 = loc({{.*}}:117:6) -// CHECK-NEXT: #loc50 = loc({{.*}}:118:22) -// CHECK-NEXT: #loc51 = loc({{.*}}:118:6) -// CHECK-NEXT: #loc52 = loc({{.*}}:119:16) -// CHECK-NEXT: #loc53 = loc({{.*}}:119:6) -// CHECK-NEXT: #loc54 = loc({{.*}}:119:28) -// CHECK-NEXT: #loc55 = loc({{.*}}:121:30) -// CHECK-NEXT: #loc56 = loc({{.*}}:121:39) -// CHECK-NEXT: #loc57 = loc({{.*}}:121:9) -// CHECK-NEXT: #loc58 = loc({{.*}}:96:2) -// CHECK-NEXT: #loc62 = loc({{.*}}:99:14) -// CHECK-NEXT: #loc63 = loc({{.*}}:99:6) -// CHECK-NEXT: #loc64 = loc({{.*}}:100:14) -// CHECK-NEXT: #loc65 = loc({{.*}}:100:6) -// CHECK-NEXT: #loc66 = loc({{.*}}:103:38) -// CHECK-NEXT: #loc67 = loc({{.*}}:103:28) -// CHECK-NEXT: #loc68 = loc({{.*}}:103:4) -// CHECK-NEXT: #loc69 = loc({{.*}}:106:14) -// CHECK-NEXT: #loc70 = loc({{.*}}:106:31) -// CHECK-NEXT: #loc71 = loc({{.*}}:106:6) -// CHECK-NEXT: #loc72 = loc({{.*}}:108:16) -// CHECK-NEXT: #loc73 = loc({{.*}}:108:6) -// CHECK-NEXT: #loc74 = loc({{.*}}:108:26) -// CHECK-NEXT: #loc75 = loc({{.*}}:108:42) -// CHECK-NEXT: #loc76 = loc({{.*}}:109:16) -// CHECK-NEXT: #loc77 = loc({{.*}}:109:6) -// CHECK-NEXT: #loc78 = loc({{.*}}:109:30) -// CHECK-NEXT: #loc79 = loc({{.*}}:111:18) -// CHECK-NEXT: #loc80 = loc({{.*}}:111:26) -// CHECK-NEXT: #loc81 = loc({{.*}}:111:37) -// CHECK-NEXT: #loc82 = loc({{.*}}:111:9) -// CHECK-NEXT: #loc83 = loc({{.*}}:83:2) -// CHECK-NEXT: #loc86 = loc({{.*}}:85:43) -// CHECK-NEXT: #loc87 = loc({{.*}}:85:31) -// CHECK-NEXT: #loc88 = loc({{.*}}:85:57) -// CHECK-NEXT: #loc89 = loc({{.*}}:85:4) -// CHECK-NEXT: #loc90 = loc({{.*}}:88:14) -// CHECK-NEXT: #loc91 = loc({{.*}}:88:34) -// CHECK-NEXT: #loc92 = loc({{.*}}:88:6) -// CHECK-NEXT: #loc93 = loc({{.*}}:90:15) -// CHECK-NEXT: #loc94 = loc({{.*}}:90:29) -// CHECK-NEXT: #loc95 = loc({{.*}}:90:38) -// CHECK-NEXT: #loc96 = loc({{.*}}:90:57) -// CHECK-NEXT: #loc97 = loc({{.*}}:90:6) -// CHECK-NEXT: #loc98 = loc({{.*}}:93:4) -// CHECK-NEXT: #loc99 = loc({{.*}}:74:2) -// CHECK-NEXT: #loc102 = loc({{.*}}:78:13) -// CHECK-NEXT: #loc103 = loc({{.*}}:78:27) -// CHECK-NEXT: #loc104 = loc({{.*}}:78:48) -// CHECK-NEXT: #loc105 = loc({{.*}}:78:36) -// CHECK-NEXT: #loc106 = loc({{.*}}:78:62) -// CHECK-NEXT: #loc107 = loc({{.*}}:78:73) -// CHECK-NEXT: #loc108 = loc({{.*}}:78:4) -// CHECK-NEXT: #loc109 = loc({{.*}}:80:4) -// CHECK-NEXT: #loc110 = loc({{.*}}:59:2) -// CHECK-NEXT: #loc114 = loc({{.*}}:61:14) -// CHECK-NEXT: #loc115 = loc({{.*}}:61:22) -// CHECK-NEXT: #loc116 = loc({{.*}}:61:33) -// CHECK-NEXT: #loc117 = loc({{.*}}:61:4) -// CHECK-NEXT: #loc118 = loc({{.*}}:63:43) -// CHECK-NEXT: #loc119 = loc({{.*}}:63:31) -// CHECK-NEXT: #loc120 = loc({{.*}}:63:51) -// CHECK-NEXT: #loc121 = loc({{.*}}:63:4) -// CHECK-NEXT: #loc122 = loc({{.*}}:66:14) -// CHECK-NEXT: #loc123 = loc({{.*}}:66:34) -// CHECK-NEXT: #loc124 = loc({{.*}}:66:6) -// CHECK-NEXT: #loc125 = loc({{.*}}:68:15) -// CHECK-NEXT: #loc126 = loc({{.*}}:68:23) -// CHECK-NEXT: #loc127 = loc({{.*}}:68:37) -// CHECK-NEXT: #loc128 = loc({{.*}}:68:56) -// CHECK-NEXT: #loc129 = loc({{.*}}:68:6) -// CHECK-NEXT: #loc130 = loc({{.*}}:71:4) -// CHECK-NEXT: #loc131 = loc({{.*}}:54:2) -// CHECK-NEXT: #loc134 = loc({{.*}}:55:13) -// CHECK-NEXT: #loc135 = loc({{.*}}:55:27) -// CHECK-NEXT: #loc136 = loc({{.*}}:55:36) -// CHECK-NEXT: #loc137 = loc({{.*}}:55:4) -// CHECK-NEXT: #loc138 = loc({{.*}}:56:4) -// CHECK-NEXT: #loc139 = loc({{.*}}:50:2) -// CHECK-NEXT: #loc142 = loc({{.*}}:51:23) -// CHECK-NEXT: #loc143 = loc({{.*}}:51:11) -// CHECK-NEXT: #loc144 = loc({{.*}}:51:30) -// CHECK-NEXT: #loc145 = loc({{.*}}:51:4) -// CHECK-NEXT: #loc146 = loc({{.*}}:45:2) -// CHECK-NEXT: #loc149 = loc({{.*}}:46:14) -// CHECK-NEXT: #loc150 = loc({{.*}}:46:28) -// CHECK-NEXT: #loc151 = loc({{.*}}:46:39) -// CHECK-NEXT: #loc152 = loc({{.*}}:46:4) -// CHECK-NEXT: #loc153 = loc({{.*}}:47:4) -// CHECK-NEXT: #loc154 = loc({{.*}}:41:2) -// CHECK-NEXT: #loc156 = loc({{.*}}:42:21) -// CHECK-NEXT: #loc157 = loc({{.*}}:42:11) -// CHECK-NEXT: #loc158 = loc({{.*}}:42:4) -// CHECK-NEXT: #loc159 = loc({{.*}}:37:2) -// CHECK-NEXT: #loc160 = loc({{.*}}:9:2) -// CHECK-NEXT: #loc161 = loc({{.*}}:38:11) -// CHECK-NEXT: #loc162 = loc({{.*}}:38:4) -// CHECK-NEXT: #loc163 = loc({{.*}}:33:2) -// CHECK-NEXT: #loc164 = loc({{.*}}:34:11) -// CHECK-NEXT: #loc165 = loc({{.*}}:34:4) -// CHECK-NEXT: #loc166 = loc({{.*}}:29:2) -// CHECK-NEXT: #loc168 = loc({{.*}}:30:4) -// CHECK-NEXT: #loc169 = loc({{.*}}:25:2) +// CHECK-NEXT: #loc8 = loc({{.*}}:18:4) +// CHECK-NEXT: #loc10 = loc({{.*}}:142:2) +// CHECK-NEXT: #loc14 = loc({{.*}}:145:14) +// CHECK-NEXT: #loc15 = loc({{.*}}:145:6) +// CHECK-NEXT: #loc16 = loc({{.*}}:146:14) +// CHECK-NEXT: #loc17 = loc({{.*}}:146:6) +// CHECK-NEXT: #loc18 = loc({{.*}}:149:16) +// CHECK-NEXT: #loc19 = loc({{.*}}:149:4) +// CHECK-NEXT: #loc20 = loc({{.*}}:149:23) +// CHECK-NEXT: #loc21 = loc({{.*}}:149:34) +// CHECK-NEXT: #loc22 = loc({{.*}}:150:18) +// CHECK-NEXT: #loc23 = loc({{.*}}:150:25) +// CHECK-NEXT: #loc24 = loc({{.*}}:150:34) +// CHECK-NEXT: #loc25 = loc({{.*}}:150:9) +// CHECK-NEXT: #loc26 = loc({{.*}}:124:2) +// CHECK-NEXT: #loc29 = loc({{.*}}:127:14) +// CHECK-NEXT: #loc30 = loc({{.*}}:127:6) +// CHECK-NEXT: #loc31 = loc({{.*}}:130:39) +// CHECK-NEXT: #loc32 = loc({{.*}}:130:29) +// CHECK-NEXT: #loc33 = loc({{.*}}:130:4) +// CHECK-NEXT: #loc34 = loc({{.*}}:133:14) +// CHECK-NEXT: #loc35 = loc({{.*}}:133:32) +// CHECK-NEXT: #loc36 = loc({{.*}}:133:6) +// CHECK-NEXT: #loc37 = loc({{.*}}:135:16) +// CHECK-NEXT: #loc38 = loc({{.*}}:135:6) +// CHECK-NEXT: #loc39 = loc({{.*}}:135:27) +// CHECK-NEXT: #loc40 = loc({{.*}}:135:44) +// CHECK-NEXT: #loc41 = loc({{.*}}:136:22) +// CHECK-NEXT: #loc42 = loc({{.*}}:136:6) +// CHECK-NEXT: #loc43 = loc({{.*}}:139:18) +// CHECK-NEXT: #loc44 = loc({{.*}}:139:39) +// CHECK-NEXT: #loc45 = loc({{.*}}:139:9) +// CHECK-NEXT: #loc46 = loc({{.*}}:114:2) +// CHECK-NEXT: #loc49 = loc({{.*}}:117:14) +// CHECK-NEXT: #loc50 = loc({{.*}}:117:6) +// CHECK-NEXT: #loc51 = loc({{.*}}:118:22) +// CHECK-NEXT: #loc52 = loc({{.*}}:118:6) +// CHECK-NEXT: #loc53 = loc({{.*}}:119:16) +// CHECK-NEXT: #loc54 = loc({{.*}}:119:6) +// CHECK-NEXT: #loc55 = loc({{.*}}:119:28) +// CHECK-NEXT: #loc56 = loc({{.*}}:121:30) +// CHECK-NEXT: #loc57 = loc({{.*}}:121:39) +// CHECK-NEXT: #loc58 = loc({{.*}}:121:9) +// CHECK-NEXT: #loc59 = loc({{.*}}:96:2) +// CHECK-NEXT: #loc63 = loc({{.*}}:99:14) +// CHECK-NEXT: #loc64 = loc({{.*}}:99:6) +// CHECK-NEXT: #loc65 = loc({{.*}}:100:14) +// CHECK-NEXT: #loc66 = loc({{.*}}:100:6) +// CHECK-NEXT: #loc67 = loc({{.*}}:103:38) +// CHECK-NEXT: #loc68 = loc({{.*}}:103:28) +// CHECK-NEXT: #loc69 = loc({{.*}}:103:4) +// CHECK-NEXT: #loc70 = loc({{.*}}:106:14) +// CHECK-NEXT: #loc71 = loc({{.*}}:106:31) +// CHECK-NEXT: #loc72 = loc({{.*}}:106:6) +// CHECK-NEXT: #loc73 = loc({{.*}}:108:16) +// CHECK-NEXT: #loc74 = loc({{.*}}:108:6) +// CHECK-NEXT: #loc75 = loc({{.*}}:108:26) +// CHECK-NEXT: #loc76 = loc({{.*}}:108:42) +// CHECK-NEXT: #loc77 = loc({{.*}}:109:16) +// CHECK-NEXT: #loc78 = loc({{.*}}:109:6) +// CHECK-NEXT: #loc79 = loc({{.*}}:109:30) +// CHECK-NEXT: #loc80 = loc({{.*}}:111:18) +// CHECK-NEXT: #loc81 = loc({{.*}}:111:26) +// CHECK-NEXT: #loc82 = loc({{.*}}:111:37) +// CHECK-NEXT: #loc83 = loc({{.*}}:111:9) +// CHECK-NEXT: #loc84 = loc({{.*}}:83:2) +// CHECK-NEXT: #loc87 = loc({{.*}}:85:43) +// CHECK-NEXT: #loc88 = loc({{.*}}:85:31) +// CHECK-NEXT: #loc89 = loc({{.*}}:85:57) +// CHECK-NEXT: #loc90 = loc({{.*}}:85:4) +// CHECK-NEXT: #loc91 = loc({{.*}}:88:14) +// CHECK-NEXT: #loc92 = loc({{.*}}:88:34) +// CHECK-NEXT: #loc93 = loc({{.*}}:88:6) +// CHECK-NEXT: #loc94 = loc({{.*}}:90:15) +// CHECK-NEXT: #loc95 = loc({{.*}}:90:29) +// CHECK-NEXT: #loc96 = loc({{.*}}:90:38) +// CHECK-NEXT: #loc97 = loc({{.*}}:90:57) +// CHECK-NEXT: #loc98 = loc({{.*}}:90:6) +// CHECK-NEXT: #loc99 = loc({{.*}}:93:4) +// CHECK-NEXT: #loc100 = loc({{.*}}:74:2) +// CHECK-NEXT: #loc103 = loc({{.*}}:78:13) +// CHECK-NEXT: #loc104 = loc({{.*}}:78:27) +// CHECK-NEXT: #loc105 = loc({{.*}}:78:48) +// CHECK-NEXT: #loc106 = loc({{.*}}:78:36) +// CHECK-NEXT: #loc107 = loc({{.*}}:78:62) +// CHECK-NEXT: #loc108 = loc({{.*}}:78:73) +// CHECK-NEXT: #loc109 = loc({{.*}}:78:4) +// CHECK-NEXT: #loc110 = loc({{.*}}:80:4) +// CHECK-NEXT: #loc111 = loc({{.*}}:59:2) +// CHECK-NEXT: #loc115 = loc({{.*}}:61:14) +// CHECK-NEXT: #loc116 = loc({{.*}}:61:22) +// CHECK-NEXT: #loc117 = loc({{.*}}:61:33) +// CHECK-NEXT: #loc118 = loc({{.*}}:61:4) +// CHECK-NEXT: #loc119 = loc({{.*}}:63:43) +// CHECK-NEXT: #loc120 = loc({{.*}}:63:31) +// CHECK-NEXT: #loc121 = loc({{.*}}:63:51) +// CHECK-NEXT: #loc122 = loc({{.*}}:63:4) +// CHECK-NEXT: #loc123 = loc({{.*}}:66:14) +// CHECK-NEXT: #loc124 = loc({{.*}}:66:34) +// CHECK-NEXT: #loc125 = loc({{.*}}:66:6) +// CHECK-NEXT: #loc126 = loc({{.*}}:68:15) +// CHECK-NEXT: #loc127 = loc({{.*}}:68:23) +// CHECK-NEXT: #loc128 = loc({{.*}}:68:37) +// CHECK-NEXT: #loc129 = loc({{.*}}:68:56) +// CHECK-NEXT: #loc130 = loc({{.*}}:68:6) +// CHECK-NEXT: #loc131 = loc({{.*}}:71:4) +// CHECK-NEXT: #loc132 = loc({{.*}}:54:2) +// CHECK-NEXT: #loc135 = loc({{.*}}:55:13) +// CHECK-NEXT: #loc136 = loc({{.*}}:55:27) +// CHECK-NEXT: #loc137 = loc({{.*}}:55:36) +// CHECK-NEXT: #loc138 = loc({{.*}}:55:4) +// CHECK-NEXT: #loc139 = loc({{.*}}:56:4) +// CHECK-NEXT: #loc140 = loc({{.*}}:50:2) +// CHECK-NEXT: #loc143 = loc({{.*}}:51:23) +// CHECK-NEXT: #loc144 = loc({{.*}}:51:11) +// CHECK-NEXT: #loc145 = loc({{.*}}:51:30) +// CHECK-NEXT: #loc146 = loc({{.*}}:51:4) +// CHECK-NEXT: #loc147 = loc({{.*}}:45:2) +// CHECK-NEXT: #loc150 = loc({{.*}}:46:14) +// CHECK-NEXT: #loc151 = loc({{.*}}:46:28) +// CHECK-NEXT: #loc152 = loc({{.*}}:46:39) +// CHECK-NEXT: #loc153 = loc({{.*}}:46:4) +// CHECK-NEXT: #loc154 = loc({{.*}}:47:4) +// CHECK-NEXT: #loc155 = loc({{.*}}:41:2) +// CHECK-NEXT: #loc157 = loc({{.*}}:42:21) +// CHECK-NEXT: #loc158 = loc({{.*}}:42:11) +// CHECK-NEXT: #loc159 = loc({{.*}}:42:4) +// CHECK-NEXT: #loc160 = loc({{.*}}:37:2) +// CHECK-NEXT: #loc161 = loc({{.*}}:9:2) +// CHECK-NEXT: #loc162 = loc({{.*}}:38:11) +// CHECK-NEXT: #loc163 = loc({{.*}}:38:4) +// CHECK-NEXT: #loc164 = loc({{.*}}:33:2) +// CHECK-NEXT: #loc165 = loc({{.*}}:34:11) +// CHECK-NEXT: #loc166 = loc({{.*}}:34:4) +// CHECK-NEXT: #loc167 = loc({{.*}}:29:2) +// CHECK-NEXT: #loc168 = loc({{.*}}:11:2) +// CHECK-NEXT: #loc169 = loc({{.*}}:30:4) +// CHECK-NEXT: #loc170 = loc({{.*}}:25:2) // CHECK-NEXT: #loc171 = loc({{.*}}:26:4) // CHECK-NEXT: #loc172 = loc({{.*}}:21:2) // CHECK-NEXT: #loc173 = loc({{.*}}:22:11) diff --git a/test/lit/mlirCodegen/EVM/ext-call-ref.sol b/test/lit/mlirCodegen/EVM/ext-call-ref.sol index 0b4da0ca8..321244f7e 100644 --- a/test/lit/mlirCodegen/EVM/ext-call-ref.sol +++ b/test/lit/mlirCodegen/EVM/ext-call-ref.sol @@ -44,11 +44,11 @@ contract C { // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc3 = loc({{.*}}:38:24) -// CHECK-NEXT: #loc4 = loc({{.*}}:39:11) -// CHECK-NEXT: #loc8 = loc({{.*}}:34:24) -// CHECK-NEXT: #loc12 = loc({{.*}}:31:11) -// CHECK-NEXT: #loc19 = loc({{.*}}:18:11) +// CHECK-NEXT: #loc2 = loc({{.*}}:18:11) +// CHECK-NEXT: #loc4 = loc({{.*}}:38:24) +// CHECK-NEXT: #loc5 = loc({{.*}}:39:11) +// CHECK-NEXT: #loc9 = loc({{.*}}:34:24) +// CHECK-NEXT: #loc13 = loc({{.*}}:31:11) // CHECK-NEXT: #loc22 = loc({{.*}}:13:20) // CHECK-NEXT: #loc27 = loc({{.*}}:9:21) // CHECK-NEXT: #loc28 = loc({{.*}}:10:11) @@ -684,6 +684,41 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:18:11), %arg1: i256 loc({{.*}}:18:11), %arg2: i256 loc({{.*}}:18:11), %arg3: i256 loc({{.*}}:18:11)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:18:11)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:18:11)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @iRetCalldata_106(%arg0: !llvm.struct<(i256, i256)> loc({{.*}}:38:24)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) // CHECK-NEXT: %c68_i256 = arith.constant 68 : i256 loc(#loc) @@ -700,176 +735,176 @@ contract C { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc3) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc3) -// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc3) -// CHECK-NEXT: %2 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %3 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc5) -// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4055 : i32, name = "evm.gas"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %5 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) -// CHECK-NEXT: %6 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %7 = llvm.load %6 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %8 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c4091001924276373204056814163925105295953039383924947755697979497055906693120_i256, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %9 = arith.addi %7, %c4_i256 : i256 loc(#loc4) -// CHECK-NEXT: %10 = arith.addi %7, %c36_i256 : i256 loc(#loc4) -// CHECK-NEXT: %11 = arith.subi %10, %9 : i256 loc(#loc4) -// CHECK-NEXT: %12 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %13 = arith.addi %7, %c68_i256 : i256 loc(#loc4) -// CHECK-NEXT: %14 = llvm.extractvalue %3[1] : !llvm.struct<(i256, i256)> loc(#loc4) -// CHECK-NEXT: %15 = llvm.extractvalue %3[0] : !llvm.struct<(i256, i256)> loc(#loc4) -// CHECK-NEXT: %16 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %17 = llvm.inttoptr %15 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memcpy"(%16, %17, %14) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc4) -// CHECK-NEXT: %18 = arith.addi %13, %14 : i256 loc(#loc4) -// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c0_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %20 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %14, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %21 = arith.addi %14, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %22 = arith.andi %21, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %23 = arith.addi %13, %22 : i256 loc(#loc4) -// CHECK-NEXT: %24 = arith.subi %23, %7 : i256 loc(#loc4) -// CHECK-NEXT: %25 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %26 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %27 = "llvm.intrcall"(%4, %5, %25, %24, %26, %c0_i256) <{id = 4090 : i32, name = "evm.staticcall"}> : (i256, i256, !llvm.ptr<1>, i256, !llvm.ptr<1>, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %28 = arith.cmpi eq, %27, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %28, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc4) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc4) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc4) +// CHECK-NEXT: %2 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc5) +// CHECK-NEXT: %3 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc6) +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4055 : i32, name = "evm.gas"}> : () -> i256 loc(#loc5) +// CHECK-NEXT: %5 = arith.andi %2, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) +// CHECK-NEXT: %6 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %7 = llvm.load %6 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %8 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c4091001924276373204056814163925105295953039383924947755697979497055906693120_i256, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %9 = arith.addi %7, %c4_i256 : i256 loc(#loc5) +// CHECK-NEXT: %10 = arith.addi %7, %c36_i256 : i256 loc(#loc5) +// CHECK-NEXT: %11 = arith.subi %10, %9 : i256 loc(#loc5) +// CHECK-NEXT: %12 = llvm.inttoptr %9 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %13 = arith.addi %7, %c68_i256 : i256 loc(#loc5) +// CHECK-NEXT: %14 = llvm.extractvalue %3[1] : !llvm.struct<(i256, i256)> loc(#loc5) +// CHECK-NEXT: %15 = llvm.extractvalue %3[0] : !llvm.struct<(i256, i256)> loc(#loc5) +// CHECK-NEXT: %16 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %17 = llvm.inttoptr %15 : i256 to !llvm.ptr<2> loc(#loc5) +// CHECK-NEXT: "llvm.intr.memcpy"(%16, %17, %14) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc5) +// CHECK-NEXT: %18 = arith.addi %13, %14 : i256 loc(#loc5) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %20 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %14, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %21 = arith.addi %14, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %22 = arith.andi %21, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %23 = arith.addi %13, %22 : i256 loc(#loc5) +// CHECK-NEXT: %24 = arith.subi %23, %7 : i256 loc(#loc5) +// CHECK-NEXT: %25 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %26 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %27 = "llvm.intrcall"(%4, %5, %25, %24, %26, %c0_i256) <{id = 4090 : i32, name = "evm.staticcall"}> : (i256, i256, !llvm.ptr<1>, i256, !llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %28 = arith.cmpi eq, %27, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %28, ^bb1, ^bb2 loc(#loc5) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %29 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %31 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %32 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memcpy"(%32, %33, %31) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc4) -// CHECK-NEXT: %34 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%34, %31) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: %29 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %31 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc5) +// CHECK-NEXT: %32 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc5) +// CHECK-NEXT: "llvm.intr.memcpy"(%32, %33, %31) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc5) +// CHECK-NEXT: %34 = llvm.inttoptr %30 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%34, %31) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %35 = arith.cmpi ne, %27, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %35, ^bb3, ^bb18(%0 : i256) loc(#loc4) +// CHECK-NEXT: %35 = arith.cmpi ne, %27, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %35, ^bb3, ^bb18(%0 : i256) loc(#loc5) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %36 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %37 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memcpy"(%37, %38, %36) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc4) -// CHECK-NEXT: %39 = arith.addi %36, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %40 = arith.andi %39, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %41 = arith.addi %7, %40 : i256 loc(#loc4) -// CHECK-NEXT: %42 = arith.cmpi ugt, %41, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %43 = arith.cmpi ult, %41, %7 : i256 loc(#loc4) -// CHECK-NEXT: %44 = arith.ori %42, %43 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %44, ^bb4, ^bb5 loc(#loc4) +// CHECK-NEXT: %36 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc5) +// CHECK-NEXT: %37 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc5) +// CHECK-NEXT: "llvm.intr.memcpy"(%37, %38, %36) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc5) +// CHECK-NEXT: %39 = arith.addi %36, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %40 = arith.andi %39, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %41 = arith.addi %7, %40 : i256 loc(#loc5) +// CHECK-NEXT: %42 = arith.cmpi ugt, %41, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: %43 = arith.cmpi ult, %41, %7 : i256 loc(#loc5) +// CHECK-NEXT: %44 = arith.ori %42, %43 : i1 loc(#loc5) +// CHECK-NEXT: cf.cond_br %44, ^bb4, ^bb5 loc(#loc5) // CHECK-NEXT: ^bb4: // pred: ^bb3 -// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %46 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%47, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb5 loc(#loc4) +// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %46 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%47, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb5 loc(#loc5) // CHECK-NEXT: ^bb5: // 2 preds: ^bb3, ^bb4 -// CHECK-NEXT: %48 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %41, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %49 = arith.addi %7, %36 : i256 loc(#loc4) -// CHECK-NEXT: %50 = arith.cmpi slt, %36, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %50, ^bb6, ^bb7 loc(#loc4) +// CHECK-NEXT: %48 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %41, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %49 = arith.addi %7, %36 : i256 loc(#loc5) +// CHECK-NEXT: %50 = arith.cmpi slt, %36, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %50, ^bb6, ^bb7 loc(#loc5) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %51 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%51, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb7 loc(#loc4) +// CHECK-NEXT: %51 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%51, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb7 loc(#loc5) // CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 -// CHECK-NEXT: %52 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %53 = llvm.load %52 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %54 = arith.cmpi ugt, %53, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %54, ^bb8, ^bb9 loc(#loc4) +// CHECK-NEXT: %52 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %53 = llvm.load %52 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %54 = arith.cmpi ugt, %53, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %54, ^bb8, ^bb9 loc(#loc5) // CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%55, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb9 loc(#loc4) +// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%55, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb9 loc(#loc5) // CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %56 = arith.addi %7, %53 : i256 loc(#loc4) -// CHECK-NEXT: %57 = arith.addi %56, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %58 = arith.cmpi sge, %57, %49 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %58, ^bb10, ^bb11 loc(#loc4) +// CHECK-NEXT: %56 = arith.addi %7, %53 : i256 loc(#loc5) +// CHECK-NEXT: %57 = arith.addi %56, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %58 = arith.cmpi sge, %57, %49 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %58, ^bb10, ^bb11 loc(#loc5) // CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%59, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb11 loc(#loc4) +// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%59, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb11 loc(#loc5) // CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 -// CHECK-NEXT: %60 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %62 = arith.addi %56, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %63 = arith.addi %62, %61 : i256 loc(#loc4) -// CHECK-NEXT: %64 = arith.cmpi ugt, %63, %49 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %64, ^bb12, ^bb13 loc(#loc4) +// CHECK-NEXT: %60 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %62 = arith.addi %56, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %63 = arith.addi %62, %61 : i256 loc(#loc5) +// CHECK-NEXT: %64 = arith.cmpi ugt, %63, %49 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %64, ^bb12, ^bb13 loc(#loc5) // CHECK-NEXT: ^bb12: // pred: ^bb11 -// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%65, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb13 loc(#loc4) +// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%65, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb13 loc(#loc5) // CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 -// CHECK-NEXT: %66 = arith.addi %61, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %67 = arith.andi %66, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %68 = arith.cmpi ugt, %61, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %68, ^bb14, ^bb15 loc(#loc4) +// CHECK-NEXT: %66 = arith.addi %61, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %67 = arith.andi %66, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %68 = arith.cmpi ugt, %61, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %68, ^bb14, ^bb15 loc(#loc5) // CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %70 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %71 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%71, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb15 loc(#loc4) +// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %70 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %71 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%71, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb15 loc(#loc5) // CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %72 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %73 = llvm.load %72 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %74 = arith.addi %67, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %75 = arith.andi %74, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %76 = arith.addi %73, %75 : i256 loc(#loc4) -// CHECK-NEXT: %77 = arith.cmpi ugt, %76, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %78 = arith.cmpi ult, %76, %73 : i256 loc(#loc4) -// CHECK-NEXT: %79 = arith.ori %77, %78 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %79, ^bb16, ^bb17 loc(#loc4) +// CHECK-NEXT: %72 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %73 = llvm.load %72 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %74 = arith.addi %67, %c63_i256 : i256 loc(#loc5) +// CHECK-NEXT: %75 = arith.andi %74, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %76 = arith.addi %73, %75 : i256 loc(#loc5) +// CHECK-NEXT: %77 = arith.cmpi ugt, %76, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: %78 = arith.cmpi ult, %76, %73 : i256 loc(#loc5) +// CHECK-NEXT: %79 = arith.ori %77, %78 : i1 loc(#loc5) +// CHECK-NEXT: cf.cond_br %79, ^bb16, ^bb17 loc(#loc5) // CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %80 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %80 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %81 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %82 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%82, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb17 loc(#loc4) +// CHECK-NEXT: %80 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %80 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %81 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %82 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%82, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb17 loc(#loc5) // CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %83 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %76, %83 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %84 = llvm.inttoptr %73 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %61, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %85 = arith.addi %73, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %86 = llvm.inttoptr %85 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %87 = llvm.inttoptr %62 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memmove"(%86, %87, %61) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: %88 = arith.addi %85, %61 : i256 loc(#loc4) -// CHECK-NEXT: %89 = llvm.inttoptr %88 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c0_i256, %89 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb18(%73 : i256) loc(#loc4) +// CHECK-NEXT: %83 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %76, %83 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %84 = llvm.inttoptr %73 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %61, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %85 = arith.addi %73, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %86 = llvm.inttoptr %85 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %87 = llvm.inttoptr %62 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intr.memmove"(%86, %87, %61) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: %88 = arith.addi %85, %61 : i256 loc(#loc5) +// CHECK-NEXT: %89 = llvm.inttoptr %88 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %89 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: cf.br ^bb18(%73 : i256) loc(#loc5) // CHECK-NEXT: ^bb18(%90: i256 loc({{.*}}:39:11)): // 2 preds: ^bb2, ^bb17 -// CHECK-NEXT: return %90 : i256 loc(#loc6) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: return %90 : i256 loc(#loc7) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @hRetCalldata_93(%arg0: !llvm.struct<(i256, i256)> loc({{.*}}:34:24)) -> !llvm.struct<(i256, i256)> attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc8) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc8) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc8) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc9) -// CHECK-NEXT: return %1 : !llvm.struct<(i256, i256)> loc(#loc10) -// CHECK-NEXT: } loc(#loc7) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc9) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc9) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc9) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc10) +// CHECK-NEXT: return %1 : !llvm.struct<(i256, i256)> loc(#loc11) +// CHECK-NEXT: } loc(#loc8) // CHECK-NEXT: func.func @iStruct_83() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) // CHECK-NEXT: %c39952102196459495934248332155486378193748972971589146616366149824568163827712_i256 = arith.constant 39952102196459495934248332155486378193748972971589146616366149824568163827712 : i256 loc(#loc) @@ -886,198 +921,198 @@ contract C { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %2 = "llvm.intrcall"() <{id = 4055 : i32, name = "evm.gas"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %3 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc12) -// CHECK-NEXT: %4 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c39952102196459495934248332155486378193748972971589146616366149824568163827712_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %7 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %8 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %9 = "llvm.intrcall"(%2, %3, %7, %c4_i256, %8, %c0_i256) <{id = 4090 : i32, name = "evm.staticcall"}> : (i256, i256, !llvm.ptr<1>, i256, !llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %10 = arith.cmpi eq, %9, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc12) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc13) +// CHECK-NEXT: %2 = "llvm.intrcall"() <{id = 4055 : i32, name = "evm.gas"}> : () -> i256 loc(#loc13) +// CHECK-NEXT: %3 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc13) +// CHECK-NEXT: %4 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c39952102196459495934248332155486378193748972971589146616366149824568163827712_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %7 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %8 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %9 = "llvm.intrcall"(%2, %3, %7, %c4_i256, %8, %c0_i256) <{id = 4090 : i32, name = "evm.staticcall"}> : (i256, i256, !llvm.ptr<1>, i256, !llvm.ptr<1>, i256) -> i256 loc(#loc13) +// CHECK-NEXT: %10 = arith.cmpi eq, %9, %c0_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc13) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %11 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %13 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %14 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc12) -// CHECK-NEXT: "llvm.intr.memcpy"(%14, %15, %13) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc12) -// CHECK-NEXT: %16 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%16, %13) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb2 loc(#loc12) +// CHECK-NEXT: %11 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %13 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc13) +// CHECK-NEXT: %14 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc13) +// CHECK-NEXT: "llvm.intr.memcpy"(%14, %15, %13) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc13) +// CHECK-NEXT: %16 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%16, %13) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb2 loc(#loc13) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %17 = arith.cmpi ne, %9, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb27(%0 : i256) loc(#loc12) +// CHECK-NEXT: %17 = arith.cmpi ne, %9, %c0_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb27(%0 : i256) loc(#loc13) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %19 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc12) -// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %18) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc12) -// CHECK-NEXT: %21 = arith.addi %18, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %22 = arith.andi %21, %c-32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %23 = arith.addi %5, %22 : i256 loc(#loc12) -// CHECK-NEXT: %24 = arith.cmpi ugt, %23, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: %25 = arith.cmpi ult, %23, %5 : i256 loc(#loc12) -// CHECK-NEXT: %26 = arith.ori %24, %25 : i1 loc(#loc12) -// CHECK-NEXT: cf.cond_br %26, ^bb4, ^bb5 loc(#loc12) +// CHECK-NEXT: %18 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc13) +// CHECK-NEXT: %19 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc13) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %18) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc13) +// CHECK-NEXT: %21 = arith.addi %18, %c31_i256 : i256 loc(#loc13) +// CHECK-NEXT: %22 = arith.andi %21, %c-32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %23 = arith.addi %5, %22 : i256 loc(#loc13) +// CHECK-NEXT: %24 = arith.cmpi ugt, %23, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: %25 = arith.cmpi ult, %23, %5 : i256 loc(#loc13) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i1 loc(#loc13) +// CHECK-NEXT: cf.cond_br %26, ^bb4, ^bb5 loc(#loc13) // CHECK-NEXT: ^bb4: // pred: ^bb3 -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %28 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%29, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb5 loc(#loc12) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %28 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c65_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%29, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb5 loc(#loc13) // CHECK-NEXT: ^bb5: // 2 preds: ^bb3, ^bb4 -// CHECK-NEXT: %30 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %23, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %31 = arith.addi %5, %18 : i256 loc(#loc12) -// CHECK-NEXT: %32 = arith.cmpi slt, %18, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %32, ^bb6, ^bb7 loc(#loc12) +// CHECK-NEXT: %30 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %23, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %31 = arith.addi %5, %18 : i256 loc(#loc13) +// CHECK-NEXT: %32 = arith.cmpi slt, %18, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %32, ^bb6, ^bb7 loc(#loc13) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%33, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb7 loc(#loc12) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%33, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb7 loc(#loc13) // CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 -// CHECK-NEXT: %34 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %36 = arith.cmpi ugt, %35, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %36, ^bb8, ^bb9 loc(#loc12) +// CHECK-NEXT: %34 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %36 = arith.cmpi ugt, %35, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %36, ^bb8, ^bb9 loc(#loc13) // CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%37, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb9 loc(#loc12) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%37, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb9 loc(#loc13) // CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %38 = arith.addi %5, %35 : i256 loc(#loc12) -// CHECK-NEXT: %39 = arith.addi %38, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %40 = arith.cmpi ugt, %39, %31 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %40, ^bb10, ^bb11 loc(#loc12) +// CHECK-NEXT: %38 = arith.addi %5, %35 : i256 loc(#loc13) +// CHECK-NEXT: %39 = arith.addi %38, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %40 = arith.cmpi ugt, %39, %31 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %40, ^bb10, ^bb11 loc(#loc13) // CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%41, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb11 loc(#loc12) +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%41, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb11 loc(#loc13) // CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 -// CHECK-NEXT: %42 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %43 = llvm.load %42 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %44 = arith.addi %43, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %45 = arith.cmpi ugt, %44, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: %46 = arith.cmpi ult, %44, %43 : i256 loc(#loc12) -// CHECK-NEXT: %47 = arith.ori %45, %46 : i1 loc(#loc12) -// CHECK-NEXT: cf.cond_br %47, ^bb12, ^bb13 loc(#loc12) +// CHECK-NEXT: %42 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %43 = llvm.load %42 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %44 = arith.addi %43, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %45 = arith.cmpi ugt, %44, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: %46 = arith.cmpi ult, %44, %43 : i256 loc(#loc13) +// CHECK-NEXT: %47 = arith.ori %45, %46 : i1 loc(#loc13) +// CHECK-NEXT: cf.cond_br %47, ^bb12, ^bb13 loc(#loc13) // CHECK-NEXT: ^bb12: // pred: ^bb11 -// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %49 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%50, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb13 loc(#loc12) +// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %49 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c65_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%50, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb13 loc(#loc13) // CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 -// CHECK-NEXT: %51 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %44, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %52 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %53 = llvm.load %52 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %54 = arith.cmpi ugt, %53, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %54, ^bb14, ^bb15 loc(#loc12) +// CHECK-NEXT: %51 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %44, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %52 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %53 = llvm.load %52 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %54 = arith.cmpi ugt, %53, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %54, ^bb14, ^bb15 loc(#loc13) // CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%55, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb15 loc(#loc12) +// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%55, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb15 loc(#loc13) // CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %56 = arith.addi %38, %53 : i256 loc(#loc12) -// CHECK-NEXT: %57 = arith.addi %56, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %58 = arith.cmpi sge, %57, %31 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %58, ^bb16, ^bb17 loc(#loc12) +// CHECK-NEXT: %56 = arith.addi %38, %53 : i256 loc(#loc13) +// CHECK-NEXT: %57 = arith.addi %56, %c31_i256 : i256 loc(#loc13) +// CHECK-NEXT: %58 = arith.cmpi sge, %57, %31 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %58, ^bb16, ^bb17 loc(#loc13) // CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%59, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb17 loc(#loc12) +// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%59, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb17 loc(#loc13) // CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %60 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %62 = arith.addi %56, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %63 = arith.muli %61, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %64 = arith.addi %62, %63 : i256 loc(#loc12) -// CHECK-NEXT: %65 = arith.cmpi ugt, %64, %31 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %65, ^bb18, ^bb19 loc(#loc12) +// CHECK-NEXT: %60 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %62 = arith.addi %56, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %63 = arith.muli %61, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %64 = arith.addi %62, %63 : i256 loc(#loc13) +// CHECK-NEXT: %65 = arith.cmpi ugt, %64, %31 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %65, ^bb18, ^bb19 loc(#loc13) // CHECK-NEXT: ^bb18: // pred: ^bb17 -// CHECK-NEXT: %66 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%66, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb19 loc(#loc12) +// CHECK-NEXT: %66 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%66, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb19 loc(#loc13) // CHECK-NEXT: ^bb19: // 2 preds: ^bb17, ^bb18 -// CHECK-NEXT: %67 = arith.muli %61, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %68 = arith.cmpi ugt, %61, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %68, ^bb20, ^bb21 loc(#loc12) +// CHECK-NEXT: %67 = arith.muli %61, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %68 = arith.cmpi ugt, %61, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %68, ^bb20, ^bb21 loc(#loc13) // CHECK-NEXT: ^bb20: // pred: ^bb19 -// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %70 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %71 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%71, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb21 loc(#loc12) +// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %70 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c65_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %71 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%71, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb21 loc(#loc13) // CHECK-NEXT: ^bb21: // 2 preds: ^bb19, ^bb20 -// CHECK-NEXT: %72 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %73 = llvm.load %72 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %74 = arith.addi %67, %c63_i256 : i256 loc(#loc12) -// CHECK-NEXT: %75 = arith.andi %74, %c-32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %76 = arith.addi %73, %75 : i256 loc(#loc12) -// CHECK-NEXT: %77 = arith.cmpi ugt, %76, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: %78 = arith.cmpi ult, %76, %73 : i256 loc(#loc12) -// CHECK-NEXT: %79 = arith.ori %77, %78 : i1 loc(#loc12) -// CHECK-NEXT: cf.cond_br %79, ^bb22, ^bb23 loc(#loc12) +// CHECK-NEXT: %72 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %73 = llvm.load %72 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %74 = arith.addi %67, %c63_i256 : i256 loc(#loc13) +// CHECK-NEXT: %75 = arith.andi %74, %c-32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %76 = arith.addi %73, %75 : i256 loc(#loc13) +// CHECK-NEXT: %77 = arith.cmpi ugt, %76, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: %78 = arith.cmpi ult, %76, %73 : i256 loc(#loc13) +// CHECK-NEXT: %79 = arith.ori %77, %78 : i1 loc(#loc13) +// CHECK-NEXT: cf.cond_br %79, ^bb22, ^bb23 loc(#loc13) // CHECK-NEXT: ^bb22: // pred: ^bb21 -// CHECK-NEXT: %80 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %80 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %81 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %82 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%82, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb23 loc(#loc12) +// CHECK-NEXT: %80 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %80 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %81 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c65_i256, %81 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %82 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%82, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb23 loc(#loc13) // CHECK-NEXT: ^bb23: // 2 preds: ^bb21, ^bb22 -// CHECK-NEXT: %83 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %76, %83 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %84 = llvm.inttoptr %73 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %61, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %85 = arith.addi %73, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb24(%c0_i256, %85, %62 : i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %83 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %76, %83 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %84 = llvm.inttoptr %73 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %61, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %85 = arith.addi %73, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.br ^bb24(%c0_i256, %85, %62 : i256, i256, i256) loc(#loc13) // CHECK-NEXT: ^bb24(%86: i256 loc({{.*}}:31:11), %87: i256 loc({{.*}}:31:11), %88: i256 loc({{.*}}:31:11)): // 2 preds: ^bb23, ^bb25 -// CHECK-NEXT: %89 = arith.cmpi ult, %86, %61 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %89, ^bb25(%86, %87, %88 : i256, i256, i256), ^bb26 loc(#loc12) +// CHECK-NEXT: %89 = arith.cmpi ult, %86, %61 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %89, ^bb25(%86, %87, %88 : i256, i256, i256), ^bb26 loc(#loc13) // CHECK-NEXT: ^bb25(%90: i256 loc({{.*}}:31:11), %91: i256 loc({{.*}}:31:11), %92: i256 loc({{.*}}:31:11)): // pred: ^bb24 -// CHECK-NEXT: %93 = llvm.inttoptr %92 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %94 = llvm.load %93 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %95 = llvm.inttoptr %91 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %94, %95 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %96 = arith.addi %91, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %97 = arith.addi %92, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %98 = arith.addi %90, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb24(%98, %96, %97 : i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %93 = llvm.inttoptr %92 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %94 = llvm.load %93 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %95 = llvm.inttoptr %91 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %94, %95 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %96 = arith.addi %91, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %97 = arith.addi %92, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %98 = arith.addi %90, %c1_i256 : i256 loc(#loc13) +// CHECK-NEXT: cf.br ^bb24(%98, %96, %97 : i256, i256, i256) loc(#loc13) // CHECK-NEXT: ^bb26: // pred: ^bb24 -// CHECK-NEXT: %99 = llvm.inttoptr %43 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %73, %99 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: cf.br ^bb27(%43 : i256) loc(#loc12) +// CHECK-NEXT: %99 = llvm.inttoptr %43 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %73, %99 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: cf.br ^bb27(%43 : i256) loc(#loc13) // CHECK-NEXT: ^bb27(%100: i256 loc({{.*}}:31:11)): // 2 preds: ^bb2, ^bb26 -// CHECK-NEXT: %101 = llvm.inttoptr %100 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %102 = llvm.load %101 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %103 = llvm.inttoptr %102 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %104 = llvm.load %103 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: return %104 : i256 loc(#loc13) -// CHECK-NEXT: } loc(#loc11) +// CHECK-NEXT: %101 = llvm.inttoptr %100 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %102 = llvm.load %101 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %103 = llvm.inttoptr %102 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %104 = llvm.load %103 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: return %104 : i256 loc(#loc14) +// CHECK-NEXT: } loc(#loc12) // CHECK-NEXT: func.func @hStruct_71() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c96_i256 = arith.constant 96 : i256 loc(#loc) @@ -1088,33 +1123,33 @@ contract C { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc15) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc15) -// CHECK-NEXT: %1 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc15) -// CHECK-NEXT: %3 = arith.addi %2, %c32_i256 : i256 loc(#loc15) -// CHECK-NEXT: %4 = arith.cmpi ugt, %3, %c18446744073709551615_i256 : i256 loc(#loc15) -// CHECK-NEXT: %5 = arith.cmpi ult, %3, %2 : i256 loc(#loc15) -// CHECK-NEXT: %6 = arith.ori %4, %5 : i1 loc(#loc15) -// CHECK-NEXT: cf.cond_br %6, ^bb1, ^bb2 loc(#loc15) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc16) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc16) +// CHECK-NEXT: %1 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) +// CHECK-NEXT: %3 = arith.addi %2, %c32_i256 : i256 loc(#loc16) +// CHECK-NEXT: %4 = arith.cmpi ugt, %3, %c18446744073709551615_i256 : i256 loc(#loc16) +// CHECK-NEXT: %5 = arith.cmpi ult, %3, %2 : i256 loc(#loc16) +// CHECK-NEXT: %6 = arith.ori %4, %5 : i1 loc(#loc16) +// CHECK-NEXT: cf.cond_br %6, ^bb1, ^bb2 loc(#loc16) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: %8 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: llvm.store %c65_i256, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: %9 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: "llvm.intrcall"(%9, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc15) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc15) -// CHECK-NEXT: cf.br ^bb2 loc(#loc15) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %8 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c65_i256, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %9 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: "llvm.intrcall"(%9, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) +// CHECK-NEXT: cf.br ^bb2 loc(#loc16) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %10 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: llvm.store %3, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: %11 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: llvm.store %c96_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) -// CHECK-NEXT: llvm.store %2, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc15) -// CHECK-NEXT: %12 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc16) -// CHECK-NEXT: return %12 : i256 loc(#loc17) -// CHECK-NEXT: } loc(#loc14) +// CHECK-NEXT: %10 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %3, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %11 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c96_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %2, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc16) +// CHECK-NEXT: %12 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc17) +// CHECK-NEXT: return %12 : i256 loc(#loc18) +// CHECK-NEXT: } loc(#loc15) // CHECK-NEXT: func.func @iStorage_54() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) // CHECK-NEXT: %c68_i256 = arith.constant 68 : i256 loc(#loc) @@ -1124,7 +1159,6 @@ contract C { // CHECK-NEXT: %0 = llvm.mlir.undef : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) @@ -1135,206 +1169,179 @@ contract C { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc19) -// CHECK-NEXT: %2 = "llvm.intrcall"() <{id = 4055 : i32, name = "evm.gas"}> : () -> i256 loc(#loc19) -// CHECK-NEXT: %3 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) -// CHECK-NEXT: %4 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc19) -// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c-4739530397020921969182596235933254962872094691392422242198626966332241870848_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %7 = arith.addi %5, %c4_i256 : i256 loc(#loc19) -// CHECK-NEXT: %8 = arith.addi %5, %c36_i256 : i256 loc(#loc19) -// CHECK-NEXT: %9 = arith.subi %8, %7 : i256 loc(#loc19) -// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %11 = arith.addi %5, %c68_i256 : i256 loc(#loc19) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %14 = arith.shrui %13, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %15 = arith.andi %13, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %16 = arith.cmpi eq, %15, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: %17 = arith.andi %14, %c127_i256 : i256 loc(#loc19) -// CHECK-NEXT: %18 = arith.select %16, %17, %14 : i256 loc(#loc19) -// CHECK-NEXT: %19 = arith.cmpi ult, %18, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %20 = arith.extui %19 : i1 to i256 loc(#loc19) -// CHECK-NEXT: %21 = arith.cmpi eq, %15, %20 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %21, ^bb1, ^bb2 loc(#loc19) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc2) +// CHECK-NEXT: %2 = "llvm.intrcall"() <{id = 4055 : i32, name = "evm.gas"}> : () -> i256 loc(#loc2) +// CHECK-NEXT: %3 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c-4739530397020921969182596235933254962872094691392422242198626966332241870848_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %7 = arith.addi %5, %c4_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.addi %5, %c36_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.subi %8, %7 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %5, %c68_i256 : i256 loc(#loc2) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %14 = arith.shrui %13, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %15 = arith.andi %13, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = arith.cmpi eq, %15, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %17 = arith.andi %14, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.select %16, %17, %14 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.cmpi ult, %18, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.extui %19 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.cmpi eq, %15, %20 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %21, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %23 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c34_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%24, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb2 loc(#loc19) +// CHECK-NEXT: %22 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %23 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%24, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %25 = arith.andi %13, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %26 = arith.cmpi eq, %25, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %26, ^bb6, ^bb3 loc(#loc19) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %13, %18, %11) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %25 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %18, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %26 = arith.addi %18, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %27 = arith.andi %26, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %28 = arith.addi %11, %27 : i256 loc(#loc2) +// CHECK-NEXT: %29 = arith.subi %28, %5 : i256 loc(#loc2) +// CHECK-NEXT: %30 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %31 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %32 = "llvm.intrcall"(%2, %3, %30, %29, %31, %c0_i256) <{id = 4090 : i32, name = "evm.staticcall"}> : (i256, i256, !llvm.ptr<1>, i256, !llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %33 = arith.cmpi eq, %32, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %33, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb4(%30: i256 loc({{.*}}:18:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %31 = arith.cmpi ult, %30, %18 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %31, ^bb5(%30 : i256), ^bb7 loc(#loc19) -// CHECK-NEXT: ^bb5(%32: i256 loc({{.*}}:18:11)): // pred: ^bb4 -// CHECK-NEXT: %33 = arith.divui %32, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %34 = arith.addi %29, %33 : i256 loc(#loc19) -// CHECK-NEXT: %35 = llvm.inttoptr %34 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %36 = llvm.load %35 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %37 = arith.addi %11, %32 : i256 loc(#loc19) -// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %36, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %39 = arith.addi %32, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb4(%39 : i256) loc(#loc19) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %40 = arith.andi %13, %c-256_i256 : i256 loc(#loc19) -// CHECK-NEXT: %41 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %40, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: cf.br ^bb7 loc(#loc19) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %42 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %18, %42 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %43 = arith.addi %18, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %44 = arith.andi %43, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %45 = arith.addi %11, %44 : i256 loc(#loc19) -// CHECK-NEXT: %46 = arith.subi %45, %5 : i256 loc(#loc19) -// CHECK-NEXT: %47 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %48 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %49 = "llvm.intrcall"(%2, %3, %47, %46, %48, %c0_i256) <{id = 4090 : i32, name = "evm.staticcall"}> : (i256, i256, !llvm.ptr<1>, i256, !llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %50 = arith.cmpi eq, %49, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %50, ^bb8, ^bb9 loc(#loc19) +// CHECK-NEXT: %34 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %36 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc2) +// CHECK-NEXT: %37 = llvm.inttoptr %35 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc2) +// CHECK-NEXT: "llvm.intr.memcpy"(%37, %38, %36) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc2) +// CHECK-NEXT: %39 = llvm.inttoptr %35 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%39, %36) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %40 = arith.cmpi ne, %32, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %40, ^bb5, ^bb20(%0 : i256) loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %41 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc2) +// CHECK-NEXT: %42 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %43 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc2) +// CHECK-NEXT: "llvm.intr.memcpy"(%42, %43, %41) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc2) +// CHECK-NEXT: %44 = arith.addi %41, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %45 = arith.andi %44, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %46 = arith.addi %5, %45 : i256 loc(#loc2) +// CHECK-NEXT: %47 = arith.cmpi ugt, %46, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %48 = arith.cmpi ult, %46, %5 : i256 loc(#loc2) +// CHECK-NEXT: %49 = arith.ori %47, %48 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %49, ^bb6, ^bb7 loc(#loc2) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %51 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%52, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb7 loc(#loc2) +// CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 +// CHECK-NEXT: %53 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %46, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %54 = arith.addi %5, %41 : i256 loc(#loc2) +// CHECK-NEXT: %55 = arith.cmpi slt, %41, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %55, ^bb8, ^bb9 loc(#loc2) // CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %51 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %52 = llvm.load %51 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc19) -// CHECK-NEXT: %53 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc19) -// CHECK-NEXT: %54 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc19) -// CHECK-NEXT: "llvm.intr.memcpy"(%54, %55, %53) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc19) -// CHECK-NEXT: %56 = llvm.inttoptr %52 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%56, %53) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb9 loc(#loc19) +// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%56, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb9 loc(#loc2) // CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %57 = arith.cmpi ne, %49, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %57, ^bb10, ^bb25(%0 : i256) loc(#loc19) +// CHECK-NEXT: %57 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %58 = llvm.load %57 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %59 = arith.cmpi ugt, %58, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %59, ^bb10, ^bb11 loc(#loc2) // CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %58 = "llvm.intrcall"() <{id = 4079 : i32, name = "evm.returndatasize"}> : () -> i256 loc(#loc19) -// CHECK-NEXT: %59 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %60 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<3> loc(#loc19) -// CHECK-NEXT: "llvm.intr.memcpy"(%59, %60, %58) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<3>, i256) -> () loc(#loc19) -// CHECK-NEXT: %61 = arith.addi %58, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %62 = arith.andi %61, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %63 = arith.addi %5, %62 : i256 loc(#loc19) -// CHECK-NEXT: %64 = arith.cmpi ugt, %63, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: %65 = arith.cmpi ult, %63, %5 : i256 loc(#loc19) -// CHECK-NEXT: %66 = arith.ori %64, %65 : i1 loc(#loc19) -// CHECK-NEXT: cf.cond_br %66, ^bb11, ^bb12 loc(#loc19) -// CHECK-NEXT: ^bb11: // pred: ^bb10 -// CHECK-NEXT: %67 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %67 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %68 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %68 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%69, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb12 loc(#loc19) -// CHECK-NEXT: ^bb12: // 2 preds: ^bb10, ^bb11 -// CHECK-NEXT: %70 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %63, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %71 = arith.addi %5, %58 : i256 loc(#loc19) -// CHECK-NEXT: %72 = arith.cmpi slt, %58, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %72, ^bb13, ^bb14 loc(#loc19) -// CHECK-NEXT: ^bb13: // pred: ^bb12 -// CHECK-NEXT: %73 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%73, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb14 loc(#loc19) -// CHECK-NEXT: ^bb14: // 2 preds: ^bb12, ^bb13 -// CHECK-NEXT: %74 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %75 = llvm.load %74 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc19) -// CHECK-NEXT: %76 = arith.cmpi ugt, %75, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %76, ^bb15, ^bb16 loc(#loc19) -// CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%77, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb16 loc(#loc19) -// CHECK-NEXT: ^bb16: // 2 preds: ^bb14, ^bb15 -// CHECK-NEXT: %78 = arith.addi %5, %75 : i256 loc(#loc19) -// CHECK-NEXT: %79 = arith.addi %78, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %80 = arith.cmpi sge, %79, %71 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %80, ^bb17, ^bb18 loc(#loc19) -// CHECK-NEXT: ^bb17: // pred: ^bb16 -// CHECK-NEXT: %81 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%81, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb18 loc(#loc19) -// CHECK-NEXT: ^bb18: // 2 preds: ^bb16, ^bb17 -// CHECK-NEXT: %82 = llvm.inttoptr %78 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %83 = llvm.load %82 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc19) -// CHECK-NEXT: %84 = arith.addi %78, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %85 = arith.addi %84, %83 : i256 loc(#loc19) -// CHECK-NEXT: %86 = arith.cmpi ugt, %85, %71 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %86, ^bb19, ^bb20 loc(#loc19) -// CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%87, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb20 loc(#loc19) -// CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// CHECK-NEXT: %88 = arith.addi %83, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %89 = arith.andi %88, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %90 = arith.cmpi ugt, %83, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %90, ^bb21, ^bb22 loc(#loc19) -// CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %91 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %91 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %92 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %92 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %93 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%93, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb22 loc(#loc19) -// CHECK-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// CHECK-NEXT: %94 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %95 = llvm.load %94 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc19) -// CHECK-NEXT: %96 = arith.addi %89, %c63_i256 : i256 loc(#loc19) -// CHECK-NEXT: %97 = arith.andi %96, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %98 = arith.addi %95, %97 : i256 loc(#loc19) -// CHECK-NEXT: %99 = arith.cmpi ugt, %98, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: %100 = arith.cmpi ult, %98, %95 : i256 loc(#loc19) -// CHECK-NEXT: %101 = arith.ori %99, %100 : i1 loc(#loc19) -// CHECK-NEXT: cf.cond_br %101, ^bb23, ^bb24 loc(#loc19) -// CHECK-NEXT: ^bb23: // pred: ^bb22 -// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %102 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %103 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %104 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%104, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb24 loc(#loc19) -// CHECK-NEXT: ^bb24: // 2 preds: ^bb22, ^bb23 -// CHECK-NEXT: %105 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %98, %105 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %106 = llvm.inttoptr %95 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %83, %106 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %107 = arith.addi %95, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %108 = llvm.inttoptr %107 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %109 = llvm.inttoptr %84 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intr.memmove"(%108, %109, %83) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: %110 = arith.addi %107, %83 : i256 loc(#loc19) -// CHECK-NEXT: %111 = llvm.inttoptr %110 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: cf.br ^bb25(%95 : i256) loc(#loc19) -// CHECK-NEXT: ^bb25(%112: i256 loc({{.*}}:18:11)): // 2 preds: ^bb9, ^bb24 -// CHECK-NEXT: return %112 : i256 loc(#loc20) -// CHECK-NEXT: } loc(#loc18) +// CHECK-NEXT: %60 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%60, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %61 = arith.addi %5, %58 : i256 loc(#loc2) +// CHECK-NEXT: %62 = arith.addi %61, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %63 = arith.cmpi sge, %62, %54 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %63, ^bb12, ^bb13 loc(#loc2) +// CHECK-NEXT: ^bb12: // pred: ^bb11 +// CHECK-NEXT: %64 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%64, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb13 loc(#loc2) +// CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 +// CHECK-NEXT: %65 = llvm.inttoptr %61 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %66 = llvm.load %65 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %67 = arith.addi %61, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %68 = arith.addi %67, %66 : i256 loc(#loc2) +// CHECK-NEXT: %69 = arith.cmpi ugt, %68, %54 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %69, ^bb14, ^bb15 loc(#loc2) +// CHECK-NEXT: ^bb14: // pred: ^bb13 +// CHECK-NEXT: %70 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%70, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb15 loc(#loc2) +// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 +// CHECK-NEXT: %71 = arith.addi %66, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %72 = arith.andi %71, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %73 = arith.cmpi ugt, %66, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %73, ^bb16, ^bb17 loc(#loc2) +// CHECK-NEXT: ^bb16: // pred: ^bb15 +// CHECK-NEXT: %74 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %74 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %75 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%76, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb17 loc(#loc2) +// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 +// CHECK-NEXT: %77 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %78 = llvm.load %77 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %79 = arith.addi %72, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %80 = arith.andi %79, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %81 = arith.addi %78, %80 : i256 loc(#loc2) +// CHECK-NEXT: %82 = arith.cmpi ugt, %81, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %83 = arith.cmpi ult, %81, %78 : i256 loc(#loc2) +// CHECK-NEXT: %84 = arith.ori %82, %83 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %84, ^bb18, ^bb19 loc(#loc2) +// CHECK-NEXT: ^bb18: // pred: ^bb17 +// CHECK-NEXT: %85 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %85 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %86 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%87, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb19 loc(#loc2) +// CHECK-NEXT: ^bb19: // 2 preds: ^bb17, ^bb18 +// CHECK-NEXT: %88 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %81, %88 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %89 = llvm.inttoptr %78 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %66, %89 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %90 = arith.addi %78, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %91 = llvm.inttoptr %90 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %92 = llvm.inttoptr %67 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intr.memmove"(%91, %92, %66) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: %93 = arith.addi %90, %66 : i256 loc(#loc2) +// CHECK-NEXT: %94 = llvm.inttoptr %93 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %94 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb20(%78 : i256) loc(#loc2) +// CHECK-NEXT: ^bb20(%95: i256 loc({{.*}}:18:11)): // 2 preds: ^bb4, ^bb19 +// CHECK-NEXT: return %95 : i256 loc(#loc20) +// CHECK-NEXT: } loc(#loc19) // CHECK-NEXT: func.func @hStorage_43(%arg0: !llvm.struct<(i256, i256)> loc({{.*}}:13:20)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c96_i256 = arith.constant 96 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) @@ -1675,19 +1682,19 @@ contract C { // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) -// CHECK-NEXT: #loc2 = loc({{.*}}:38:2) -// CHECK-NEXT: #loc5 = loc({{.*}}:39:29) -// CHECK-NEXT: #loc6 = loc({{.*}}:39:4) -// CHECK-NEXT: #loc7 = loc({{.*}}:34:2) -// CHECK-NEXT: #loc9 = loc({{.*}}:35:11) -// CHECK-NEXT: #loc10 = loc({{.*}}:35:4) -// CHECK-NEXT: #loc11 = loc({{.*}}:30:2) -// CHECK-NEXT: #loc13 = loc({{.*}}:31:4) -// CHECK-NEXT: #loc14 = loc({{.*}}:25:2) -// CHECK-NEXT: #loc15 = loc({{.*}}:26:4) -// CHECK-NEXT: #loc16 = loc({{.*}}:27:11) -// CHECK-NEXT: #loc17 = loc({{.*}}:27:4) -// CHECK-NEXT: #loc18 = loc({{.*}}:17:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:38:2) +// CHECK-NEXT: #loc6 = loc({{.*}}:39:29) +// CHECK-NEXT: #loc7 = loc({{.*}}:39:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:34:2) +// CHECK-NEXT: #loc10 = loc({{.*}}:35:11) +// CHECK-NEXT: #loc11 = loc({{.*}}:35:4) +// CHECK-NEXT: #loc12 = loc({{.*}}:30:2) +// CHECK-NEXT: #loc14 = loc({{.*}}:31:4) +// CHECK-NEXT: #loc15 = loc({{.*}}:25:2) +// CHECK-NEXT: #loc16 = loc({{.*}}:26:4) +// CHECK-NEXT: #loc17 = loc({{.*}}:27:11) +// CHECK-NEXT: #loc18 = loc({{.*}}:27:4) +// CHECK-NEXT: #loc19 = loc({{.*}}:17:2) // CHECK-NEXT: #loc20 = loc({{.*}}:18:4) // CHECK-NEXT: #loc21 = loc({{.*}}:13:2) // CHECK-NEXT: #loc23 = loc({{.*}}:14:22) diff --git a/test/lit/mlirCodegen/EVM/free-function-recursive-struct.sol b/test/lit/mlirCodegen/EVM/free-function-recursive-struct.sol new file mode 100644 index 000000000..c58a22fb2 --- /dev/null +++ b/test/lit/mlirCodegen/EVM/free-function-recursive-struct.sol @@ -0,0 +1,129 @@ +// RUN: solc --mlir-action=print-std-mlir --mlir-target=evm --mmlir --mlir-print-debuginfo %s | FileCheck %s +pragma solidity ^0.8.0; + +struct S { + uint256 a; + S[] b; +} + +function firstChildValue(S storage s) view returns (uint256) { + S memory m = s; + return m.a; +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc1 = loc({{.*}}:9:15) +// CHECK-NEXT: #loc3 = loc({{.*}}:8:25) +// CHECK-NEXT: module attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @firstChildValue_25(%arg0: i256 loc({{.*}}:8:25)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc1) +// CHECK-NEXT: %2 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc4) +// CHECK-NEXT: %3 = call @__sol.copy.storage.memory.S_8(%1) : (i256) -> i256 loc(#loc1) +// CHECK-NEXT: llvm.store %3, %2 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc4) +// CHECK-NEXT: %4 = llvm.load %2 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc5) +// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %6 = llvm.load %5 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: return %6 : i256 loc(#loc6) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy.storage.memory.S_8(%arg0: i256 loc({{.*}}:9:15)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.addi %1, %c64_i256 : i256 loc(#loc1) +// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %10 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<5> loc(#loc1) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc1) +// CHECK-NEXT: %12 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %13 = arith.addi %1, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.addi %arg0, %c1_i256 : i256 loc(#loc1) +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc1) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc1) +// CHECK-NEXT: %17 = arith.muli %16, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %20 = arith.addi %17, %c63_i256 : i256 loc(#loc1) +// CHECK-NEXT: %21 = arith.andi %20, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %22 = arith.addi %19, %21 : i256 loc(#loc1) +// CHECK-NEXT: %23 = arith.cmpi ugt, %22, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %24 = arith.cmpi ult, %22, %19 : i256 loc(#loc1) +// CHECK-NEXT: %25 = arith.ori %23, %24 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %25, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%28, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %29 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %22, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %30 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %16, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %31 = arith.addi %19, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %14, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc1) +// CHECK-NEXT: cf.br ^bb5(%c0_i256 : i256) loc(#loc1) +// CHECK-NEXT: ^bb5(%35: i256 loc({{.*}}:9:15)): // 2 preds: ^bb4, ^bb6 +// CHECK-NEXT: %36 = arith.cmpi ult, %35, %16 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %36, ^bb6(%35 : i256), ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb6(%37: i256 loc({{.*}}:9:15)): // pred: ^bb5 +// CHECK-NEXT: %38 = arith.muli %37, %c2_i256 : i256 loc(#loc1) +// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc1) +// CHECK-NEXT: %40 = arith.muli %37, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %41 = arith.addi %31, %40 : i256 loc(#loc1) +// CHECK-NEXT: %42 = call @__sol.copy.storage.memory.S_8(%39) : (i256) -> i256 loc(#loc1) +// CHECK-NEXT: %43 = llvm.inttoptr %41 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %42, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %44 = arith.addi %37, %c1_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.br ^bb5(%44 : i256) loc(#loc1) +// CHECK-NEXT: ^bb7: // pred: ^bb5 +// CHECK-NEXT: %45 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %19, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: return %1 : i256 loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc2 = loc({{.*}}:8:0) +// CHECK-NEXT: #loc4 = loc({{.*}}:9:2) +// CHECK-NEXT: #loc5 = loc({{.*}}:10:9) +// CHECK-NEXT: #loc6 = loc({{.*}}:10:2) +// CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/getter-mapping-struct.sol b/test/lit/mlirCodegen/EVM/getter-mapping-struct.sol index cbf711876..5d42de8b5 100644 --- a/test/lit/mlirCodegen/EVM/getter-mapping-struct.sol +++ b/test/lit/mlirCodegen/EVM/getter-mapping-struct.sol @@ -31,23 +31,23 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:28:28) -// CHECK-NEXT: #loc5 = loc({{.*}}:28:50) -// CHECK-NEXT: #loc8 = loc({{.*}}:27:18) -// CHECK-NEXT: #loc9 = loc({{.*}}:27:31) -// CHECK-NEXT: #loc14 = loc({{.*}}:26:20) -// CHECK-NEXT: #loc15 = loc({{.*}}:26:33) -// CHECK-NEXT: #loc20 = loc({{.*}}:25:21) -// CHECK-NEXT: #loc21 = loc({{.*}}:25:34) -// CHECK-NEXT: #loc26 = loc({{.*}}:24:21) -// CHECK-NEXT: #loc27 = loc({{.*}}:24:34) -// CHECK-NEXT: #loc32 = loc({{.*}}:23:22) -// CHECK-NEXT: #loc33 = loc({{.*}}:23:35) -// CHECK-NEXT: #loc38 = loc({{.*}}:22:24) -// CHECK-NEXT: #loc39 = loc({{.*}}:22:37) -// CHECK-NEXT: #loc44 = loc({{.*}}:21:18) -// CHECK-NEXT: #loc45 = loc({{.*}}:21:31) -// CHECK-NEXT: #loc49 = loc({{.*}}:19:4) +// CHECK-NEXT: #loc2 = loc({{.*}}:28:50) +// CHECK-NEXT: #loc3 = loc({{.*}}:19:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:28:28) +// CHECK-NEXT: #loc9 = loc({{.*}}:27:18) +// CHECK-NEXT: #loc10 = loc({{.*}}:27:31) +// CHECK-NEXT: #loc15 = loc({{.*}}:26:20) +// CHECK-NEXT: #loc16 = loc({{.*}}:26:33) +// CHECK-NEXT: #loc21 = loc({{.*}}:25:21) +// CHECK-NEXT: #loc22 = loc({{.*}}:25:34) +// CHECK-NEXT: #loc27 = loc({{.*}}:24:21) +// CHECK-NEXT: #loc28 = loc({{.*}}:24:34) +// CHECK-NEXT: #loc33 = loc({{.*}}:23:22) +// CHECK-NEXT: #loc34 = loc({{.*}}:23:35) +// CHECK-NEXT: #loc39 = loc({{.*}}:22:24) +// CHECK-NEXT: #loc40 = loc({{.*}}:22:37) +// CHECK-NEXT: #loc45 = loc({{.*}}:21:18) +// CHECK-NEXT: #loc46 = loc({{.*}}:21:31) // CHECK-NEXT: module @C_151 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -523,223 +523,276 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) -// CHECK-NEXT: func.func @setStringHello_150(%arg0: i256 loc({{.*}}:28:28)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:28:50), %arg1: i256 loc({{.*}}:28:50), %arg2: i256 loc({{.*}}:28:50)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:28:50)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:28:50)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:28:50), %arg1: i256 loc({{.*}}:28:50)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) // CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc2) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc2) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc2) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:28:50)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc2) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:28:50)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc2) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc2) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc2) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc2) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc2) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc2) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc2) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc2) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:19:4), %arg1: i256 loc({{.*}}:19:4), %arg2: i256 loc({{.*}}:19:4), %arg3: i256 loc({{.*}}:19:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc3) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:19:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc3) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:19:4)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc3) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc3) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: cf.br ^bb5 loc(#loc3) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @setStringHello_150(%arg0: i256 loc({{.*}}:28:28)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c47219736118171679016481614208494153725245902603978864281390662590579859259392_i256 = arith.constant 47219736118171679016481614208494153725245902603978864281390662590579859259392 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc4) -// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %1, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %3 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %5 = "llvm.intrcall"(%4, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %6 = arith.addi %5, %c5_i256 : i256 loc(#loc5) -// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %9 = arith.addi %8, %c64_i256 : i256 loc(#loc6) -// CHECK-NEXT: %10 = arith.cmpi ugt, %9, %c18446744073709551615_i256 : i256 loc(#loc6) -// CHECK-NEXT: %11 = arith.cmpi ult, %9, %8 : i256 loc(#loc6) -// CHECK-NEXT: %12 = arith.ori %10, %11 : i1 loc(#loc6) -// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc6) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc5) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc5) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc5) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %5 = "llvm.intrcall"(%4, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %5, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) +// CHECK-NEXT: %9 = arith.addi %8, %c64_i256 : i256 loc(#loc7) +// CHECK-NEXT: %10 = arith.cmpi ugt, %9, %c18446744073709551615_i256 : i256 loc(#loc7) +// CHECK-NEXT: %11 = arith.cmpi ult, %9, %8 : i256 loc(#loc7) +// CHECK-NEXT: %12 = arith.ori %10, %11 : i1 loc(#loc7) +// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc7) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c65_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) -// CHECK-NEXT: cf.br ^bb2 loc(#loc6) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c65_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) +// CHECK-NEXT: cf.br ^bb2 loc(#loc7) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %16 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %9, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %17 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c5_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %18 = arith.addi %8, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c47219736118171679016481614208494153725245902603978864281390662590579859259392_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %20 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %22 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %24 = arith.shrui %23, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %25 = arith.andi %23, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %26 = arith.cmpi eq, %25, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: %27 = arith.andi %24, %c127_i256 : i256 loc(#loc5) -// CHECK-NEXT: %28 = arith.select %26, %27, %24 : i256 loc(#loc5) -// CHECK-NEXT: %29 = arith.cmpi ult, %28, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %30 = arith.extui %29 : i1 to i256 loc(#loc5) -// CHECK-NEXT: %31 = arith.cmpi eq, %25, %30 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %31, ^bb3, ^bb4 loc(#loc5) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %33 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c34_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%34, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb4 loc(#loc5) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %35 = arith.cmpi ugt, %28, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %35, ^bb5, ^bb8 loc(#loc5) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %6, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %38 = "llvm.intrcall"(%37, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %39 = arith.addi %21, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %40 = arith.divui %39, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %41 = arith.addi %38, %40 : i256 loc(#loc5) -// CHECK-NEXT: %42 = arith.cmpi ult, %21, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %43 = arith.select %42, %38, %41 : i256 loc(#loc5) -// CHECK-NEXT: %44 = arith.addi %28, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %45 = arith.divui %44, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %46 = arith.addi %38, %45 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb6(%43 : i256) loc(#loc5) -// CHECK-NEXT: ^bb6(%47: i256 loc({{.*}}:28:50)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %48 = arith.cmpi ult, %47, %46 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %48, ^bb7(%47 : i256), ^bb8 loc(#loc5) -// CHECK-NEXT: ^bb7(%49: i256 loc({{.*}}:28:50)): // pred: ^bb6 -// CHECK-NEXT: %50 = llvm.inttoptr %49 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %51 = arith.addi %49, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb6(%51 : i256) loc(#loc5) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %52 = arith.cmpi ugt, %21, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %52, ^bb12, ^bb9 loc(#loc5) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %53 = arith.cmpi ne, %21, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %53, ^bb11, ^bb10 loc(#loc5) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %54 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb18 loc(#loc5) -// CHECK-NEXT: ^bb11: // pred: ^bb9 -// CHECK-NEXT: %55 = arith.addi %8, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %56 = llvm.inttoptr %55 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %58 = arith.muli %21, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %59 = arith.subi %c256_i256, %58 : i256 loc(#loc5) -// CHECK-NEXT: %60 = arith.shli %c-1_i256, %59 : i256 loc(#loc5) -// CHECK-NEXT: %61 = arith.andi %57, %60 : i256 loc(#loc5) -// CHECK-NEXT: %62 = arith.muli %21, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %63 = arith.ori %61, %62 : i256 loc(#loc5) -// CHECK-NEXT: %64 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %63, %64 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb18 loc(#loc5) -// CHECK-NEXT: ^bb12: // pred: ^bb8 -// CHECK-NEXT: %65 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %6, %65 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %66 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %67 = "llvm.intrcall"(%66, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %68 = arith.addi %8, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %69 = arith.andi %21, %c-32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc5) -// CHECK-NEXT: ^bb13(%70: i256 loc({{.*}}:28:50)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %71 = arith.cmpi ult, %70, %69 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %71, ^bb14(%70 : i256), ^bb15 loc(#loc5) -// CHECK-NEXT: ^bb14(%72: i256 loc({{.*}}:28:50)): // pred: ^bb13 -// CHECK-NEXT: %73 = arith.divui %72, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %74 = arith.addi %68, %72 : i256 loc(#loc5) -// CHECK-NEXT: %75 = llvm.inttoptr %74 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %76 = llvm.load %75 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %77 = arith.addi %67, %73 : i256 loc(#loc5) -// CHECK-NEXT: %78 = llvm.inttoptr %77 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %76, %78 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %79 = arith.addi %72, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb13(%79 : i256) loc(#loc5) -// CHECK-NEXT: ^bb15: // pred: ^bb13 -// CHECK-NEXT: %80 = arith.cmpi ult, %69, %21 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %80, ^bb16, ^bb17 loc(#loc5) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %81 = arith.andi %21, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %82 = arith.divui %69, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %83 = arith.addi %68, %69 : i256 loc(#loc5) -// CHECK-NEXT: %84 = llvm.inttoptr %83 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %85 = llvm.load %84 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %86 = arith.muli %81, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %87 = arith.subi %c256_i256, %86 : i256 loc(#loc5) -// CHECK-NEXT: %88 = arith.shli %c-1_i256, %87 : i256 loc(#loc5) -// CHECK-NEXT: %89 = arith.andi %85, %88 : i256 loc(#loc5) -// CHECK-NEXT: %90 = arith.addi %67, %82 : i256 loc(#loc5) -// CHECK-NEXT: %91 = llvm.inttoptr %90 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %89, %91 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb17 loc(#loc5) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %92 = arith.muli %21, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %93 = arith.ori %92, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %94 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %93, %94 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb18 loc(#loc5) -// CHECK-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 -// CHECK-NEXT: return loc(#loc2) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %9, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %17 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c5_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %18 = arith.addi %8, %c32_i256 : i256 loc(#loc7) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c47219736118171679016481614208494153725245902603978864281390662590579859259392_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%8, %6) : (i256, i256) -> () loc(#loc2) +// CHECK-NEXT: return loc(#loc4) +// CHECK-NEXT: } loc(#loc4) // CHECK-NEXT: func.func @setB_137(%arg0: i256 loc({{.*}}:27:18), %arg1: i256 loc({{.*}}:27:31)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c9_i256 = arith.constant 9 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc8) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc8) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc9) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc9) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc10) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc11) -// CHECK-NEXT: %7 = arith.addi %6, %c9_i256 : i256 loc(#loc11) -// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc12) -// CHECK-NEXT: %9 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: return loc(#loc7) -// CHECK-NEXT: } loc(#loc7) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc9) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc9) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc10) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc10) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc11) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) +// CHECK-NEXT: %7 = arith.addi %6, %c9_i256 : i256 loc(#loc12) +// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc13) +// CHECK-NEXT: %9 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: return loc(#loc8) +// CHECK-NEXT: } loc(#loc8) // CHECK-NEXT: func.func @setB32_122(%arg0: i256 loc({{.*}}:26:20), %arg1: i256 loc({{.*}}:26:33)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc14) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc14) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc15) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc15) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc16) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc17) -// CHECK-NEXT: %7 = arith.addi %6, %c3_i256 : i256 loc(#loc17) -// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc18) -// CHECK-NEXT: %9 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: return loc(#loc13) -// CHECK-NEXT: } loc(#loc13) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc15) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc15) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc16) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc16) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc17) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc18) +// CHECK-NEXT: %7 = arith.addi %6, %c3_i256 : i256 loc(#loc18) +// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc19) +// CHECK-NEXT: %9 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: return loc(#loc14) +// CHECK-NEXT: } loc(#loc14) // CHECK-NEXT: func.func @setAddr_107(%arg0: i256 loc({{.*}}:25:21), %arg1: i256 loc({{.*}}:25:34)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-95780971304118053647396689196894323976171195136409601_i256 = arith.constant -95780971304118053647396689196894323976171195136409601 : i256 loc(#loc) // CHECK-NEXT: %c16_i256 = arith.constant 16 : i256 loc(#loc) @@ -749,29 +802,29 @@ contract C { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc20) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc20) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc21) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc21) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc22) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc23) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc23) -// CHECK-NEXT: %7 = arith.addi %6, %c2_i256 : i256 loc(#loc23) -// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc24) -// CHECK-NEXT: %9 = arith.andi %8, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc23) -// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc23) -// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc23) -// CHECK-NEXT: %12 = arith.andi %11, %c-95780971304118053647396689196894323976171195136409601_i256 : i256 loc(#loc23) -// CHECK-NEXT: %13 = arith.shli %9, %c16_i256 : i256 loc(#loc23) -// CHECK-NEXT: %14 = arith.ori %12, %13 : i256 loc(#loc23) -// CHECK-NEXT: %15 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc23) -// CHECK-NEXT: llvm.store %14, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc23) -// CHECK-NEXT: return loc(#loc19) -// CHECK-NEXT: } loc(#loc19) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc21) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc21) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc22) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc22) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc23) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc24) +// CHECK-NEXT: %7 = arith.addi %6, %c2_i256 : i256 loc(#loc24) +// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc25) +// CHECK-NEXT: %9 = arith.andi %8, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc24) +// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc24) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc24) +// CHECK-NEXT: %12 = arith.andi %11, %c-95780971304118053647396689196894323976171195136409601_i256 : i256 loc(#loc24) +// CHECK-NEXT: %13 = arith.shli %9, %c16_i256 : i256 loc(#loc24) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i256 loc(#loc24) +// CHECK-NEXT: %15 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc24) +// CHECK-NEXT: llvm.store %14, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) +// CHECK-NEXT: return loc(#loc20) +// CHECK-NEXT: } loc(#loc20) // CHECK-NEXT: func.func @setFlag_92(%arg0: i256 loc({{.*}}:24:21), %arg1: i256 loc({{.*}}:24:34)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-65281_i256 = arith.constant -65281 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) @@ -780,30 +833,30 @@ contract C { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc26) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc26) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc27) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc27) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc28) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc29) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc29) -// CHECK-NEXT: %7 = arith.addi %6, %c2_i256 : i256 loc(#loc29) -// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc30) -// CHECK-NEXT: %9 = arith.cmpi ne, %8, %c0_i256 : i256 loc(#loc29) -// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc29) -// CHECK-NEXT: %11 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc29) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc29) -// CHECK-NEXT: %13 = arith.andi %12, %c-65281_i256 : i256 loc(#loc29) -// CHECK-NEXT: %14 = arith.shli %10, %c8_i256 : i256 loc(#loc29) -// CHECK-NEXT: %15 = arith.ori %13, %14 : i256 loc(#loc29) -// CHECK-NEXT: %16 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc29) -// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc29) -// CHECK-NEXT: return loc(#loc25) -// CHECK-NEXT: } loc(#loc25) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc27) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc27) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc28) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc28) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc29) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc30) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc30) +// CHECK-NEXT: %7 = arith.addi %6, %c2_i256 : i256 loc(#loc30) +// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc31) +// CHECK-NEXT: %9 = arith.cmpi ne, %8, %c0_i256 : i256 loc(#loc30) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc30) +// CHECK-NEXT: %11 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc30) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc30) +// CHECK-NEXT: %13 = arith.andi %12, %c-65281_i256 : i256 loc(#loc30) +// CHECK-NEXT: %14 = arith.shli %10, %c8_i256 : i256 loc(#loc30) +// CHECK-NEXT: %15 = arith.ori %13, %14 : i256 loc(#loc30) +// CHECK-NEXT: %16 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc30) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc30) +// CHECK-NEXT: return loc(#loc26) +// CHECK-NEXT: } loc(#loc26) // CHECK-NEXT: func.func @setSmall_77(%arg0: i256 loc({{.*}}:23:22), %arg1: i256 loc({{.*}}:23:35)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) @@ -812,78 +865,77 @@ contract C { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc32) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc32) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc33) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc33) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc34) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc35) -// CHECK-NEXT: %7 = arith.addi %6, %c2_i256 : i256 loc(#loc35) -// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc36) -// CHECK-NEXT: %9 = arith.andi %8, %c255_i256 : i256 loc(#loc35) -// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc35) -// CHECK-NEXT: %12 = arith.andi %11, %c-256_i256 : i256 loc(#loc35) -// CHECK-NEXT: %13 = arith.ori %12, %9 : i256 loc(#loc35) -// CHECK-NEXT: %14 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: llvm.store %13, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: return loc(#loc31) -// CHECK-NEXT: } loc(#loc31) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc33) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc33) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc34) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc34) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc35) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc36) +// CHECK-NEXT: %7 = arith.addi %6, %c2_i256 : i256 loc(#loc36) +// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc37) +// CHECK-NEXT: %9 = arith.andi %8, %c255_i256 : i256 loc(#loc36) +// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc36) +// CHECK-NEXT: %12 = arith.andi %11, %c-256_i256 : i256 loc(#loc36) +// CHECK-NEXT: %13 = arith.ori %12, %9 : i256 loc(#loc36) +// CHECK-NEXT: %14 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: llvm.store %13, %14 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: return loc(#loc32) +// CHECK-NEXT: } loc(#loc32) // CHECK-NEXT: func.func @setIsigned_62(%arg0: i256 loc({{.*}}:22:24), %arg1: i256 loc({{.*}}:22:37)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc38) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc38) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc39) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc39) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc40) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc41) -// CHECK-NEXT: %7 = arith.addi %6, %c1_i256 : i256 loc(#loc41) -// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc42) -// CHECK-NEXT: %9 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: return loc(#loc37) -// CHECK-NEXT: } loc(#loc37) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc39) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc39) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc40) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc40) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc41) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc42) +// CHECK-NEXT: %7 = arith.addi %6, %c1_i256 : i256 loc(#loc42) +// CHECK-NEXT: %8 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc43) +// CHECK-NEXT: %9 = llvm.inttoptr %7 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: return loc(#loc38) +// CHECK-NEXT: } loc(#loc38) // CHECK-NEXT: func.func @setA_47(%arg0: i256 loc({{.*}}:21:18), %arg1: i256 loc({{.*}}:21:31)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc44) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc44) -// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc45) -// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc45) -// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc46) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc47) -// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc47) -// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc47) -// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc47) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc47) -// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc47) -// CHECK-NEXT: %7 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc48) -// CHECK-NEXT: %8 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc47) -// CHECK-NEXT: llvm.store %7, %8 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc47) -// CHECK-NEXT: return loc(#loc43) -// CHECK-NEXT: } loc(#loc43) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc45) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc45) +// CHECK-NEXT: %1 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc46) +// CHECK-NEXT: llvm.store %arg1, %1 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc46) +// CHECK-NEXT: %2 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc47) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc48) +// CHECK-NEXT: llvm.store %2, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc48) +// CHECK-NEXT: %4 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc48) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc48) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc48) +// CHECK-NEXT: %6 = "llvm.intrcall"(%5, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc48) +// CHECK-NEXT: %7 = llvm.load %1 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc49) +// CHECK-NEXT: %8 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc48) +// CHECK-NEXT: llvm.store %7, %8 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc48) +// CHECK-NEXT: return loc(#loc44) +// CHECK-NEXT: } loc(#loc44) // CHECK-NEXT: func.func @get_m_32(%arg0: i256 loc({{.*}}:19:4)) -> (i256, i256, i256, i256, i256, i256, i256, i256, i256) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) // CHECK-NEXT: %c16_i256 = arith.constant 16 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c9_i256 = arith.constant 9 : i256 loc(#loc) // CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) @@ -902,230 +954,176 @@ contract C { // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %1 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c0_i256, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc49) -// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %6 = arith.addi %3, %c1_i256 : i256 loc(#loc49) -// CHECK-NEXT: %7 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %9 = arith.addi %3, %c2_i256 : i256 loc(#loc49) -// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %12 = arith.andi %11, %c255_i256 : i256 loc(#loc49) -// CHECK-NEXT: %13 = arith.addi %3, %c2_i256 : i256 loc(#loc49) -// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %16 = arith.shrui %15, %c8_i256 : i256 loc(#loc49) -// CHECK-NEXT: %17 = arith.andi %16, %c255_i256 : i256 loc(#loc49) -// CHECK-NEXT: %18 = arith.cmpi ne, %17, %c0_i256 : i256 loc(#loc49) -// CHECK-NEXT: %19 = arith.extui %18 : i1 to i256 loc(#loc49) -// CHECK-NEXT: %20 = arith.addi %3, %c2_i256 : i256 loc(#loc49) -// CHECK-NEXT: %21 = llvm.inttoptr %20 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %23 = arith.shrui %22, %c16_i256 : i256 loc(#loc49) -// CHECK-NEXT: %24 = arith.andi %23, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc49) -// CHECK-NEXT: %25 = arith.addi %3, %c3_i256 : i256 loc(#loc49) -// CHECK-NEXT: %26 = llvm.inttoptr %25 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %28 = arith.addi %3, %c5_i256 : i256 loc(#loc49) -// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %31 = arith.shrui %30, %c1_i256 : i256 loc(#loc49) -// CHECK-NEXT: %32 = arith.andi %30, %c1_i256 : i256 loc(#loc49) -// CHECK-NEXT: %33 = arith.cmpi eq, %32, %c0_i256 : i256 loc(#loc49) -// CHECK-NEXT: %34 = arith.andi %31, %c127_i256 : i256 loc(#loc49) -// CHECK-NEXT: %35 = arith.select %33, %34, %31 : i256 loc(#loc49) -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %37 = arith.extui %36 : i1 to i256 loc(#loc49) -// CHECK-NEXT: %38 = arith.cmpi eq, %32, %37 : i256 loc(#loc49) -// CHECK-NEXT: cf.cond_br %38, ^bb1, ^bb2 loc(#loc49) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.addi %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %7 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %3, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %12 = arith.andi %11, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %13 = arith.addi %3, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %15 = llvm.load %14 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %16 = arith.shrui %15, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %17 = arith.andi %16, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %18 = arith.cmpi ne, %17, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = arith.extui %18 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %20 = arith.addi %3, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %21 = llvm.inttoptr %20 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.shrui %22, %c16_i256 : i256 loc(#loc3) +// CHECK-NEXT: %24 = arith.andi %23, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc3) +// CHECK-NEXT: %25 = arith.addi %3, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: %26 = llvm.inttoptr %25 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %28 = arith.addi %3, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %31 = arith.shrui %30, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %32 = arith.andi %30, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %33 = arith.cmpi eq, %32, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %34 = arith.andi %31, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %35 = arith.select %33, %34, %31 : i256 loc(#loc3) +// CHECK-NEXT: %36 = arith.cmpi ult, %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %37 = arith.extui %36 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %38 = arith.cmpi eq, %32, %37 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %38, ^bb1, ^bb2 loc(#loc3) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %40 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c34_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: "llvm.intrcall"(%41, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc49) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc49) -// CHECK-NEXT: cf.br ^bb2 loc(#loc49) +// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %40 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%41, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %42 = arith.addi %35, %c31_i256 : i256 loc(#loc49) -// CHECK-NEXT: %43 = arith.andi %42, %c-32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %44 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %45 = llvm.load %44 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc49) -// CHECK-NEXT: %46 = arith.addi %43, %c63_i256 : i256 loc(#loc49) -// CHECK-NEXT: %47 = arith.andi %46, %c-32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %48 = arith.addi %45, %47 : i256 loc(#loc49) -// CHECK-NEXT: %49 = arith.cmpi ugt, %48, %c18446744073709551615_i256 : i256 loc(#loc49) -// CHECK-NEXT: %50 = arith.cmpi ult, %48, %45 : i256 loc(#loc49) -// CHECK-NEXT: %51 = arith.ori %49, %50 : i1 loc(#loc49) -// CHECK-NEXT: cf.cond_br %51, ^bb3, ^bb4 loc(#loc49) +// CHECK-NEXT: %42 = arith.addi %35, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %43 = arith.andi %42, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %44 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %45 = llvm.load %44 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.addi %43, %c63_i256 : i256 loc(#loc3) +// CHECK-NEXT: %47 = arith.andi %46, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %48 = arith.addi %45, %47 : i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.cmpi ugt, %48, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: %50 = arith.cmpi ult, %48, %45 : i256 loc(#loc3) +// CHECK-NEXT: %51 = arith.ori %49, %50 : i1 loc(#loc3) +// CHECK-NEXT: cf.cond_br %51, ^bb3, ^bb4 loc(#loc3) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %53 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c65_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: "llvm.intrcall"(%54, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc49) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc49) -// CHECK-NEXT: cf.br ^bb4 loc(#loc49) +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %53 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%54, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb4 loc(#loc3) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %55 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %48, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %56 = llvm.inttoptr %45 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %35, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %57 = arith.addi %45, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %58 = llvm.inttoptr %45 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %35, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %59 = arith.andi %30, %c1_i256 : i256 loc(#loc49) -// CHECK-NEXT: %60 = arith.cmpi eq, %59, %c0_i256 : i256 loc(#loc49) -// CHECK-NEXT: cf.cond_br %60, ^bb8, ^bb5 loc(#loc49) +// CHECK-NEXT: %55 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %48, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %56 = llvm.inttoptr %45 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %35, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %57 = arith.addi %45, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %58 = llvm.inttoptr %45 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %35, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%28, %30, %35, %57) : (i256, i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %59 = arith.addi %3, %c6_i256 : i256 loc(#loc3) +// CHECK-NEXT: %60 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %62 = arith.shrui %61, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %63 = arith.andi %61, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %64 = arith.cmpi eq, %63, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %65 = arith.andi %62, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %66 = arith.select %64, %65, %62 : i256 loc(#loc3) +// CHECK-NEXT: %67 = arith.cmpi ult, %66, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %68 = arith.extui %67 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %69 = arith.cmpi eq, %63, %68 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %69, ^bb5, ^bb6 loc(#loc3) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %61 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %28, %61 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %62 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %63 = "llvm.intrcall"(%62, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc49) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc49) -// CHECK-NEXT: ^bb6(%64: i256 loc({{.*}}:19:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %65 = arith.cmpi ult, %64, %35 : i256 loc(#loc49) -// CHECK-NEXT: cf.cond_br %65, ^bb7(%64 : i256), ^bb9 loc(#loc49) -// CHECK-NEXT: ^bb7(%66: i256 loc({{.*}}:19:4)): // pred: ^bb6 -// CHECK-NEXT: %67 = arith.divui %66, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %68 = arith.addi %63, %67 : i256 loc(#loc49) -// CHECK-NEXT: %69 = llvm.inttoptr %68 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %70 = llvm.load %69 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %71 = arith.addi %57, %66 : i256 loc(#loc49) -// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %70, %72 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %73 = arith.addi %66, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: cf.br ^bb6(%73 : i256) loc(#loc49) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %74 = arith.andi %30, %c-256_i256 : i256 loc(#loc49) -// CHECK-NEXT: %75 = llvm.inttoptr %57 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: cf.br ^bb9 loc(#loc49) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %76 = arith.addi %3, %c6_i256 : i256 loc(#loc49) -// CHECK-NEXT: %77 = llvm.inttoptr %76 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %78 = llvm.load %77 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %79 = arith.shrui %78, %c1_i256 : i256 loc(#loc49) -// CHECK-NEXT: %80 = arith.andi %78, %c1_i256 : i256 loc(#loc49) -// CHECK-NEXT: %81 = arith.cmpi eq, %80, %c0_i256 : i256 loc(#loc49) -// CHECK-NEXT: %82 = arith.andi %79, %c127_i256 : i256 loc(#loc49) -// CHECK-NEXT: %83 = arith.select %81, %82, %79 : i256 loc(#loc49) -// CHECK-NEXT: %84 = arith.cmpi ult, %83, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %85 = arith.extui %84 : i1 to i256 loc(#loc49) -// CHECK-NEXT: %86 = arith.cmpi eq, %80, %85 : i256 loc(#loc49) -// CHECK-NEXT: cf.cond_br %86, ^bb10, ^bb11 loc(#loc49) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %87 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %88 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c34_i256, %88 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %89 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: "llvm.intrcall"(%89, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc49) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc49) -// CHECK-NEXT: cf.br ^bb11 loc(#loc49) -// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 -// CHECK-NEXT: %90 = arith.addi %83, %c31_i256 : i256 loc(#loc49) -// CHECK-NEXT: %91 = arith.andi %90, %c-32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %92 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %93 = llvm.load %92 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc49) -// CHECK-NEXT: %94 = arith.addi %91, %c63_i256 : i256 loc(#loc49) -// CHECK-NEXT: %95 = arith.andi %94, %c-32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %96 = arith.addi %93, %95 : i256 loc(#loc49) -// CHECK-NEXT: %97 = arith.cmpi ugt, %96, %c18446744073709551615_i256 : i256 loc(#loc49) -// CHECK-NEXT: %98 = arith.cmpi ult, %96, %93 : i256 loc(#loc49) -// CHECK-NEXT: %99 = arith.ori %97, %98 : i1 loc(#loc49) -// CHECK-NEXT: cf.cond_br %99, ^bb12, ^bb13 loc(#loc49) -// CHECK-NEXT: ^bb12: // pred: ^bb11 -// CHECK-NEXT: %100 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %100 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %101 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %c65_i256, %101 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: "llvm.intrcall"(%102, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc49) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc49) -// CHECK-NEXT: cf.br ^bb13 loc(#loc49) -// CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 -// CHECK-NEXT: %103 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %96, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %104 = llvm.inttoptr %93 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %83, %104 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %105 = arith.addi %93, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %106 = llvm.inttoptr %93 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %83, %106 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %107 = arith.andi %78, %c1_i256 : i256 loc(#loc49) -// CHECK-NEXT: %108 = arith.cmpi eq, %107, %c0_i256 : i256 loc(#loc49) -// CHECK-NEXT: cf.cond_br %108, ^bb17, ^bb14 loc(#loc49) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %109 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %76, %109 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %110 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %111 = "llvm.intrcall"(%110, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc49) -// CHECK-NEXT: cf.br ^bb15(%c0_i256 : i256) loc(#loc49) -// CHECK-NEXT: ^bb15(%112: i256 loc({{.*}}:19:4)): // 2 preds: ^bb14, ^bb16 -// CHECK-NEXT: %113 = arith.cmpi ult, %112, %83 : i256 loc(#loc49) -// CHECK-NEXT: cf.cond_br %113, ^bb16(%112 : i256), ^bb18 loc(#loc49) -// CHECK-NEXT: ^bb16(%114: i256 loc({{.*}}:19:4)): // pred: ^bb15 -// CHECK-NEXT: %115 = arith.divui %114, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: %116 = arith.addi %111, %115 : i256 loc(#loc49) -// CHECK-NEXT: %117 = llvm.inttoptr %116 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %118 = llvm.load %117 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: %119 = arith.addi %105, %114 : i256 loc(#loc49) -// CHECK-NEXT: %120 = llvm.inttoptr %119 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %118, %120 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: %121 = arith.addi %114, %c32_i256 : i256 loc(#loc49) -// CHECK-NEXT: cf.br ^bb15(%121 : i256) loc(#loc49) -// CHECK-NEXT: ^bb17: // pred: ^bb13 -// CHECK-NEXT: %122 = arith.andi %78, %c-256_i256 : i256 loc(#loc49) -// CHECK-NEXT: %123 = llvm.inttoptr %105 : i256 to !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: llvm.store %122, %123 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc49) -// CHECK-NEXT: cf.br ^bb18 loc(#loc49) -// CHECK-NEXT: ^bb18: // 2 preds: ^bb15, ^bb17 -// CHECK-NEXT: %124 = arith.addi %3, %c9_i256 : i256 loc(#loc49) -// CHECK-NEXT: %125 = llvm.inttoptr %124 : i256 to !llvm.ptr<5> loc(#loc49) -// CHECK-NEXT: %126 = llvm.load %125 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc49) -// CHECK-NEXT: return %5, %8, %12, %19, %24, %27, %45, %93, %126 : i256, i256, i256, i256, i256, i256, i256, i256, i256 loc(#loc49) -// CHECK-NEXT: } loc(#loc49) +// CHECK-NEXT: %70 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %71 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %71 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %72 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%72, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb6 loc(#loc3) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %73 = arith.addi %66, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %74 = arith.andi %73, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %75 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %76 = llvm.load %75 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %77 = arith.addi %74, %c63_i256 : i256 loc(#loc3) +// CHECK-NEXT: %78 = arith.andi %77, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %79 = arith.addi %76, %78 : i256 loc(#loc3) +// CHECK-NEXT: %80 = arith.cmpi ugt, %79, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: %81 = arith.cmpi ult, %79, %76 : i256 loc(#loc3) +// CHECK-NEXT: %82 = arith.ori %80, %81 : i1 loc(#loc3) +// CHECK-NEXT: cf.cond_br %82, ^bb7, ^bb8 loc(#loc3) +// CHECK-NEXT: ^bb7: // pred: ^bb6 +// CHECK-NEXT: %83 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %83 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %84 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %84 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %85 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%85, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb8 loc(#loc3) +// CHECK-NEXT: ^bb8: // 2 preds: ^bb6, ^bb7 +// CHECK-NEXT: %86 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %79, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %87 = llvm.inttoptr %76 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %66, %87 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %88 = arith.addi %76, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %89 = llvm.inttoptr %76 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %66, %89 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%59, %61, %66, %88) : (i256, i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %90 = arith.addi %3, %c9_i256 : i256 loc(#loc3) +// CHECK-NEXT: %91 = llvm.inttoptr %90 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %92 = llvm.load %91 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: return %5, %8, %12, %19, %24, %27, %45, %76, %92 : i256, i256, i256, i256, i256, i256, i256, i256, i256 loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:4:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:28:4) -// CHECK-NEXT: #loc4 = loc({{.*}}:28:52) -// CHECK-NEXT: #loc6 = loc({{.*}}:28:61) -// CHECK-NEXT: #loc7 = loc({{.*}}:27:4) -// CHECK-NEXT: #loc10 = loc({{.*}}:27:55) -// CHECK-NEXT: #loc11 = loc({{.*}}:27:53) -// CHECK-NEXT: #loc12 = loc({{.*}}:27:64) -// CHECK-NEXT: #loc13 = loc({{.*}}:26:4) -// CHECK-NEXT: #loc16 = loc({{.*}}:26:57) -// CHECK-NEXT: #loc17 = loc({{.*}}:26:55) -// CHECK-NEXT: #loc18 = loc({{.*}}:26:68) -// CHECK-NEXT: #loc19 = loc({{.*}}:25:4) -// CHECK-NEXT: #loc22 = loc({{.*}}:25:58) -// CHECK-NEXT: #loc23 = loc({{.*}}:25:56) -// CHECK-NEXT: #loc24 = loc({{.*}}:25:70) -// CHECK-NEXT: #loc25 = loc({{.*}}:24:4) -// CHECK-NEXT: #loc28 = loc({{.*}}:24:55) -// CHECK-NEXT: #loc29 = loc({{.*}}:24:53) -// CHECK-NEXT: #loc30 = loc({{.*}}:24:67) -// CHECK-NEXT: #loc31 = loc({{.*}}:23:4) -// CHECK-NEXT: #loc34 = loc({{.*}}:23:57) -// CHECK-NEXT: #loc35 = loc({{.*}}:23:55) -// CHECK-NEXT: #loc36 = loc({{.*}}:23:70) -// CHECK-NEXT: #loc37 = loc({{.*}}:22:4) -// CHECK-NEXT: #loc40 = loc({{.*}}:22:60) -// CHECK-NEXT: #loc41 = loc({{.*}}:22:58) -// CHECK-NEXT: #loc42 = loc({{.*}}:22:75) -// CHECK-NEXT: #loc43 = loc({{.*}}:21:4) -// CHECK-NEXT: #loc46 = loc({{.*}}:21:55) -// CHECK-NEXT: #loc47 = loc({{.*}}:21:53) -// CHECK-NEXT: #loc48 = loc({{.*}}:21:64) +// CHECK-NEXT: #loc4 = loc({{.*}}:28:4) +// CHECK-NEXT: #loc6 = loc({{.*}}:28:52) +// CHECK-NEXT: #loc7 = loc({{.*}}:28:61) +// CHECK-NEXT: #loc8 = loc({{.*}}:27:4) +// CHECK-NEXT: #loc11 = loc({{.*}}:27:55) +// CHECK-NEXT: #loc12 = loc({{.*}}:27:53) +// CHECK-NEXT: #loc13 = loc({{.*}}:27:64) +// CHECK-NEXT: #loc14 = loc({{.*}}:26:4) +// CHECK-NEXT: #loc17 = loc({{.*}}:26:57) +// CHECK-NEXT: #loc18 = loc({{.*}}:26:55) +// CHECK-NEXT: #loc19 = loc({{.*}}:26:68) +// CHECK-NEXT: #loc20 = loc({{.*}}:25:4) +// CHECK-NEXT: #loc23 = loc({{.*}}:25:58) +// CHECK-NEXT: #loc24 = loc({{.*}}:25:56) +// CHECK-NEXT: #loc25 = loc({{.*}}:25:70) +// CHECK-NEXT: #loc26 = loc({{.*}}:24:4) +// CHECK-NEXT: #loc29 = loc({{.*}}:24:55) +// CHECK-NEXT: #loc30 = loc({{.*}}:24:53) +// CHECK-NEXT: #loc31 = loc({{.*}}:24:67) +// CHECK-NEXT: #loc32 = loc({{.*}}:23:4) +// CHECK-NEXT: #loc35 = loc({{.*}}:23:57) +// CHECK-NEXT: #loc36 = loc({{.*}}:23:55) +// CHECK-NEXT: #loc37 = loc({{.*}}:23:70) +// CHECK-NEXT: #loc38 = loc({{.*}}:22:4) +// CHECK-NEXT: #loc41 = loc({{.*}}:22:60) +// CHECK-NEXT: #loc42 = loc({{.*}}:22:58) +// CHECK-NEXT: #loc43 = loc({{.*}}:22:75) +// CHECK-NEXT: #loc44 = loc({{.*}}:21:4) +// CHECK-NEXT: #loc47 = loc({{.*}}:21:55) +// CHECK-NEXT: #loc48 = loc({{.*}}:21:53) +// CHECK-NEXT: #loc49 = loc({{.*}}:21:64) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/getter.sol b/test/lit/mlirCodegen/EVM/getter.sol index 65da41879..a0dfcd0cb 100644 --- a/test/lit/mlirCodegen/EVM/getter.sol +++ b/test/lit/mlirCodegen/EVM/getter.sol @@ -20,11 +20,11 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc4 = loc({{.*}}:14:2) -// CHECK-NEXT: #loc5 = loc({{.*}}:13:2) -// CHECK-NEXT: #loc6 = loc({{.*}}:12:2) -// CHECK-NEXT: #loc7 = loc({{.*}}:11:2) -// CHECK-NEXT: #loc9 = loc({{.*}}:5:2) +// CHECK-NEXT: #loc2 = loc({{.*}}:5:2) +// CHECK-NEXT: #loc5 = loc({{.*}}:14:2) +// CHECK-NEXT: #loc6 = loc({{.*}}:13:2) +// CHECK-NEXT: #loc7 = loc({{.*}}:12:2) +// CHECK-NEXT: #loc8 = loc({{.*}}:11:2) // CHECK-NEXT: #loc10 = loc({{.*}}:4:2) // CHECK-NEXT: module @C_42 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { @@ -417,98 +417,132 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) -// CHECK-NEXT: func.func @get_ci_41() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c7_i256 = arith.constant 7 : i256 loc(#loc3) -// CHECK-NEXT: return %c7_i256 : i256 loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:5:2), %arg1: i256 loc({{.*}}:5:2), %arg2: i256 loc({{.*}}:5:2), %arg3: i256 loc({{.*}}:5:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:5:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:5:2)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) // CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @get_ci_41() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c7_i256 = arith.constant 7 : i256 loc(#loc4) +// CHECK-NEXT: return %c7_i256 : i256 loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @get_cm_38(%arg0: i256 loc({{.*}}:14:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c11_i256 = arith.constant 11 : i256 loc(#loc4) -// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c11_i256, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %6 = arith.andi %5, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) -// CHECK-NEXT: return %6 : i256 loc(#loc4) -// CHECK-NEXT: } loc(#loc4) -// CHECK-NEXT: func.func @get_mc_33(%arg0: i256 loc({{.*}}:13:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc5) +// CHECK-NEXT: %c11_i256 = arith.constant 11 : i256 loc(#loc5) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc5) -// CHECK-NEXT: %0 = arith.andi %arg0, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) -// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %2 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c10_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %6 = llvm.load %5 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %1 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c11_i256, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.andi %5, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) // CHECK-NEXT: return %6 : i256 loc(#loc5) // CHECK-NEXT: } loc(#loc5) -// CHECK-NEXT: func.func @get_m2_28(%arg0: i256 loc({{.*}}:12:2), %arg1: i256 loc({{.*}}:12:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: func.func @get_mc_33(%arg0: i256 loc({{.*}}:13:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c9_i256 = arith.constant 9 : i256 loc(#loc6) +// CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc6) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc6) // CHECK-NEXT: %0 = arith.andi %arg0, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc6) // CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) // CHECK-NEXT: llvm.store %0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) // CHECK-NEXT: %2 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c9_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c10_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) // CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) // CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %arg1, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %6 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %4, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %8 = "llvm.intrcall"(%7, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %9 = llvm.inttoptr %8 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) -// CHECK-NEXT: return %10 : i256 loc(#loc6) +// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %6 = llvm.load %5 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: return %6 : i256 loc(#loc6) // CHECK-NEXT: } loc(#loc6) -// CHECK-NEXT: func.func @get_m_22(%arg0: i256 loc({{.*}}:11:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: func.func @get_m2_28(%arg0: i256 loc({{.*}}:12:2), %arg1: i256 loc({{.*}}:12:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c9_i256 = arith.constant 9 : i256 loc(#loc7) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc7) // CHECK-NEXT: %0 = arith.andi %arg0, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc7) // CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) // CHECK-NEXT: llvm.store %0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) // CHECK-NEXT: %2 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c8_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c9_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) // CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) // CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %6 = llvm.load %5 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: return %6 : i256 loc(#loc7) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %arg1, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %6 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %4, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %8 = "llvm.intrcall"(%7, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) +// CHECK-NEXT: %9 = llvm.inttoptr %8 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) +// CHECK-NEXT: return %10 : i256 loc(#loc7) // CHECK-NEXT: } loc(#loc7) +// CHECK-NEXT: func.func @get_m_22(%arg0: i256 loc({{.*}}:11:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc8) +// CHECK-NEXT: %0 = arith.andi %arg0, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %2 = llvm.inttoptr %c32_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c8_i256, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c64_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: %6 = llvm.load %5 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) +// CHECK-NEXT: return %6 : i256 loc(#loc8) +// CHECK-NEXT: } loc(#loc8) // CHECK-NEXT: func.func @get_s_18() -> (i256, i256) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c7_i256 = arith.constant 7 : i256 loc(#loc) // CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) -// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc8) -// CHECK-NEXT: %0 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %2 = llvm.inttoptr %c7_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %4 = arith.andi %3, %c255_i256 : i256 loc(#loc8) -// CHECK-NEXT: return %1, %4 : i256, i256 loc(#loc8) -// CHECK-NEXT: } loc(#loc8) +// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc9) +// CHECK-NEXT: %0 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %2 = llvm.inttoptr %c7_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %4 = arith.andi %3, %c255_i256 : i256 loc(#loc9) +// CHECK-NEXT: return %1, %4 : i256, i256 loc(#loc9) +// CHECK-NEXT: } loc(#loc9) // CHECK-NEXT: func.func @get_str_10() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -522,86 +556,59 @@ contract C { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc9) -// CHECK-NEXT: %0 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc9) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc9) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc9) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc9) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc9) +// CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc2) +// CHECK-NEXT: %0 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) -// CHECK-NEXT: cf.br ^bb2 loc(#loc9) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc9) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc9) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc9) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc9) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc9) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc9) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc9) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc9) +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) -// CHECK-NEXT: cf.br ^bb4 loc(#loc9) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc9) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc9) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c5_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc9) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:5:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc9) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:5:2)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc9) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc9) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc9) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc9) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: cf.br ^bb9 loc(#loc9) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: return %16 : i256 loc(#loc9) -// CHECK-NEXT: } loc(#loc9) +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c5_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: return %16 : i256 loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @get_i2_8(%arg0: i256 loc({{.*}}:4:2), %arg1: i256 loc({{.*}}:4:2)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) @@ -639,8 +646,8 @@ contract C { // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:16:2) -// CHECK-NEXT: #loc3 = loc({{.*}}:16:28) -// CHECK-NEXT: #loc8 = loc({{.*}}:10:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:16:2) +// CHECK-NEXT: #loc4 = loc({{.*}}:16:28) +// CHECK-NEXT: #loc9 = loc({{.*}}:10:2) // CHECK-NEXT: #loc11 = loc({{.*}}:3:2) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/huge-static-array-copy.sol b/test/lit/mlirCodegen/EVM/huge-static-array-copy.sol new file mode 100644 index 000000000..218f6891d --- /dev/null +++ b/test/lit/mlirCodegen/EVM/huge-static-array-copy.sol @@ -0,0 +1,155 @@ +// RUN: solc --mlir-action=print-std-mlir --mlir-target=evm --mmlir --mlir-print-debuginfo %s | FileCheck %s +pragma solidity ^0.8.0; + +contract C { + uint256[2**64] a; + uint256[2**64] b; + + function copy() public { + a = b; + } +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc3 = loc({{.*}}:8:8) +// CHECK-NEXT: module @C_22 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%3, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_22"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %5 = "llvm.intrcall"() <{id = 4042 : i32, name = "evm.codesize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %9 = arith.addi %6, %c31_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.andi %9, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %11 = arith.addi %8, %10 : i256 loc(#loc1) +// CHECK-NEXT: %12 = arith.cmpi ugt, %11, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ult, %11, %8 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %4 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %6) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @C_22() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = "llvm.intrcall"() <{id = 4046 : i32, metadata = ["C_22_deployed"], name = "evm.dataoffset"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %24 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_22_deployed"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %25 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %26 = llvm.inttoptr %23 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%25, %26, %24) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%27, %24) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @C_22() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: module @C_22_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb5 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.shrui %4, %c224_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.switch %5 : i256, [ +// CHECK-NEXT: default: ^bb5, +// CHECK-NEXT: 1618111163: ^bb2 +// CHECK-NEXT: ] loc(#loc1) +// CHECK-NEXT: ^bb2: // pred: ^bb1 +// CHECK-NEXT: %6 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %7 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %7, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @copy_21() : () -> () loc(#loc1) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%11, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb5 loc(#loc1) +// CHECK-NEXT: ^bb5: // 3 preds: ^bb0, ^bb1, ^bb4 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%12, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @copy_21() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:8:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c18446744073709551616_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:8:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = arith.addi %2, %c18446744073709551616_i256 : i256 loc(#loc3) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %6 = llvm.inttoptr %2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %5, %6 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %7 = arith.addi %2, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb1(%7 : i256) loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:3:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:7:4) +// CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/huge-static-array-delete.sol b/test/lit/mlirCodegen/EVM/huge-static-array-delete.sol new file mode 100644 index 000000000..5f29d978f --- /dev/null +++ b/test/lit/mlirCodegen/EVM/huge-static-array-delete.sol @@ -0,0 +1,299 @@ +// RUN: solc --mlir-action=print-std-mlir --mlir-target=evm --mmlir --mlir-print-debuginfo %s | FileCheck %s +pragma solidity ^0.8.0; + +contract C { + uint256[2**64] scalar; + uint8[2**64] packed; + string[2**64] complex; + + function delScalar() public { + delete scalar; + } + + function delPacked() public { + delete packed; + } + + function delComplex() public { + delete complex; + } +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc2 = loc({{.*}}:17:8) +// CHECK-NEXT: #loc7 = loc({{.*}}:13:8) +// CHECK-NEXT: #loc9 = loc({{.*}}:9:8) +// CHECK-NEXT: module @C_41 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%3, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_41"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %5 = "llvm.intrcall"() <{id = 4042 : i32, name = "evm.codesize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %9 = arith.addi %6, %c31_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.andi %9, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %11 = arith.addi %8, %10 : i256 loc(#loc1) +// CHECK-NEXT: %12 = arith.cmpi ugt, %11, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ult, %11, %8 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %4 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %6) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @C_41() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = "llvm.intrcall"() <{id = 4046 : i32, metadata = ["C_41_deployed"], name = "evm.dataoffset"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %24 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_41_deployed"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %25 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %26 = llvm.inttoptr %23 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%25, %26, %24) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%27, %24) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @C_41() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: module @C_41_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb11 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.shrui %4, %c224_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.switch %5 : i256, [ +// CHECK-NEXT: default: ^bb11, +// CHECK-NEXT: 2700744141: ^bb2, +// CHECK-NEXT: 3821225254: ^bb5, +// CHECK-NEXT: 40187579: ^bb8 +// CHECK-NEXT: ] loc(#loc1) +// CHECK-NEXT: ^bb2: // pred: ^bb1 +// CHECK-NEXT: %6 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %7 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %7, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @delScalar_26() : () -> () loc(#loc1) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%11, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb11 loc(#loc1) +// CHECK-NEXT: ^bb5: // pred: ^bb1 +// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ne, %12, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %13, ^bb6, ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%14, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 +// CHECK-NEXT: call @delPacked_33() : () -> () loc(#loc1) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb11 loc(#loc1) +// CHECK-NEXT: ^bb8: // pred: ^bb1 +// CHECK-NEXT: %18 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %19 = arith.cmpi ne, %18, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %19, ^bb9, ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb9: // pred: ^bb8 +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%20, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb10: // 2 preds: ^bb8, ^bb9 +// CHECK-NEXT: call @delComplex_40() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%23, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb11 loc(#loc1) +// CHECK-NEXT: ^bb11: // 5 preds: ^bb0, ^bb1, ^bb4, ^bb7, ^bb10 +// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%24, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:17:8), %arg1: i256 loc({{.*}}:17:8), %arg2: i256 loc({{.*}}:17:8)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:17:8)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:17:8)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @delComplex_40() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c19023204826012975104_i256 = arith.constant 19023204826012975104 : i256 loc(#loc4) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc2) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:17:8)): // 2 preds: ^bb0, ^bb4 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c18446744073709551616_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:17:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = arith.addi %2, %c19023204826012975104_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.shrui %5, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.andi %5, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.cmpi eq, %7, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.andi %6, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.select %8, %9, %6 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.cmpi ult, %10, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.extui %11 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %13 = arith.cmpi eq, %7, %12 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @__sol.clear_string_tail(%3, %10, %c0_i256) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %17 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %18 = arith.addi %2, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb1(%18 : i256) loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @delPacked_33() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc6) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c576460752303423488_i256 = arith.constant 576460752303423488 : i256 loc(#loc7) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc7) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc7) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:13:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c576460752303423488_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc7) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:13:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = arith.addi %2, %c18446744073709551616_i256 : i256 loc(#loc7) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %5 = arith.addi %2, %c1_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.br ^bb1(%5 : i256) loc(#loc7) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: func.func @delScalar_26() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc9) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc9) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:9:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c18446744073709551616_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc9) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:9:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = llvm.inttoptr %2 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %c0_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %4 = arith.addi %2, %c1_i256 : i256 loc(#loc9) +// CHECK-NEXT: cf.br ^bb1(%4 : i256) loc(#loc9) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc8) +// CHECK-NEXT: } loc(#loc8) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:3:0) +// CHECK-NEXT: #loc3 = loc({{.*}}:16:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:6:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:12:4) +// CHECK-NEXT: #loc6 = loc({{.*}}:5:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:8:4) +// CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/huge-static-array-index.sol b/test/lit/mlirCodegen/EVM/huge-static-array-index.sol new file mode 100644 index 000000000..06af79b69 --- /dev/null +++ b/test/lit/mlirCodegen/EVM/huge-static-array-index.sol @@ -0,0 +1,210 @@ +// RUN: solc --mlir-action=print-std-mlir --mlir-target=evm --mmlir --mlir-print-debuginfo %s | FileCheck %s +pragma solidity ^0.8.0; + +contract C { + uint256[2**65] arr; + + function setConst() public { + arr[2**64 + 7] = 1; + } + + function get(uint256 i) public view returns (uint256) { + return arr[i]; + } +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc3 = loc({{.*}}:10:17) +// CHECK-NEXT: module @C_34 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%3, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_34"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %5 = "llvm.intrcall"() <{id = 4042 : i32, name = "evm.codesize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %9 = arith.addi %6, %c31_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.andi %9, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %11 = arith.addi %8, %10 : i256 loc(#loc1) +// CHECK-NEXT: %12 = arith.cmpi ugt, %11, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ult, %11, %8 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %4 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %6) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @C_34() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = "llvm.intrcall"() <{id = 4046 : i32, metadata = ["C_34_deployed"], name = "evm.dataoffset"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %24 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_34_deployed"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %25 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %26 = llvm.inttoptr %23 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%25, %26, %24) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%27, %24) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @C_34() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: module @C_34_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.shrui %4, %c224_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.switch %5 : i256, [ +// CHECK-NEXT: default: ^bb10, +// CHECK-NEXT: 1323236475: ^bb2, +// CHECK-NEXT: 2500318106: ^bb5 +// CHECK-NEXT: ] loc(#loc1) +// CHECK-NEXT: ^bb2: // pred: ^bb1 +// CHECK-NEXT: %6 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %7 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %7, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @setConst_21() : () -> () loc(#loc1) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%11, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb5: // pred: ^bb1 +// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ne, %12, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %13, ^bb6, ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%14, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 +// CHECK-NEXT: %15 = arith.subi %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: %16 = arith.cmpi slt, %15, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %16, ^bb8, ^bb9 loc(#loc1) +// CHECK-NEXT: ^bb8: // pred: ^bb7 +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb9 loc(#loc1) +// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 +// CHECK-NEXT: %18 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %20 = call @get_33(%19) : (i256) -> i256 loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %20, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %24 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%24, %c32_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb10: // 4 preds: ^bb0, ^bb1, ^bb4, ^bb9 +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%25, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @get_33(%arg0: i256 loc({{.*}}:10:17)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c36893488147419103232_i256 = arith.constant 36893488147419103232 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc4) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c36893488147419103232_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c50_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %6 = llvm.inttoptr %1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %7 = llvm.load %6 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: return %7 : i256 loc(#loc6) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @setConst_21() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c18446744073709551623_i256 = arith.constant 18446744073709551623 : i256 loc(#loc8) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc8) +// CHECK-NEXT: %0 = llvm.inttoptr %c18446744073709551623_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: llvm.store %c1_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: return loc(#loc7) +// CHECK-NEXT: } loc(#loc7) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:3:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:10:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:11:19) +// CHECK-NEXT: #loc5 = loc({{.*}}:11:15) +// CHECK-NEXT: #loc6 = loc({{.*}}:11:8) +// CHECK-NEXT: #loc7 = loc({{.*}}:6:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:7:8) +// CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/huge-static-array-nested.sol b/test/lit/mlirCodegen/EVM/huge-static-array-nested.sol new file mode 100644 index 000000000..9f11cc0ee --- /dev/null +++ b/test/lit/mlirCodegen/EVM/huge-static-array-nested.sol @@ -0,0 +1,219 @@ +// RUN: solc --mlir-action=print-std-mlir --mlir-target=evm --mmlir --mlir-print-debuginfo %s | FileCheck %s +pragma solidity ^0.8.0; + +contract C { + uint256[2**64][3] arr; + + function del() public { + delete arr[1]; + } + + function set(uint256 i) public { + arr[2][i] = 1; + } +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc3 = loc({{.*}}:10:17) +// CHECK-NEXT: #loc7 = loc({{.*}}:7:8) +// CHECK-NEXT: module @C_33 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%3, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_33"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %5 = "llvm.intrcall"() <{id = 4042 : i32, name = "evm.codesize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %9 = arith.addi %6, %c31_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.andi %9, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %11 = arith.addi %8, %10 : i256 loc(#loc1) +// CHECK-NEXT: %12 = arith.cmpi ugt, %11, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ult, %11, %8 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %4 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %6) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @C_33() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = "llvm.intrcall"() <{id = 4046 : i32, metadata = ["C_33_deployed"], name = "evm.dataoffset"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %24 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_33_deployed"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %25 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %26 = llvm.inttoptr %23 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%25, %26, %24) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%27, %24) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @C_33() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: module @C_33_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.shrui %4, %c224_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.switch %5 : i256, [ +// CHECK-NEXT: default: ^bb10, +// CHECK-NEXT: 3059257341: ^bb2, +// CHECK-NEXT: 1627277233: ^bb5 +// CHECK-NEXT: ] loc(#loc1) +// CHECK-NEXT: ^bb2: // pred: ^bb1 +// CHECK-NEXT: %6 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %7 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %7, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @del_18() : () -> () loc(#loc1) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%11, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb5: // pred: ^bb1 +// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ne, %12, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %13, ^bb6, ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%14, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 +// CHECK-NEXT: %15 = arith.subi %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: %16 = arith.cmpi slt, %15, %c32_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %16, ^bb8, ^bb9 loc(#loc1) +// CHECK-NEXT: ^bb8: // pred: ^bb7 +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb9 loc(#loc1) +// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 +// CHECK-NEXT: %18 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: call @set_32(%19) : (i256) -> () loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%22, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb10 loc(#loc1) +// CHECK-NEXT: ^bb10: // 4 preds: ^bb0, ^bb1, ^bb4, ^bb9 +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%23, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @set_32(%arg0: i256 loc({{.*}}:10:17)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36893488147419103232_i256 = arith.constant 36893488147419103232 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc4) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c18446744073709551616_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %4 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c50_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %5 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%5, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %6 = arith.addi %1, %c36893488147419103232_i256 : i256 loc(#loc5) +// CHECK-NEXT: %7 = llvm.inttoptr %6 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c1_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @del_18() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc7) +// CHECK-NEXT: ^bb1(%0: i256 loc({{.*}}:7:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %1 = arith.cmpi ult, %0, %c18446744073709551616_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.cond_br %1, ^bb2(%0 : i256), ^bb3 loc(#loc7) +// CHECK-NEXT: ^bb2(%2: i256 loc({{.*}}:7:8)): // pred: ^bb1 +// CHECK-NEXT: %3 = arith.addi %2, %c18446744073709551616_i256 : i256 loc(#loc7) +// CHECK-NEXT: %4 = llvm.inttoptr %3 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: llvm.store %c0_i256, %4 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %5 = arith.addi %2, %c1_i256 : i256 loc(#loc7) +// CHECK-NEXT: cf.br ^bb1(%5 : i256) loc(#loc7) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:3:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:10:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:11:15) +// CHECK-NEXT: #loc5 = loc({{.*}}:11:8) +// CHECK-NEXT: #loc6 = loc({{.*}}:6:4) +// CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/huge-static-array-struct.sol b/test/lit/mlirCodegen/EVM/huge-static-array-struct.sol new file mode 100644 index 000000000..483ff0bef --- /dev/null +++ b/test/lit/mlirCodegen/EVM/huge-static-array-struct.sol @@ -0,0 +1,193 @@ +// RUN: solc --mlir-action=print-std-mlir --mlir-target=evm --mmlir --mlir-print-debuginfo %s | FileCheck %s +pragma solidity ^0.8.0; + +contract C { + struct S { + uint256 x; + uint256[2**64] arr; + uint256 y; + } + S s; + + function del() public { + delete s; + } + + function setY() public { + s.y = 1; + } +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Default = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #loc5 = loc({{.*}}:12:8) +// CHECK-NEXT: module @C_33 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%3, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb2 loc(#loc1) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %4 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_33"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %5 = "llvm.intrcall"() <{id = 4042 : i32, name = "evm.codesize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc1) +// CHECK-NEXT: %7 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %9 = arith.addi %6, %c31_i256 : i256 loc(#loc1) +// CHECK-NEXT: %10 = arith.andi %9, %c-32_i256 : i256 loc(#loc1) +// CHECK-NEXT: %11 = arith.addi %8, %10 : i256 loc(#loc1) +// CHECK-NEXT: %12 = arith.cmpi ugt, %11, %c18446744073709551615_i256 : i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ult, %11, %8 : i256 loc(#loc1) +// CHECK-NEXT: %14 = arith.ori %12, %13 : i1 loc(#loc1) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %18 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %11, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %20 = llvm.inttoptr %4 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%19, %20, %6) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @C_33() : () -> () loc(#loc1) +// CHECK-NEXT: %21 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %22 = llvm.load %21 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %23 = "llvm.intrcall"() <{id = 4046 : i32, metadata = ["C_33_deployed"], name = "evm.dataoffset"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %24 = "llvm.intrcall"() <{id = 4047 : i32, metadata = ["C_33_deployed"], name = "evm.datasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %25 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %26 = llvm.inttoptr %23 : i256 to !llvm.ptr<4> loc(#loc1) +// CHECK-NEXT: "llvm.intr.memcpy"(%25, %26, %24) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc1) +// CHECK-NEXT: %27 = llvm.inttoptr %22 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%27, %24) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: func.func @C_33() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: module @C_33_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__entry() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c128_i256 = arith.constant 128 : i256 loc(#loc1) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: llvm.store %c128_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %1 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %2 = arith.cmpi uge, %1, %c4_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %2, ^bb1, ^bb8 loc(#loc1) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<2> loc(#loc1) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc1) +// CHECK-NEXT: %5 = arith.shrui %4, %c224_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.switch %5 : i256, [ +// CHECK-NEXT: default: ^bb8, +// CHECK-NEXT: 3059257341: ^bb2, +// CHECK-NEXT: 277491272: ^bb5 +// CHECK-NEXT: ] loc(#loc1) +// CHECK-NEXT: ^bb2: // pred: ^bb1 +// CHECK-NEXT: %6 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %7 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %7, ^bb3, ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%8, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb4 loc(#loc1) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @del_22() : () -> () loc(#loc1) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %11 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%11, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb8 loc(#loc1) +// CHECK-NEXT: ^bb5: // pred: ^bb1 +// CHECK-NEXT: %12 = "llvm.intrcall"() <{id = 4040 : i32, name = "evm.callvalue"}> : () -> i256 loc(#loc1) +// CHECK-NEXT: %13 = arith.cmpi ne, %12, %c0_i256 : i256 loc(#loc1) +// CHECK-NEXT: cf.cond_br %13, ^bb6, ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%14, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb7 loc(#loc1) +// CHECK-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 +// CHECK-NEXT: call @setY_32() : () -> () loc(#loc1) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc1) +// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%17, %c0_i256) <{id = 4078 : i32, name = "evm.return"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: cf.br ^bb8 loc(#loc1) +// CHECK-NEXT: ^bb8: // 4 preds: ^bb0, ^bb1, ^bb4, ^bb7 +// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc1) +// CHECK-NEXT: "llvm.intrcall"(%18, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc1) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) +// CHECK-NEXT: llvm.unreachable loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @setY_32() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c18446744073709551617_i256 = arith.constant 18446744073709551617 : i256 loc(#loc3) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc3) +// CHECK-NEXT: %0 = llvm.inttoptr %c18446744073709551617_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c1_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @del_22() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c18446744073709551617_i256 = arith.constant 18446744073709551617 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551616_i256 = arith.constant 18446744073709551616 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %0 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb1(%1: i256 loc({{.*}}:12:8)): // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: %2 = arith.cmpi ult, %1, %c18446744073709551616_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %2, ^bb2(%1 : i256), ^bb3 loc(#loc5) +// CHECK-NEXT: ^bb2(%3: i256 loc({{.*}}:12:8)): // pred: ^bb1 +// CHECK-NEXT: %4 = arith.addi %3, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %5 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %6 = arith.addi %3, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb1(%6 : i256) loc(#loc5) +// CHECK-NEXT: ^bb3: // pred: ^bb1 +// CHECK-NEXT: %7 = llvm.inttoptr %c18446744073709551617_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: return loc(#loc4) +// CHECK-NEXT: } loc(#loc4) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:3:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:15:4) +// CHECK-NEXT: #loc3 = loc({{.*}}:16:8) +// CHECK-NEXT: #loc4 = loc({{.*}}:11:4) +// CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/literals-2.sol b/test/lit/mlirCodegen/EVM/literals-2.sol index b93a87f1b..d816670b2 100644 --- a/test/lit/mlirCodegen/EVM/literals-2.sol +++ b/test/lit/mlirCodegen/EVM/literals-2.sol @@ -116,7 +116,7 @@ contract Test { // CHECK-NEXT: #loc4 = loc({{.*}}:4:4) // CHECK-NEXT: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc5 = loc({{.*}}:13:18) +// CHECK-NEXT: #loc6 = loc({{.*}}:13:18) // CHECK-NEXT: module @Test_22 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -185,136 +185,9 @@ contract Test { // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: llvm.mlir.global private unnamed_addr constant @__data_in_code__0("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddz") {addr_space = 4 : i32} loc(#loc2) // CHECK-NEXT: func.func @_21() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = call @longLit_8() : () -> i256 loc(#loc4) -// CHECK-NEXT: %1 = llvm.inttoptr %0 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %5 = arith.shrui %4, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %6 = arith.andi %4, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: %8 = arith.andi %5, %c127_i256 : i256 loc(#loc5) -// CHECK-NEXT: %9 = arith.select %7, %8, %5 : i256 loc(#loc5) -// CHECK-NEXT: %10 = arith.cmpi ult, %9, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %11 = arith.extui %10 : i1 to i256 loc(#loc5) -// CHECK-NEXT: %12 = arith.cmpi eq, %6, %11 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc5) -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c34_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb2 loc(#loc5) -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %16 = arith.cmpi ugt, %9, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %16, ^bb3, ^bb6 loc(#loc5) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %19 = "llvm.intrcall"(%18, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %20 = arith.addi %2, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %21 = arith.divui %20, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %22 = arith.addi %19, %21 : i256 loc(#loc5) -// CHECK-NEXT: %23 = arith.cmpi ult, %2, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %24 = arith.select %23, %19, %22 : i256 loc(#loc5) -// CHECK-NEXT: %25 = arith.addi %9, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %26 = arith.divui %25, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %27 = arith.addi %19, %26 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%24 : i256) loc(#loc5) -// CHECK-NEXT: ^bb4(%28: i256 loc({{.*}}:13:18)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %29 = arith.cmpi ult, %28, %27 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %29, ^bb5(%28 : i256), ^bb6 loc(#loc5) -// CHECK-NEXT: ^bb5(%30: i256 loc({{.*}}:13:18)): // pred: ^bb4 -// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %32 = arith.addi %30, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%32 : i256) loc(#loc5) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %33 = arith.cmpi ugt, %2, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %33, ^bb10, ^bb7 loc(#loc5) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %34 = arith.cmpi ne, %2, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %34, ^bb9, ^bb8 loc(#loc5) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) -// CHECK-NEXT: ^bb9: // pred: ^bb7 -// CHECK-NEXT: %36 = arith.addi %0, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %39 = arith.muli %2, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %40 = arith.subi %c256_i256, %39 : i256 loc(#loc5) -// CHECK-NEXT: %41 = arith.shli %c-1_i256, %40 : i256 loc(#loc5) -// CHECK-NEXT: %42 = arith.andi %38, %41 : i256 loc(#loc5) -// CHECK-NEXT: %43 = arith.muli %2, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %44 = arith.ori %42, %43 : i256 loc(#loc5) -// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) -// CHECK-NEXT: ^bb10: // pred: ^bb6 -// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %48 = "llvm.intrcall"(%47, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %49 = arith.addi %0, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %50 = arith.andi %2, %c-32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc5) -// CHECK-NEXT: ^bb11(%51: i256 loc({{.*}}:13:18)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %52 = arith.cmpi ult, %51, %50 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %52, ^bb12(%51 : i256), ^bb13 loc(#loc5) -// CHECK-NEXT: ^bb12(%53: i256 loc({{.*}}:13:18)): // pred: ^bb11 -// CHECK-NEXT: %54 = arith.divui %53, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %55 = arith.addi %49, %53 : i256 loc(#loc5) -// CHECK-NEXT: %56 = llvm.inttoptr %55 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %58 = arith.addi %48, %54 : i256 loc(#loc5) -// CHECK-NEXT: %59 = llvm.inttoptr %58 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %57, %59 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %60 = arith.addi %53, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb11(%60 : i256) loc(#loc5) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %61 = arith.cmpi ult, %50, %2 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %61, ^bb14, ^bb15 loc(#loc5) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %62 = arith.andi %2, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %63 = arith.divui %50, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %64 = arith.addi %49, %50 : i256 loc(#loc5) -// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %66 = llvm.load %65 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %67 = arith.muli %62, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %68 = arith.subi %c256_i256, %67 : i256 loc(#loc5) -// CHECK-NEXT: %69 = arith.shli %c-1_i256, %68 : i256 loc(#loc5) -// CHECK-NEXT: %70 = arith.andi %66, %69 : i256 loc(#loc5) -// CHECK-NEXT: %71 = arith.addi %48, %63 : i256 loc(#loc5) -// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %70, %72 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb15 loc(#loc5) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %73 = arith.muli %2, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %74 = arith.ori %73, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) -// CHECK-NEXT: ^bb16: // 3 preds: ^bb8, ^bb9, ^bb15 +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc4) +// CHECK-NEXT: %0 = call @longLit_8() : () -> i256 loc(#loc5) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%0, %c0_i256) : (i256, i256) -> () loc(#loc6) // CHECK-NEXT: return loc(#loc3) // CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: module @Test_22_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { @@ -333,6 +206,146 @@ contract Test { // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: llvm.mlir.global private unnamed_addr constant @__data_in_code__0("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddz") {addr_space = 4 : i32} loc(#loc2) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:13:18), %arg1: i256 loc({{.*}}:13:18), %arg2: i256 loc({{.*}}:13:18)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc6) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:13:18)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:13:18)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc6) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:13:18), %arg1: i256 loc({{.*}}:13:18)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: cf.br ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc6) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc6) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc6) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc6) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc6) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc6) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc6) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:13:18)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc6) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:13:18)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc6) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc6) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc6) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc6) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc6) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc6) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc6) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc6) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) // CHECK-NEXT: func.func @longLit_8() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c192_i256 = arith.constant 192 : i256 loc(#loc) // CHECK-NEXT: %0 = llvm.mlir.addressof @__data_in_code__0 : !llvm.ptr<4> loc(#loc) @@ -371,8 +384,8 @@ contract Test { // CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc2) // CHECK-NEXT: %15 = llvm.inttoptr %12 : i256 to !llvm.ptr<4> loc(#loc2) // CHECK-NEXT: "llvm.intr.memcpy"(%14, %15, %c129_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc2) -// CHECK-NEXT: return %2 : i256 loc(#loc7) -// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: return %2 : i256 loc(#loc8) +// CHECK-NEXT: } loc(#loc7) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: func.func @longLit_8() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c192_i256 = arith.constant 192 : i256 loc(#loc) @@ -412,14 +425,155 @@ contract Test { // CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc2) // CHECK-NEXT: %15 = llvm.inttoptr %12 : i256 to !llvm.ptr<4> loc(#loc2) // CHECK-NEXT: "llvm.intr.memcpy"(%14, %15, %c129_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc2) -// CHECK-NEXT: return %2 : i256 loc(#loc7) +// CHECK-NEXT: return %2 : i256 loc(#loc8) +// CHECK-NEXT: } loc(#loc7) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:13:18), %arg1: i256 loc({{.*}}:13:18)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: cf.br ^bb2 loc(#loc6) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc6) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc6) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc6) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc6) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc6) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc6) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc6) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:13:18)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc6) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:13:18)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc6) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc6) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc6) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc6) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc6) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc6) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc6) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc6) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc6) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb11 loc(#loc6) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc6) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: cf.br ^bb12 loc(#loc6) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc6) +// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:13:18), %arg1: i256 loc({{.*}}:13:18), %arg2: i256 loc({{.*}}:13:18)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc6) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc6) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc6) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:13:18)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc6) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc6) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:13:18)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc6) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc6) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc6) // CHECK-NEXT: } loc(#loc6) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:11:0) // CHECK-NEXT: #loc2 = loc({{.*}}:4:11) // CHECK-NEXT: #loc3 = loc({{.*}}:13:2) -// CHECK-NEXT: #loc4 = loc({{.*}}:13:27) -// CHECK-NEXT: #loc6 = loc({{.*}}:3:2) -// CHECK-NEXT: #loc7 = loc({{.*}}:4:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:12:2) +// CHECK-NEXT: #loc5 = loc({{.*}}:13:27) +// CHECK-NEXT: #loc7 = loc({{.*}}:3:2) +// CHECK-NEXT: #loc8 = loc({{.*}}:4:4) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/literals.sol b/test/lit/mlirCodegen/EVM/literals.sol index 452131618..556ec5e63 100644 --- a/test/lit/mlirCodegen/EVM/literals.sol +++ b/test/lit/mlirCodegen/EVM/literals.sol @@ -92,13 +92,6 @@ contract Test { // CHECK-NEXT: llvm.mlir.global private unnamed_addr constant @__data_in_code__0("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddy") {addr_space = 4 : i32} loc(#loc2) // CHECK-NEXT: func.func @Test_28() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c192_i256 = arith.constant 192 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %0 = llvm.mlir.addressof @__data_in_code__0 : !llvm.ptr<4> loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) @@ -107,10 +100,8 @@ contract Test { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c129_i256 = arith.constant 129 : i256 loc(#loc2) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %1 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) // CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) // CHECK-NEXT: %3 = arith.addi %2, %c192_i256 : i256 loc(#loc2) @@ -137,121 +128,7 @@ contract Test { // CHECK-NEXT: %14 = llvm.inttoptr %13 : i256 to !llvm.ptr<1> loc(#loc2) // CHECK-NEXT: %15 = llvm.inttoptr %12 : i256 to !llvm.ptr<4> loc(#loc2) // CHECK-NEXT: "llvm.intr.memcpy"(%14, %15, %c129_i256) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<4>, i256) -> () loc(#loc2) -// CHECK-NEXT: %16 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %19 = llvm.load %18 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %20 = arith.shrui %19, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %21 = arith.andi %19, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %22 = arith.cmpi eq, %21, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: %23 = arith.andi %20, %c127_i256 : i256 loc(#loc3) -// CHECK-NEXT: %24 = arith.select %22, %23, %20 : i256 loc(#loc3) -// CHECK-NEXT: %25 = arith.cmpi ult, %24, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %26 = arith.extui %25 : i1 to i256 loc(#loc3) -// CHECK-NEXT: %27 = arith.cmpi eq, %21, %26 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %27, ^bb3, ^bb4 loc(#loc3) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %29 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c34_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: "llvm.intrcall"(%30, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) -// CHECK-NEXT: cf.br ^bb4 loc(#loc3) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %31 = arith.cmpi ugt, %24, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %31, ^bb5, ^bb8 loc(#loc3) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %35 = arith.addi %17, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %37 = arith.addi %34, %36 : i256 loc(#loc3) -// CHECK-NEXT: %38 = arith.cmpi ult, %17, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %39 = arith.select %38, %34, %37 : i256 loc(#loc3) -// CHECK-NEXT: %40 = arith.addi %24, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %41 = arith.divui %40, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %42 = arith.addi %34, %41 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%39 : i256) loc(#loc3) -// CHECK-NEXT: ^bb6(%43: i256 loc({{.*}}:3:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %44 = arith.cmpi ult, %43, %42 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %44, ^bb7(%43 : i256), ^bb8 loc(#loc3) -// CHECK-NEXT: ^bb7(%45: i256 loc({{.*}}:3:2)): // pred: ^bb6 -// CHECK-NEXT: %46 = llvm.inttoptr %45 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %47 = arith.addi %45, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%47 : i256) loc(#loc3) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %48 = arith.cmpi ugt, %17, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %48, ^bb12, ^bb9 loc(#loc3) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %49 = arith.cmpi ne, %17, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %49, ^bb11, ^bb10 loc(#loc3) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb18 loc(#loc3) -// CHECK-NEXT: ^bb11: // pred: ^bb9 -// CHECK-NEXT: %51 = arith.addi %2, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %52 = llvm.inttoptr %51 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %53 = llvm.load %52 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %54 = arith.muli %17, %c8_i256 : i256 loc(#loc3) -// CHECK-NEXT: %55 = arith.subi %c256_i256, %54 : i256 loc(#loc3) -// CHECK-NEXT: %56 = arith.shli %c-1_i256, %55 : i256 loc(#loc3) -// CHECK-NEXT: %57 = arith.andi %53, %56 : i256 loc(#loc3) -// CHECK-NEXT: %58 = arith.muli %17, %c2_i256 : i256 loc(#loc3) -// CHECK-NEXT: %59 = arith.ori %57, %58 : i256 loc(#loc3) -// CHECK-NEXT: %60 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %59, %60 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb18 loc(#loc3) -// CHECK-NEXT: ^bb12: // pred: ^bb8 -// CHECK-NEXT: %61 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %61 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %62 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %63 = "llvm.intrcall"(%62, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %64 = arith.addi %2, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %65 = arith.andi %17, %c-32_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb13(%66: i256 loc({{.*}}:3:2)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %67 = arith.cmpi ult, %66, %65 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %67, ^bb14(%66 : i256), ^bb15 loc(#loc3) -// CHECK-NEXT: ^bb14(%68: i256 loc({{.*}}:3:2)): // pred: ^bb13 -// CHECK-NEXT: %69 = arith.divui %68, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %70 = arith.addi %64, %68 : i256 loc(#loc3) -// CHECK-NEXT: %71 = llvm.inttoptr %70 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %72 = llvm.load %71 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %73 = arith.addi %63, %69 : i256 loc(#loc3) -// CHECK-NEXT: %74 = llvm.inttoptr %73 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %72, %74 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %75 = arith.addi %68, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb13(%75 : i256) loc(#loc3) -// CHECK-NEXT: ^bb15: // pred: ^bb13 -// CHECK-NEXT: %76 = arith.cmpi ult, %65, %17 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %76, ^bb16, ^bb17 loc(#loc3) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %77 = arith.andi %17, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %78 = arith.divui %65, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %79 = arith.addi %64, %65 : i256 loc(#loc3) -// CHECK-NEXT: %80 = llvm.inttoptr %79 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %81 = llvm.load %80 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %82 = arith.muli %77, %c8_i256 : i256 loc(#loc3) -// CHECK-NEXT: %83 = arith.subi %c256_i256, %82 : i256 loc(#loc3) -// CHECK-NEXT: %84 = arith.shli %c-1_i256, %83 : i256 loc(#loc3) -// CHECK-NEXT: %85 = arith.andi %81, %84 : i256 loc(#loc3) -// CHECK-NEXT: %86 = arith.addi %63, %78 : i256 loc(#loc3) -// CHECK-NEXT: %87 = llvm.inttoptr %86 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %85, %87 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb17 loc(#loc3) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %88 = arith.muli %17, %c2_i256 : i256 loc(#loc3) -// CHECK-NEXT: %89 = arith.ori %88, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %90 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %89, %90 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb18 loc(#loc3) -// CHECK-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%2, %c0_i256) : (i256, i256) -> () loc(#loc3) // CHECK-NEXT: return loc(#loc1) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: module @Test_28_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { @@ -445,7 +322,287 @@ contract Test { // CHECK-NEXT: %14 = llvm.load %13 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc12) // CHECK-NEXT: return %14 : i256 loc(#loc13) // CHECK-NEXT: } loc(#loc9) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:3:2), %arg1: i256 loc({{.*}}:3:2), %arg2: i256 loc({{.*}}:3:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:3:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:3:2)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:3:2), %arg1: i256 loc({{.*}}:3:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc3) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc3) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:3:2)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:3:2)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc3) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc3) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc3) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc3) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc3) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc3) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:3:2), %arg1: i256 loc({{.*}}:3:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc3) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc3) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:3:2)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:3:2)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc3) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc3) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc3) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc3) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc3) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc3) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:3:2), %arg1: i256 loc({{.*}}:3:2), %arg2: i256 loc({{.*}}:3:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:3:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:3:2)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) diff --git a/test/lit/mlirCodegen/EVM/magic.sol b/test/lit/mlirCodegen/EVM/magic.sol index c08391d79..e8408ead3 100644 --- a/test/lit/mlirCodegen/EVM/magic.sol +++ b/test/lit/mlirCodegen/EVM/magic.sol @@ -8215,12 +8215,9 @@ contract StorageBytes { // CHECK-NEXT: #loc511 = loc({{.*}}:3:2) // CHECK-NEXT: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:273:33) -// CHECK-NEXT: #loc4 = loc({{.*}}:259:2) -// CHECK-NEXT: #loc9 = loc({{.*}}:269:35) -// CHECK-NEXT: #loc11 = loc({{.*}}:270:11) -// CHECK-NEXT: #loc14 = loc({{.*}}:266:11) -// CHECK-NEXT: #loc17 = loc({{.*}}:262:11) +// CHECK-NEXT: #loc2 = loc({{.*}}:262:11) +// CHECK-NEXT: #loc4 = loc({{.*}}:273:33) +// CHECK-NEXT: #loc10 = loc({{.*}}:269:35) // CHECK-NEXT: module @StorageBytes_1523 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -8501,11 +8498,45 @@ contract StorageBytes { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:262:11), %arg1: i256 loc({{.*}}:262:11), %arg2: i256 loc({{.*}}:262:11), %arg3: i256 loc({{.*}}:262:11)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:262:11)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:262:11)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @ewsig_runtime_storage_1522(%arg0: i256 loc({{.*}}:273:33)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c96_i256 = arith.constant 96 : i256 loc(#loc) // CHECK-NEXT: %c68_i256 = arith.constant 68 : i256 loc(#loc) // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -8520,122 +8551,95 @@ contract StorageBytes { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) -// CHECK-NEXT: %1 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc4) -// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc4) -// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc4) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc4) +// CHECK-NEXT: %1 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc5) +// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc5) +// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc5) +// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc5) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %14 = arith.addi %7, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %15 = arith.andi %14, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %16 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %18 = arith.addi %15, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %19 = arith.andi %18, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %20 = arith.addi %17, %19 : i256 loc(#loc4) -// CHECK-NEXT: %21 = arith.cmpi ugt, %20, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %22 = arith.cmpi ult, %20, %17 : i256 loc(#loc4) -// CHECK-NEXT: %23 = arith.ori %21, %22 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %23, ^bb3, ^bb4 loc(#loc4) +// CHECK-NEXT: %14 = arith.addi %7, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %15 = arith.andi %14, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %16 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %18 = arith.addi %15, %c63_i256 : i256 loc(#loc5) +// CHECK-NEXT: %19 = arith.andi %18, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %20 = arith.addi %17, %19 : i256 loc(#loc5) +// CHECK-NEXT: %21 = arith.cmpi ugt, %20, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: %22 = arith.cmpi ult, %20, %17 : i256 loc(#loc5) +// CHECK-NEXT: %23 = arith.ori %21, %22 : i1 loc(#loc5) +// CHECK-NEXT: cf.cond_br %23, ^bb3, ^bb4 loc(#loc5) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %25 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%26, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb4 loc(#loc4) +// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %25 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%26, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb4 loc(#loc5) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %27 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %20, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %28 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %7, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %29 = arith.addi %17, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %30 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %7, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %31 = arith.andi %2, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: %32 = arith.cmpi eq, %31, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %32, ^bb8, ^bb5 loc(#loc4) +// CHECK-NEXT: %27 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %20, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %28 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %7, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %29 = arith.addi %17, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %30 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %7, %30 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c2_i256, %2, %7, %29) : (i256, i256, i256, i256) -> () loc(#loc5) +// CHECK-NEXT: %31 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %32 = llvm.load %31 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %33 = arith.addi %17, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %35 = "llvm.intrcall"(%34, %32) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) +// CHECK-NEXT: %36 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc7) +// CHECK-NEXT: %37 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %39 = arith.addi %38, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %35, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %41 = arith.addi %38, %c36_i256 : i256 loc(#loc6) +// CHECK-NEXT: %42 = arith.addi %38, %c68_i256 : i256 loc(#loc6) +// CHECK-NEXT: %43 = llvm.inttoptr %41 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %36, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %44 = arith.subi %42, %39 : i256 loc(#loc6) +// CHECK-NEXT: %45 = llvm.inttoptr %38 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %46 = arith.addi %38, %c96_i256 : i256 loc(#loc6) +// CHECK-NEXT: %47 = arith.cmpi ugt, %46, %c18446744073709551615_i256 : i256 loc(#loc6) +// CHECK-NEXT: %48 = arith.cmpi ult, %46, %38 : i256 loc(#loc6) +// CHECK-NEXT: %49 = arith.ori %47, %48 : i1 loc(#loc6) +// CHECK-NEXT: cf.cond_br %49, ^bb5, ^bb6 loc(#loc6) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c2_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %35 = "llvm.intrcall"(%34, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc4) -// CHECK-NEXT: ^bb6(%36: i256 loc({{.*}}:259:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %37 = arith.cmpi ult, %36, %7 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %37, ^bb7(%36 : i256), ^bb9 loc(#loc4) -// CHECK-NEXT: ^bb7(%38: i256 loc({{.*}}:259:2)): // pred: ^bb6 -// CHECK-NEXT: %39 = arith.divui %38, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %40 = arith.addi %35, %39 : i256 loc(#loc4) -// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %42 = llvm.load %41 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %43 = arith.addi %29, %38 : i256 loc(#loc4) -// CHECK-NEXT: %44 = llvm.inttoptr %43 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %42, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %45 = arith.addi %38, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb6(%45 : i256) loc(#loc4) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %46 = arith.andi %2, %c-256_i256 : i256 loc(#loc4) -// CHECK-NEXT: %47 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %46, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb9 loc(#loc4) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %48 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %50 = arith.addi %17, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %52 = "llvm.intrcall"(%51, %49) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %53 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc6) -// CHECK-NEXT: %54 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %55 = llvm.load %54 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %56 = arith.addi %55, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %52, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %58 = arith.addi %55, %c36_i256 : i256 loc(#loc5) -// CHECK-NEXT: %59 = arith.addi %55, %c68_i256 : i256 loc(#loc5) -// CHECK-NEXT: %60 = llvm.inttoptr %58 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %53, %60 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %61 = arith.subi %59, %56 : i256 loc(#loc5) -// CHECK-NEXT: %62 = llvm.inttoptr %55 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %61, %62 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %63 = arith.addi %55, %c96_i256 : i256 loc(#loc5) -// CHECK-NEXT: %64 = arith.cmpi ugt, %63, %c18446744073709551615_i256 : i256 loc(#loc5) -// CHECK-NEXT: %65 = arith.cmpi ult, %63, %55 : i256 loc(#loc5) -// CHECK-NEXT: %66 = arith.ori %64, %65 : i1 loc(#loc5) -// CHECK-NEXT: cf.cond_br %66, ^bb10, ^bb11 loc(#loc5) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %67 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %67 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %68 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c65_i256, %68 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%69, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb11 loc(#loc5) -// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 -// CHECK-NEXT: %70 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %63, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: return %55 : i256 loc(#loc7) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %51 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c65_i256, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%52, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: cf.br ^bb6 loc(#loc6) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %53 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %46, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: return %38 : i256 loc(#loc8) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @ews_bytes_bytes_storage_1508(%arg0: i256 loc({{.*}}:269:35)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc) // CHECK-NEXT: %c68_i256 = arith.constant 68 : i256 loc(#loc) @@ -8643,7 +8647,6 @@ contract StorageBytes { // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) @@ -8653,105 +8656,77 @@ contract StorageBytes { // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc9) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc9) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc10) -// CHECK-NEXT: %2 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) -// CHECK-NEXT: %4 = arith.addi %3, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %1, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %6 = arith.addi %3, %c36_i256 : i256 loc(#loc11) -// CHECK-NEXT: %7 = arith.addi %3, %c68_i256 : i256 loc(#loc11) -// CHECK-NEXT: %8 = arith.subi %7, %6 : i256 loc(#loc11) -// CHECK-NEXT: %9 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %10 = arith.addi %3, %c100_i256 : i256 loc(#loc11) -// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) -// CHECK-NEXT: %13 = arith.shrui %12, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %14 = arith.andi %12, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %15 = arith.cmpi eq, %14, %c0_i256 : i256 loc(#loc11) -// CHECK-NEXT: %16 = arith.andi %13, %c127_i256 : i256 loc(#loc11) -// CHECK-NEXT: %17 = arith.select %15, %16, %13 : i256 loc(#loc11) -// CHECK-NEXT: %18 = arith.cmpi ult, %17, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %19 = arith.extui %18 : i1 to i256 loc(#loc11) -// CHECK-NEXT: %20 = arith.cmpi eq, %14, %19 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %20, ^bb1, ^bb2 loc(#loc11) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc10) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc10) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc11) +// CHECK-NEXT: %2 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) +// CHECK-NEXT: %4 = arith.addi %3, %c32_i256 : i256 loc(#loc12) +// CHECK-NEXT: %5 = llvm.inttoptr %4 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %1, %5 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %6 = arith.addi %3, %c36_i256 : i256 loc(#loc12) +// CHECK-NEXT: %7 = arith.addi %3, %c68_i256 : i256 loc(#loc12) +// CHECK-NEXT: %8 = arith.subi %7, %6 : i256 loc(#loc12) +// CHECK-NEXT: %9 = llvm.inttoptr %6 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %8, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %10 = arith.addi %3, %c100_i256 : i256 loc(#loc12) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) +// CHECK-NEXT: %13 = arith.shrui %12, %c1_i256 : i256 loc(#loc12) +// CHECK-NEXT: %14 = arith.andi %12, %c1_i256 : i256 loc(#loc12) +// CHECK-NEXT: %15 = arith.cmpi eq, %14, %c0_i256 : i256 loc(#loc12) +// CHECK-NEXT: %16 = arith.andi %13, %c127_i256 : i256 loc(#loc12) +// CHECK-NEXT: %17 = arith.select %15, %16, %13 : i256 loc(#loc12) +// CHECK-NEXT: %18 = arith.cmpi ult, %17, %c32_i256 : i256 loc(#loc12) +// CHECK-NEXT: %19 = arith.extui %18 : i1 to i256 loc(#loc12) +// CHECK-NEXT: %20 = arith.cmpi eq, %14, %19 : i256 loc(#loc12) +// CHECK-NEXT: cf.cond_br %20, ^bb1, ^bb2 loc(#loc12) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %22 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c34_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: "llvm.intrcall"(%23, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// CHECK-NEXT: cf.br ^bb2 loc(#loc11) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %21 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %22 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %c34_i256, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: "llvm.intrcall"(%23, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) +// CHECK-NEXT: cf.br ^bb2 loc(#loc12) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %24 = arith.andi %12, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %25 = arith.cmpi eq, %24, %c0_i256 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %25, ^bb6, ^bb3 loc(#loc11) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %12, %17, %10) : (i256, i256, i256, i256) -> () loc(#loc12) +// CHECK-NEXT: %24 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %17, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %25 = arith.addi %17, %c31_i256 : i256 loc(#loc12) +// CHECK-NEXT: %26 = arith.andi %25, %c-32_i256 : i256 loc(#loc12) +// CHECK-NEXT: %27 = arith.addi %10, %26 : i256 loc(#loc12) +// CHECK-NEXT: %28 = arith.subi %27, %4 : i256 loc(#loc12) +// CHECK-NEXT: %29 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %28, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %30 = arith.subi %27, %3 : i256 loc(#loc12) +// CHECK-NEXT: %31 = arith.addi %30, %c31_i256 : i256 loc(#loc12) +// CHECK-NEXT: %32 = arith.andi %31, %c-32_i256 : i256 loc(#loc12) +// CHECK-NEXT: %33 = arith.addi %3, %32 : i256 loc(#loc12) +// CHECK-NEXT: %34 = arith.cmpi ugt, %33, %c18446744073709551615_i256 : i256 loc(#loc12) +// CHECK-NEXT: %35 = arith.cmpi ult, %33, %3 : i256 loc(#loc12) +// CHECK-NEXT: %36 = arith.ori %34, %35 : i1 loc(#loc12) +// CHECK-NEXT: cf.cond_br %36, ^bb3, ^bb4 loc(#loc12) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c0_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %28 = "llvm.intrcall"(%27, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc11) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc11) -// CHECK-NEXT: ^bb4(%29: i256 loc({{.*}}:270:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %30 = arith.cmpi ult, %29, %17 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %30, ^bb5(%29 : i256), ^bb7 loc(#loc11) -// CHECK-NEXT: ^bb5(%31: i256 loc({{.*}}:270:11)): // pred: ^bb4 -// CHECK-NEXT: %32 = arith.divui %31, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %33 = arith.addi %28, %32 : i256 loc(#loc11) -// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) -// CHECK-NEXT: %36 = arith.addi %10, %31 : i256 loc(#loc11) -// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %35, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %38 = arith.addi %31, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: cf.br ^bb4(%38 : i256) loc(#loc11) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %39 = arith.andi %12, %c-256_i256 : i256 loc(#loc11) -// CHECK-NEXT: %40 = llvm.inttoptr %10 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %39, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: cf.br ^bb7 loc(#loc11) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %41 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %17, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %42 = arith.addi %17, %c31_i256 : i256 loc(#loc11) -// CHECK-NEXT: %43 = arith.andi %42, %c-32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %44 = arith.addi %10, %43 : i256 loc(#loc11) -// CHECK-NEXT: %45 = arith.subi %44, %4 : i256 loc(#loc11) -// CHECK-NEXT: %46 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %47 = arith.subi %44, %3 : i256 loc(#loc11) -// CHECK-NEXT: %48 = arith.addi %47, %c31_i256 : i256 loc(#loc11) -// CHECK-NEXT: %49 = arith.andi %48, %c-32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %50 = arith.addi %3, %49 : i256 loc(#loc11) -// CHECK-NEXT: %51 = arith.cmpi ugt, %50, %c18446744073709551615_i256 : i256 loc(#loc11) -// CHECK-NEXT: %52 = arith.cmpi ult, %50, %3 : i256 loc(#loc11) -// CHECK-NEXT: %53 = arith.ori %51, %52 : i1 loc(#loc11) -// CHECK-NEXT: cf.cond_br %53, ^bb8, ^bb9 loc(#loc11) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %55 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c65_i256, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: "llvm.intrcall"(%56, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// CHECK-NEXT: cf.br ^bb9 loc(#loc11) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %57 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %50, %57 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: return %3 : i256 loc(#loc12) -// CHECK-NEXT: } loc(#loc8) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %38 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %c65_i256, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: "llvm.intrcall"(%39, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) +// CHECK-NEXT: cf.br ^bb4 loc(#loc12) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %40 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %33, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: return %3 : i256 loc(#loc13) +// CHECK-NEXT: } loc(#loc9) // CHECK-NEXT: func.func @ep_bytes_concat_storage_1494() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -8761,140 +8736,85 @@ contract StorageBytes { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc14) -// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc14) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc14) -// CHECK-NEXT: %5 = arith.shrui %4, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %6 = arith.andi %4, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc14) -// CHECK-NEXT: %8 = arith.andi %5, %c127_i256 : i256 loc(#loc14) -// CHECK-NEXT: %9 = arith.select %7, %8, %5 : i256 loc(#loc14) -// CHECK-NEXT: %10 = arith.cmpi ult, %9, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: %11 = arith.extui %10 : i1 to i256 loc(#loc14) -// CHECK-NEXT: %12 = arith.cmpi eq, %6, %11 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc14) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc15) +// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc15) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc15) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc15) +// CHECK-NEXT: %5 = arith.shrui %4, %c1_i256 : i256 loc(#loc15) +// CHECK-NEXT: %6 = arith.andi %4, %c1_i256 : i256 loc(#loc15) +// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc15) +// CHECK-NEXT: %8 = arith.andi %5, %c127_i256 : i256 loc(#loc15) +// CHECK-NEXT: %9 = arith.select %7, %8, %5 : i256 loc(#loc15) +// CHECK-NEXT: %10 = arith.cmpi ult, %9, %c32_i256 : i256 loc(#loc15) +// CHECK-NEXT: %11 = arith.extui %10 : i1 to i256 loc(#loc15) +// CHECK-NEXT: %12 = arith.cmpi eq, %6, %11 : i256 loc(#loc15) +// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc15) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c34_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc14) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc14) -// CHECK-NEXT: cf.br ^bb2 loc(#loc14) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c34_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc15) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc15) +// CHECK-NEXT: cf.br ^bb2 loc(#loc15) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %16 = arith.andi %4, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %17 = arith.cmpi eq, %16, %c0_i256 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %17, ^bb6, ^bb3 loc(#loc14) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %4, %9, %2) : (i256, i256, i256, i256) -> () loc(#loc15) +// CHECK-NEXT: %16 = arith.addi %2, %9 : i256 loc(#loc15) +// CHECK-NEXT: %17 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc15) +// CHECK-NEXT: %18 = llvm.load %17 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc15) +// CHECK-NEXT: %19 = arith.shrui %18, %c1_i256 : i256 loc(#loc15) +// CHECK-NEXT: %20 = arith.andi %18, %c1_i256 : i256 loc(#loc15) +// CHECK-NEXT: %21 = arith.cmpi eq, %20, %c0_i256 : i256 loc(#loc15) +// CHECK-NEXT: %22 = arith.andi %19, %c127_i256 : i256 loc(#loc15) +// CHECK-NEXT: %23 = arith.select %21, %22, %19 : i256 loc(#loc15) +// CHECK-NEXT: %24 = arith.cmpi ult, %23, %c32_i256 : i256 loc(#loc15) +// CHECK-NEXT: %25 = arith.extui %24 : i1 to i256 loc(#loc15) +// CHECK-NEXT: %26 = arith.cmpi eq, %20, %25 : i256 loc(#loc15) +// CHECK-NEXT: cf.cond_br %26, ^bb3, ^bb4 loc(#loc15) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc14) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc14) -// CHECK-NEXT: ^bb4(%21: i256 loc({{.*}}:266:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %22 = arith.cmpi ult, %21, %9 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %22, ^bb5(%21 : i256), ^bb7 loc(#loc14) -// CHECK-NEXT: ^bb5(%23: i256 loc({{.*}}:266:11)): // pred: ^bb4 -// CHECK-NEXT: %24 = arith.divui %23, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: %25 = arith.addi %20, %24 : i256 loc(#loc14) -// CHECK-NEXT: %26 = llvm.inttoptr %25 : i256 to !llvm.ptr<5> loc(#loc14) -// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc14) -// CHECK-NEXT: %28 = arith.addi %2, %23 : i256 loc(#loc14) -// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %27, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %30 = arith.addi %23, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: cf.br ^bb4(%30 : i256) loc(#loc14) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %31 = arith.andi %4, %c-256_i256 : i256 loc(#loc14) -// CHECK-NEXT: %32 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %31, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: cf.br ^bb7 loc(#loc14) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %33 = arith.addi %2, %9 : i256 loc(#loc14) -// CHECK-NEXT: %34 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc14) -// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc14) -// CHECK-NEXT: %36 = arith.shrui %35, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %37 = arith.andi %35, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %38 = arith.cmpi eq, %37, %c0_i256 : i256 loc(#loc14) -// CHECK-NEXT: %39 = arith.andi %36, %c127_i256 : i256 loc(#loc14) -// CHECK-NEXT: %40 = arith.select %38, %39, %36 : i256 loc(#loc14) -// CHECK-NEXT: %41 = arith.cmpi ult, %40, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: %42 = arith.extui %41 : i1 to i256 loc(#loc14) -// CHECK-NEXT: %43 = arith.cmpi eq, %37, %42 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %43, ^bb8, ^bb9 loc(#loc14) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %44 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %45 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c34_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: "llvm.intrcall"(%46, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc14) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc14) -// CHECK-NEXT: cf.br ^bb9 loc(#loc14) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %47 = arith.andi %35, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %48 = arith.cmpi eq, %47, %c0_i256 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %48, ^bb13, ^bb10 loc(#loc14) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c1_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %50 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %51 = "llvm.intrcall"(%50, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc14) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc14) -// CHECK-NEXT: ^bb11(%52: i256 loc({{.*}}:266:11)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %53 = arith.cmpi ult, %52, %40 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %53, ^bb12(%52 : i256), ^bb14 loc(#loc14) -// CHECK-NEXT: ^bb12(%54: i256 loc({{.*}}:266:11)): // pred: ^bb11 -// CHECK-NEXT: %55 = arith.divui %54, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: %56 = arith.addi %51, %55 : i256 loc(#loc14) -// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<5> loc(#loc14) -// CHECK-NEXT: %58 = llvm.load %57 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc14) -// CHECK-NEXT: %59 = arith.addi %33, %54 : i256 loc(#loc14) -// CHECK-NEXT: %60 = llvm.inttoptr %59 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %58, %60 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %61 = arith.addi %54, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: cf.br ^bb11(%61 : i256) loc(#loc14) -// CHECK-NEXT: ^bb13: // pred: ^bb9 -// CHECK-NEXT: %62 = arith.andi %35, %c-256_i256 : i256 loc(#loc14) -// CHECK-NEXT: %63 = llvm.inttoptr %33 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %62, %63 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: cf.br ^bb14 loc(#loc14) -// CHECK-NEXT: ^bb14: // 2 preds: ^bb11, ^bb13 -// CHECK-NEXT: %64 = arith.addi %33, %40 : i256 loc(#loc14) -// CHECK-NEXT: %65 = arith.subi %64, %2 : i256 loc(#loc14) -// CHECK-NEXT: %66 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %65, %66 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %67 = arith.subi %64, %1 : i256 loc(#loc14) -// CHECK-NEXT: %68 = arith.addi %67, %c31_i256 : i256 loc(#loc14) -// CHECK-NEXT: %69 = arith.andi %68, %c-32_i256 : i256 loc(#loc14) -// CHECK-NEXT: %70 = arith.addi %1, %69 : i256 loc(#loc14) -// CHECK-NEXT: %71 = arith.cmpi ugt, %70, %c18446744073709551615_i256 : i256 loc(#loc14) -// CHECK-NEXT: %72 = arith.cmpi ult, %70, %1 : i256 loc(#loc14) -// CHECK-NEXT: %73 = arith.ori %71, %72 : i1 loc(#loc14) -// CHECK-NEXT: cf.cond_br %73, ^bb15, ^bb16 loc(#loc14) -// CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %74 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %74 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %75 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c65_i256, %75 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: "llvm.intrcall"(%76, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc14) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc14) -// CHECK-NEXT: cf.br ^bb16 loc(#loc14) -// CHECK-NEXT: ^bb16: // 2 preds: ^bb14, ^bb15 -// CHECK-NEXT: %77 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %70, %77 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: return %1 : i256 loc(#loc15) -// CHECK-NEXT: } loc(#loc13) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %28 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c34_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: "llvm.intrcall"(%29, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc15) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc15) +// CHECK-NEXT: cf.br ^bb4 loc(#loc15) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c1_i256, %18, %23, %16) : (i256, i256, i256, i256) -> () loc(#loc15) +// CHECK-NEXT: %30 = arith.addi %16, %23 : i256 loc(#loc15) +// CHECK-NEXT: %31 = arith.subi %30, %2 : i256 loc(#loc15) +// CHECK-NEXT: %32 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %31, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %33 = arith.subi %30, %1 : i256 loc(#loc15) +// CHECK-NEXT: %34 = arith.addi %33, %c31_i256 : i256 loc(#loc15) +// CHECK-NEXT: %35 = arith.andi %34, %c-32_i256 : i256 loc(#loc15) +// CHECK-NEXT: %36 = arith.addi %1, %35 : i256 loc(#loc15) +// CHECK-NEXT: %37 = arith.cmpi ugt, %36, %c18446744073709551615_i256 : i256 loc(#loc15) +// CHECK-NEXT: %38 = arith.cmpi ult, %36, %1 : i256 loc(#loc15) +// CHECK-NEXT: %39 = arith.ori %37, %38 : i1 loc(#loc15) +// CHECK-NEXT: cf.cond_br %39, ^bb5, ^bb6 loc(#loc15) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %41 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %c65_i256, %41 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: %42 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: "llvm.intrcall"(%42, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc15) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc15) +// CHECK-NEXT: cf.br ^bb6 loc(#loc15) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %43 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: llvm.store %36, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc15) +// CHECK-NEXT: return %1 : i256 loc(#loc16) +// CHECK-NEXT: } loc(#loc14) // CHECK-NEXT: func.func @ep_bytes_storage_1482() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -8904,96 +8824,72 @@ contract StorageBytes { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc17) -// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) -// CHECK-NEXT: %5 = arith.shrui %4, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %6 = arith.andi %4, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc17) -// CHECK-NEXT: %8 = arith.andi %5, %c127_i256 : i256 loc(#loc17) -// CHECK-NEXT: %9 = arith.select %7, %8, %5 : i256 loc(#loc17) -// CHECK-NEXT: %10 = arith.cmpi ult, %9, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %11 = arith.extui %10 : i1 to i256 loc(#loc17) -// CHECK-NEXT: %12 = arith.cmpi eq, %6, %11 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc17) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.addi %1, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.shrui %4, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.andi %4, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.andi %5, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.select %7, %8, %5 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.cmpi ult, %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.extui %10 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.cmpi eq, %6, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c34_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) -// CHECK-NEXT: cf.br ^bb2 loc(#loc17) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %16 = arith.andi %4, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %17 = arith.cmpi eq, %16, %c0_i256 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %17, ^bb6, ^bb3 loc(#loc17) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %4, %9, %2) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %2, %9 : i256 loc(#loc2) +// CHECK-NEXT: %17 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %9, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %18 = arith.subi %16, %1 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.addi %18, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.andi %19, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.addi %1, %20 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.cmpi ugt, %21, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.cmpi ult, %21, %1 : i256 loc(#loc2) +// CHECK-NEXT: %24 = arith.ori %22, %23 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc17) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc17) -// CHECK-NEXT: ^bb4(%21: i256 loc({{.*}}:262:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %22 = arith.cmpi ult, %21, %9 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %22, ^bb5(%21 : i256), ^bb7 loc(#loc17) -// CHECK-NEXT: ^bb5(%23: i256 loc({{.*}}:262:11)): // pred: ^bb4 -// CHECK-NEXT: %24 = arith.divui %23, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %25 = arith.addi %20, %24 : i256 loc(#loc17) -// CHECK-NEXT: %26 = llvm.inttoptr %25 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) -// CHECK-NEXT: %28 = arith.addi %2, %23 : i256 loc(#loc17) -// CHECK-NEXT: %29 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %27, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %30 = arith.addi %23, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: cf.br ^bb4(%30 : i256) loc(#loc17) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %31 = arith.andi %4, %c-256_i256 : i256 loc(#loc17) -// CHECK-NEXT: %32 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %31, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: cf.br ^bb7 loc(#loc17) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %33 = arith.addi %2, %9 : i256 loc(#loc17) -// CHECK-NEXT: %34 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %9, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %35 = arith.subi %33, %1 : i256 loc(#loc17) -// CHECK-NEXT: %36 = arith.addi %35, %c31_i256 : i256 loc(#loc17) -// CHECK-NEXT: %37 = arith.andi %36, %c-32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %38 = arith.addi %1, %37 : i256 loc(#loc17) -// CHECK-NEXT: %39 = arith.cmpi ugt, %38, %c18446744073709551615_i256 : i256 loc(#loc17) -// CHECK-NEXT: %40 = arith.cmpi ult, %38, %1 : i256 loc(#loc17) -// CHECK-NEXT: %41 = arith.ori %39, %40 : i1 loc(#loc17) -// CHECK-NEXT: cf.cond_br %41, ^bb8, ^bb9 loc(#loc17) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %42 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %42 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %43 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c65_i256, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: "llvm.intrcall"(%44, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) -// CHECK-NEXT: cf.br ^bb9 loc(#loc17) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %45 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %38, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %26 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%27, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %28 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %21, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) // CHECK-NEXT: return %1 : i256 loc(#loc18) -// CHECK-NEXT: } loc(#loc16) +// CHECK-NEXT: } loc(#loc17) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:256:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:273:2) -// CHECK-NEXT: #loc5 = loc({{.*}}:274:11) -// CHECK-NEXT: #loc6 = loc({{.*}}:274:40) -// CHECK-NEXT: #loc7 = loc({{.*}}:274:4) -// CHECK-NEXT: #loc8 = loc({{.*}}:269:2) -// CHECK-NEXT: #loc10 = loc({{.*}}:270:34) -// CHECK-NEXT: #loc12 = loc({{.*}}:270:4) -// CHECK-NEXT: #loc13 = loc({{.*}}:265:2) -// CHECK-NEXT: #loc15 = loc({{.*}}:266:4) -// CHECK-NEXT: #loc16 = loc({{.*}}:261:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:273:2) +// CHECK-NEXT: #loc5 = loc({{.*}}:259:2) +// CHECK-NEXT: #loc6 = loc({{.*}}:274:11) +// CHECK-NEXT: #loc7 = loc({{.*}}:274:40) +// CHECK-NEXT: #loc8 = loc({{.*}}:274:4) +// CHECK-NEXT: #loc9 = loc({{.*}}:269:2) +// CHECK-NEXT: #loc11 = loc({{.*}}:270:34) +// CHECK-NEXT: #loc12 = loc({{.*}}:270:11) +// CHECK-NEXT: #loc13 = loc({{.*}}:270:4) +// CHECK-NEXT: #loc14 = loc({{.*}}:265:2) +// CHECK-NEXT: #loc15 = loc({{.*}}:266:11) +// CHECK-NEXT: #loc16 = loc({{.*}}:266:4) +// CHECK-NEXT: #loc17 = loc({{.*}}:261:2) // CHECK-NEXT: #loc18 = loc({{.*}}:262:4) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/mapping.sol b/test/lit/mlirCodegen/EVM/mapping.sol index ce0f0543f..b1455e443 100644 --- a/test/lit/mlirCodegen/EVM/mapping.sol +++ b/test/lit/mlirCodegen/EVM/mapping.sol @@ -45,7 +45,7 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc4 = loc({{.*}}:41:11) +// CHECK-NEXT: #loc2 = loc({{.*}}:41:11) // CHECK-NEXT: #loc7 = loc({{.*}}:36:22) // CHECK-NEXT: #loc8 = loc({{.*}}:36:39) // CHECK-NEXT: #loc13 = loc({{.*}}:32:22) @@ -534,8 +534,42 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) -// CHECK-NEXT: func.func @get_string_storage_126() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:41:11), %arg1: i256 loc({{.*}}:41:11), %arg2: i256 loc({{.*}}:41:11), %arg3: i256 loc({{.*}}:41:11)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:41:11)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:41:11)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @get_string_storage_126() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) @@ -544,69 +578,42 @@ contract C { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc3) -// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc4) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %2 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc4) -// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc4) -// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc4) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc2) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %15 = arith.andi %3, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: %16 = arith.cmpi eq, %15, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %16, ^bb6, ^bb3 loc(#loc4) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c5_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %19 = "llvm.intrcall"(%18, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc4) -// CHECK-NEXT: ^bb4(%20: i256 loc({{.*}}:41:11)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %21 = arith.cmpi ult, %20, %8 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %21, ^bb5(%20 : i256), ^bb7 loc(#loc4) -// CHECK-NEXT: ^bb5(%22: i256 loc({{.*}}:41:11)): // pred: ^bb4 -// CHECK-NEXT: %23 = arith.divui %22, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %24 = arith.addi %19, %23 : i256 loc(#loc4) -// CHECK-NEXT: %25 = llvm.inttoptr %24 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %26 = llvm.load %25 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %27 = arith.addi %1, %22 : i256 loc(#loc4) -// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %26, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %29 = arith.addi %22, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb4(%29 : i256) loc(#loc4) -// CHECK-NEXT: ^bb6: // pred: ^bb2 -// CHECK-NEXT: %30 = arith.andi %3, %c-256_i256 : i256 loc(#loc4) -// CHECK-NEXT: %31 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb7 loc(#loc4) -// CHECK-NEXT: ^bb7: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %32 = arith.addi %1, %8 : i256 loc(#loc4) -// CHECK-NEXT: %33 = llvm.inttoptr %32 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c4_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %34 = arith.addi %8, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %35 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %36 = "llvm.intrcall"(%35, %34) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: return %38 : i256 loc(#loc5) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c5_i256, %3, %8, %1) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %15 = arith.addi %1, %8 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %15 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c4_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %17 = arith.addi %8, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %19 = "llvm.intrcall"(%18, %17) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %20 = llvm.inttoptr %19 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: return %21 : i256 loc(#loc5) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @set_string_116(%arg0: i256 loc({{.*}}:36:22), %arg1: i256 loc({{.*}}:36:39)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -780,8 +787,8 @@ contract C { // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:4:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:40:2) -// CHECK-NEXT: #loc3 = loc({{.*}}:10:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:40:2) +// CHECK-NEXT: #loc4 = loc({{.*}}:10:2) // CHECK-NEXT: #loc5 = loc({{.*}}:41:4) // CHECK-NEXT: #loc6 = loc({{.*}}:36:2) // CHECK-NEXT: #loc9 = loc({{.*}}:37:13) diff --git a/test/lit/mlirCodegen/EVM/revert-require-runtime-msg.sol b/test/lit/mlirCodegen/EVM/revert-require-runtime-msg.sol index c92de36bc..934c2840f 100644 --- a/test/lit/mlirCodegen/EVM/revert-require-runtime-msg.sol +++ b/test/lit/mlirCodegen/EVM/revert-require-runtime-msg.sol @@ -31,9 +31,9 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc6 = loc({{.*}}:23:13) -// CHECK-NEXT: #loc12 = loc({{.*}}:20:4) -// CHECK-NEXT: #loc13 = loc({{.*}}:4:2) +// CHECK-NEXT: #loc2 = loc({{.*}}:4:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:20:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:23:13) // CHECK-NEXT: #loc20 = loc({{.*}}:8:13) // CHECK-NEXT: #loc24 = loc({{.*}}:5:13) // CHECK-NEXT: #loc25 = loc({{.*}}:5:21) @@ -454,6 +454,181 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:4:2), %arg1: i256 loc({{.*}}:4:2), %arg2: i256 loc({{.*}}:4:2), %arg3: i256 loc({{.*}}:4:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:4:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:4:2)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:20:4), %arg1: i256 loc({{.*}}:20:4), %arg2: i256 loc({{.*}}:20:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:20:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:20:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:20:4), %arg1: i256 loc({{.*}}:20:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc3) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc3) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:20:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:20:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc3) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc3) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc3) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc3) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc3) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc3) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @k_73() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c68_i256 = arith.constant 68 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) @@ -464,37 +639,37 @@ contract C { // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256 = arith.constant 3963877391197344453575983046348115674221700746820753546331534351508065746944 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = call @impureMsg_52() : () -> i256 loc(#loc3) -// CHECK-NEXT: %1 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %3 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %4 = arith.addi %2, %c4_i256 : i256 loc(#loc4) -// CHECK-NEXT: %5 = arith.addi %2, %c36_i256 : i256 loc(#loc4) -// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc4) -// CHECK-NEXT: %7 = llvm.inttoptr %4 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %6, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %8 = arith.addi %2, %c68_i256 : i256 loc(#loc4) -// CHECK-NEXT: %9 = llvm.inttoptr %0 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %11 = arith.addi %0, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %12 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %13 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memmove"(%12, %13, %10) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: %14 = arith.addi %8, %10 : i256 loc(#loc4) -// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %16 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %10, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %17 = arith.addi %10, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %19 = arith.addi %8, %18 : i256 loc(#loc4) -// CHECK-NEXT: %20 = arith.subi %19, %2 : i256 loc(#loc4) -// CHECK-NEXT: %21 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%21, %20) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: return loc(#loc2) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %0 = call @impureMsg_52() : () -> i256 loc(#loc5) +// CHECK-NEXT: %1 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %3 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %3 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %4 = arith.addi %2, %c4_i256 : i256 loc(#loc6) +// CHECK-NEXT: %5 = arith.addi %2, %c36_i256 : i256 loc(#loc6) +// CHECK-NEXT: %6 = arith.subi %5, %4 : i256 loc(#loc6) +// CHECK-NEXT: %7 = llvm.inttoptr %4 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %6, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %8 = arith.addi %2, %c68_i256 : i256 loc(#loc6) +// CHECK-NEXT: %9 = llvm.inttoptr %0 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) +// CHECK-NEXT: %11 = arith.addi %0, %c32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %12 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %13 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intr.memmove"(%12, %13, %10) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: %14 = arith.addi %8, %10 : i256 loc(#loc6) +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %16 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: llvm.store %10, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: %17 = arith.addi %10, %c31_i256 : i256 loc(#loc6) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc6) +// CHECK-NEXT: %19 = arith.addi %8, %18 : i256 loc(#loc6) +// CHECK-NEXT: %20 = arith.subi %19, %2 : i256 loc(#loc6) +// CHECK-NEXT: %21 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc6) +// CHECK-NEXT: "llvm.intrcall"(%21, %20) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// CHECK-NEXT: return loc(#loc4) +// CHECK-NEXT: } loc(#loc4) // CHECK-NEXT: func.func @j_64(%arg0: i256 loc({{.*}}:23:13)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c68_i256 = arith.constant 68 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) @@ -505,53 +680,48 @@ contract C { // CHECK-NEXT: %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256 = arith.constant 3963877391197344453575983046348115674221700746820753546331534351508065746944 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc6) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc6) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc6) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc7) -// CHECK-NEXT: %2 = call @impureMsg_52() : () -> i256 loc(#loc8) -// CHECK-NEXT: %3 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc9) -// CHECK-NEXT: cf.cond_br %3, ^bb1, ^bb2 loc(#loc9) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc8) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc8) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc8) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc9) +// CHECK-NEXT: %2 = call @impureMsg_52() : () -> i256 loc(#loc10) +// CHECK-NEXT: %3 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc11) +// CHECK-NEXT: cf.cond_br %3, ^bb1, ^bb2 loc(#loc11) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %4 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc9) -// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %7 = arith.addi %5, %c4_i256 : i256 loc(#loc9) -// CHECK-NEXT: %8 = arith.addi %5, %c36_i256 : i256 loc(#loc9) -// CHECK-NEXT: %9 = arith.subi %8, %7 : i256 loc(#loc9) -// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %11 = arith.addi %5, %c68_i256 : i256 loc(#loc9) -// CHECK-NEXT: %12 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc9) -// CHECK-NEXT: %14 = arith.addi %2, %c32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %15 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %16 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: "llvm.intr.memmove"(%15, %16, %13) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc9) -// CHECK-NEXT: %17 = arith.addi %11, %13 : i256 loc(#loc9) -// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %13, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %20 = arith.addi %13, %c31_i256 : i256 loc(#loc9) -// CHECK-NEXT: %21 = arith.andi %20, %c-32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %22 = arith.addi %11, %21 : i256 loc(#loc9) -// CHECK-NEXT: %23 = arith.subi %22, %5 : i256 loc(#loc9) -// CHECK-NEXT: %24 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: "llvm.intrcall"(%24, %23) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) -// CHECK-NEXT: cf.br ^bb2 loc(#loc9) +// CHECK-NEXT: %4 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) +// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c3963877391197344453575983046348115674221700746820753546331534351508065746944_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %7 = arith.addi %5, %c4_i256 : i256 loc(#loc11) +// CHECK-NEXT: %8 = arith.addi %5, %c36_i256 : i256 loc(#loc11) +// CHECK-NEXT: %9 = arith.subi %8, %7 : i256 loc(#loc11) +// CHECK-NEXT: %10 = llvm.inttoptr %7 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %9, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %11 = arith.addi %5, %c68_i256 : i256 loc(#loc11) +// CHECK-NEXT: %12 = llvm.inttoptr %2 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) +// CHECK-NEXT: %14 = arith.addi %2, %c32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %15 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %16 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: "llvm.intr.memmove"(%15, %16, %13) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<1>, i256) -> () loc(#loc11) +// CHECK-NEXT: %17 = arith.addi %11, %13 : i256 loc(#loc11) +// CHECK-NEXT: %18 = llvm.inttoptr %17 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %19 = llvm.inttoptr %8 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %13, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %20 = arith.addi %13, %c31_i256 : i256 loc(#loc11) +// CHECK-NEXT: %21 = arith.andi %20, %c-32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %22 = arith.addi %11, %21 : i256 loc(#loc11) +// CHECK-NEXT: %23 = arith.subi %22, %5 : i256 loc(#loc11) +// CHECK-NEXT: %24 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: "llvm.intrcall"(%24, %23) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) +// CHECK-NEXT: cf.br ^bb2 loc(#loc11) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: return loc(#loc5) -// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: return loc(#loc7) +// CHECK-NEXT: } loc(#loc7) // CHECK-NEXT: func.func @impureMsg_52() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c54277541829991966604798899222822456806220305312019014393495742503709279518720_i256 = arith.constant 54277541829991966604798899222822456806220305312019014393495742503709279518720 : i256 loc(#loc) @@ -566,224 +736,83 @@ contract C { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) -// CHECK-NEXT: %2 = arith.addi %1, %c64_i256 : i256 loc(#loc11) -// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc11) -// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc11) -// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc11) -// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc11) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// CHECK-NEXT: %2 = arith.addi %1, %c64_i256 : i256 loc(#loc13) +// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc13) +// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc13) +// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc13) +// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc13) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// CHECK-NEXT: cf.br ^bb2 loc(#loc11) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb2 loc(#loc13) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c1_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c54277541829991966604798899222822456806220305312019014393495742503709279518720_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %13 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %17 = arith.shrui %16, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %18 = arith.andi %16, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %19 = arith.cmpi eq, %18, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %20 = arith.andi %17, %c127_i256 : i256 loc(#loc12) -// CHECK-NEXT: %21 = arith.select %19, %20, %17 : i256 loc(#loc12) -// CHECK-NEXT: %22 = arith.cmpi ult, %21, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %23 = arith.extui %22 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %24 = arith.cmpi eq, %18, %23 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc12) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c1_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c54277541829991966604798899222822456806220305312019014393495742503709279518720_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%1, %c0_i256) : (i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %15 = arith.shrui %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = arith.andi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %17 = arith.cmpi eq, %16, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.andi %15, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.select %17, %18, %15 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.cmpi ult, %19, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.extui %20 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.cmpi eq, %16, %21 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %26 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c34_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%27, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb4 loc(#loc12) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %28 = arith.cmpi ugt, %21, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %28, ^bb5, ^bb8 loc(#loc12) +// CHECK-NEXT: %26 = arith.addi %19, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %27 = arith.andi %26, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %28 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %30 = arith.addi %27, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %31 = arith.andi %30, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %32 = arith.addi %29, %31 : i256 loc(#loc2) +// CHECK-NEXT: %33 = arith.cmpi ugt, %32, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %34 = arith.cmpi ult, %32, %29 : i256 loc(#loc2) +// CHECK-NEXT: %35 = arith.ori %33, %34 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %35, ^bb5, ^bb6 loc(#loc2) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %31 = "llvm.intrcall"(%30, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %32 = arith.addi %14, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %33 = arith.divui %32, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %34 = arith.addi %31, %33 : i256 loc(#loc12) -// CHECK-NEXT: %35 = arith.cmpi ult, %14, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %36 = arith.select %35, %31, %34 : i256 loc(#loc12) -// CHECK-NEXT: %37 = arith.addi %21, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %39 = arith.addi %31, %38 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb6(%36 : i256) loc(#loc12) -// CHECK-NEXT: ^bb6(%40: i256 loc({{.*}}:20:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %41 = arith.cmpi ult, %40, %39 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %41, ^bb7(%40 : i256), ^bb8 loc(#loc12) -// CHECK-NEXT: ^bb7(%42: i256 loc({{.*}}:20:4)): // pred: ^bb6 -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %44 = arith.addi %42, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc12) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %45 = arith.cmpi ugt, %14, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %45, ^bb12, ^bb9 loc(#loc12) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %46 = arith.cmpi ne, %14, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %46, ^bb11, ^bb10 loc(#loc12) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb18 loc(#loc12) -// CHECK-NEXT: ^bb11: // pred: ^bb9 -// CHECK-NEXT: %48 = arith.addi %1, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %49 = llvm.inttoptr %48 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %50 = llvm.load %49 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %51 = arith.muli %14, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %52 = arith.subi %c256_i256, %51 : i256 loc(#loc12) -// CHECK-NEXT: %53 = arith.shli %c-1_i256, %52 : i256 loc(#loc12) -// CHECK-NEXT: %54 = arith.andi %50, %53 : i256 loc(#loc12) -// CHECK-NEXT: %55 = arith.muli %14, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %56 = arith.ori %54, %55 : i256 loc(#loc12) -// CHECK-NEXT: %57 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb18 loc(#loc12) -// CHECK-NEXT: ^bb12: // pred: ^bb8 -// CHECK-NEXT: %58 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %60 = "llvm.intrcall"(%59, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %61 = arith.addi %1, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %62 = arith.andi %14, %c-32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb13(%63: i256 loc({{.*}}:20:4)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %64 = arith.cmpi ult, %63, %62 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %64, ^bb14(%63 : i256), ^bb15 loc(#loc12) -// CHECK-NEXT: ^bb14(%65: i256 loc({{.*}}:20:4)): // pred: ^bb13 -// CHECK-NEXT: %66 = arith.divui %65, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %67 = arith.addi %61, %65 : i256 loc(#loc12) -// CHECK-NEXT: %68 = llvm.inttoptr %67 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %69 = llvm.load %68 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %70 = arith.addi %60, %66 : i256 loc(#loc12) -// CHECK-NEXT: %71 = llvm.inttoptr %70 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %69, %71 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %72 = arith.addi %65, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb13(%72 : i256) loc(#loc12) -// CHECK-NEXT: ^bb15: // pred: ^bb13 -// CHECK-NEXT: %73 = arith.cmpi ult, %62, %14 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %73, ^bb16, ^bb17 loc(#loc12) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %74 = arith.andi %14, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %75 = arith.divui %62, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %76 = arith.addi %61, %62 : i256 loc(#loc12) -// CHECK-NEXT: %77 = llvm.inttoptr %76 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %78 = llvm.load %77 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// CHECK-NEXT: %79 = arith.muli %74, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %80 = arith.subi %c256_i256, %79 : i256 loc(#loc12) -// CHECK-NEXT: %81 = arith.shli %c-1_i256, %80 : i256 loc(#loc12) -// CHECK-NEXT: %82 = arith.andi %78, %81 : i256 loc(#loc12) -// CHECK-NEXT: %83 = arith.addi %60, %75 : i256 loc(#loc12) -// CHECK-NEXT: %84 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %82, %84 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb17 loc(#loc12) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %85 = arith.muli %14, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %86 = arith.ori %85, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %86, %87 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb18 loc(#loc12) -// CHECK-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 -// CHECK-NEXT: %88 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc13) -// CHECK-NEXT: %89 = llvm.load %88 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) -// CHECK-NEXT: %90 = arith.shrui %89, %c1_i256 : i256 loc(#loc13) -// CHECK-NEXT: %91 = arith.andi %89, %c1_i256 : i256 loc(#loc13) -// CHECK-NEXT: %92 = arith.cmpi eq, %91, %c0_i256 : i256 loc(#loc13) -// CHECK-NEXT: %93 = arith.andi %90, %c127_i256 : i256 loc(#loc13) -// CHECK-NEXT: %94 = arith.select %92, %93, %90 : i256 loc(#loc13) -// CHECK-NEXT: %95 = arith.cmpi ult, %94, %c32_i256 : i256 loc(#loc13) -// CHECK-NEXT: %96 = arith.extui %95 : i1 to i256 loc(#loc13) -// CHECK-NEXT: %97 = arith.cmpi eq, %91, %96 : i256 loc(#loc13) -// CHECK-NEXT: cf.cond_br %97, ^bb19, ^bb20 loc(#loc13) -// CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %98 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %98 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %99 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %c34_i256, %99 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %100 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: "llvm.intrcall"(%100, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) -// CHECK-NEXT: cf.br ^bb20 loc(#loc13) -// CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// CHECK-NEXT: %101 = arith.addi %94, %c31_i256 : i256 loc(#loc13) -// CHECK-NEXT: %102 = arith.andi %101, %c-32_i256 : i256 loc(#loc13) -// CHECK-NEXT: %103 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %104 = llvm.load %103 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) -// CHECK-NEXT: %105 = arith.addi %102, %c63_i256 : i256 loc(#loc13) -// CHECK-NEXT: %106 = arith.andi %105, %c-32_i256 : i256 loc(#loc13) -// CHECK-NEXT: %107 = arith.addi %104, %106 : i256 loc(#loc13) -// CHECK-NEXT: %108 = arith.cmpi ugt, %107, %c18446744073709551615_i256 : i256 loc(#loc13) -// CHECK-NEXT: %109 = arith.cmpi ult, %107, %104 : i256 loc(#loc13) -// CHECK-NEXT: %110 = arith.ori %108, %109 : i1 loc(#loc13) -// CHECK-NEXT: cf.cond_br %110, ^bb21, ^bb22 loc(#loc13) -// CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %111 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %112 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %c65_i256, %112 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %113 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: "llvm.intrcall"(%113, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) -// CHECK-NEXT: cf.br ^bb22 loc(#loc13) -// CHECK-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// CHECK-NEXT: %114 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %107, %114 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %115 = llvm.inttoptr %104 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %94, %115 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %116 = arith.addi %104, %c32_i256 : i256 loc(#loc13) -// CHECK-NEXT: %117 = llvm.inttoptr %104 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %94, %117 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %118 = arith.andi %89, %c1_i256 : i256 loc(#loc13) -// CHECK-NEXT: %119 = arith.cmpi eq, %118, %c0_i256 : i256 loc(#loc13) -// CHECK-NEXT: cf.cond_br %119, ^bb26, ^bb23 loc(#loc13) -// CHECK-NEXT: ^bb23: // pred: ^bb22 -// CHECK-NEXT: %120 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %c0_i256, %120 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %121 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %122 = "llvm.intrcall"(%121, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc13) -// CHECK-NEXT: cf.br ^bb24(%c0_i256 : i256) loc(#loc13) -// CHECK-NEXT: ^bb24(%123: i256 loc({{.*}}:4:2)): // 2 preds: ^bb23, ^bb25 -// CHECK-NEXT: %124 = arith.cmpi ult, %123, %94 : i256 loc(#loc13) -// CHECK-NEXT: cf.cond_br %124, ^bb25(%123 : i256), ^bb27 loc(#loc13) -// CHECK-NEXT: ^bb25(%125: i256 loc({{.*}}:4:2)): // pred: ^bb24 -// CHECK-NEXT: %126 = arith.divui %125, %c32_i256 : i256 loc(#loc13) -// CHECK-NEXT: %127 = arith.addi %122, %126 : i256 loc(#loc13) -// CHECK-NEXT: %128 = llvm.inttoptr %127 : i256 to !llvm.ptr<5> loc(#loc13) -// CHECK-NEXT: %129 = llvm.load %128 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) -// CHECK-NEXT: %130 = arith.addi %116, %125 : i256 loc(#loc13) -// CHECK-NEXT: %131 = llvm.inttoptr %130 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %129, %131 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %132 = arith.addi %125, %c32_i256 : i256 loc(#loc13) -// CHECK-NEXT: cf.br ^bb24(%132 : i256) loc(#loc13) -// CHECK-NEXT: ^bb26: // pred: ^bb22 -// CHECK-NEXT: %133 = arith.andi %89, %c-256_i256 : i256 loc(#loc13) -// CHECK-NEXT: %134 = llvm.inttoptr %116 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %133, %134 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: cf.br ^bb27 loc(#loc13) -// CHECK-NEXT: ^bb27: // 2 preds: ^bb24, ^bb26 -// CHECK-NEXT: return %104 : i256 loc(#loc14) -// CHECK-NEXT: } loc(#loc10) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %37 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%38, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb6 loc(#loc2) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %39 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %32, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %40 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %19, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %41 = arith.addi %29, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %42 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %19, %42 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %14, %19, %41) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: return %29 : i256 loc(#loc14) +// CHECK-NEXT: } loc(#loc12) // CHECK-NEXT: func.func @i_40() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc16) // CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) @@ -914,15 +943,15 @@ contract C { // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:3:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:26:2) -// CHECK-NEXT: #loc3 = loc({{.*}}:27:11) -// CHECK-NEXT: #loc4 = loc({{.*}}:27:4) -// CHECK-NEXT: #loc5 = loc({{.*}}:23:2) -// CHECK-NEXT: #loc7 = loc({{.*}}:24:12) -// CHECK-NEXT: #loc8 = loc({{.*}}:24:15) -// CHECK-NEXT: #loc9 = loc({{.*}}:24:4) -// CHECK-NEXT: #loc10 = loc({{.*}}:19:2) -// CHECK-NEXT: #loc11 = loc({{.*}}:20:13) +// CHECK-NEXT: #loc4 = loc({{.*}}:26:2) +// CHECK-NEXT: #loc5 = loc({{.*}}:27:11) +// CHECK-NEXT: #loc6 = loc({{.*}}:27:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:23:2) +// CHECK-NEXT: #loc9 = loc({{.*}}:24:12) +// CHECK-NEXT: #loc10 = loc({{.*}}:24:15) +// CHECK-NEXT: #loc11 = loc({{.*}}:24:4) +// CHECK-NEXT: #loc12 = loc({{.*}}:19:2) +// CHECK-NEXT: #loc13 = loc({{.*}}:20:13) // CHECK-NEXT: #loc14 = loc({{.*}}:21:4) // CHECK-NEXT: #loc15 = loc({{.*}}:14:2) // CHECK-NEXT: #loc16 = loc({{.*}}:15:4) @@ -938,9 +967,9 @@ contract C { // CHECK-EMPTY: // STRIP: #Osaka = #sol // STRIP-NEXT: #Strip = #sol -// STRIP-NEXT: #loc6 = loc({{.*}}:23:13) -// STRIP-NEXT: #loc12 = loc({{.*}}:20:4) -// STRIP-NEXT: #loc13 = loc({{.*}}:4:2) +// STRIP-NEXT: #loc2 = loc({{.*}}:4:2) +// STRIP-NEXT: #loc3 = loc({{.*}}:20:4) +// STRIP-NEXT: #loc8 = loc({{.*}}:23:13) // STRIP-NEXT: #loc20 = loc({{.*}}:8:13) // STRIP-NEXT: #loc23 = loc({{.*}}:5:13) // STRIP-NEXT: #loc24 = loc({{.*}}:5:21) @@ -1361,38 +1390,208 @@ contract C { // STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc1) // STRIP-NEXT: llvm.unreachable loc(#loc1) // STRIP-NEXT: } loc(#loc1) -// STRIP-NEXT: func.func @k_73() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:4:2), %arg1: i256 loc({{.*}}:4:2), %arg2: i256 loc({{.*}}:4:2), %arg3: i256 loc({{.*}}:4:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// STRIP-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// STRIP-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) // STRIP-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// STRIP-NEXT: %0 = call @impureMsg_52() : () -> i256 loc(#loc3) -// STRIP-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// STRIP-NEXT: "llvm.intrcall"(%1, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// STRIP-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// STRIP-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// STRIP-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// STRIP-NEXT: ^bb1: // pred: ^bb0 +// STRIP-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// STRIP-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// STRIP-NEXT: ^bb2(%5: i256 loc({{.*}}:4:2)): // 2 preds: ^bb1, ^bb3 +// STRIP-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// STRIP-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// STRIP-NEXT: ^bb3(%7: i256 loc({{.*}}:4:2)): // pred: ^bb2 +// STRIP-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// STRIP-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// STRIP-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// STRIP-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// STRIP-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// STRIP-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// STRIP-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// STRIP-NEXT: ^bb4: // pred: ^bb0 +// STRIP-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// STRIP-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: cf.br ^bb5 loc(#loc2) +// STRIP-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 // STRIP-NEXT: return loc(#loc2) // STRIP-NEXT: } loc(#loc2) -// STRIP-NEXT: func.func @j_64(%arg0: i256 loc({{.*}}:23:13)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:20:4), %arg1: i256 loc({{.*}}:20:4), %arg2: i256 loc({{.*}}:20:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// STRIP-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // STRIP-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// STRIP-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc6) -// STRIP-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc6) -// STRIP-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc6) -// STRIP-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc7) -// STRIP-NEXT: %2 = call @impureMsg_52() : () -> i256 loc(#loc8) -// STRIP-NEXT: %3 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc9) -// STRIP-NEXT: cf.cond_br %3, ^bb1, ^bb2 loc(#loc9) +// STRIP-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// STRIP-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// STRIP-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc3) // STRIP-NEXT: ^bb1: // pred: ^bb0 -// STRIP-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// STRIP-NEXT: "llvm.intrcall"(%4, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) -// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc9) -// STRIP-NEXT: cf.br ^bb2 loc(#loc9) -// STRIP-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// STRIP-NEXT: return loc(#loc5) -// STRIP-NEXT: } loc(#loc5) -// STRIP-NEXT: func.func @impureMsg_52() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// STRIP-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// STRIP-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// STRIP-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// STRIP-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc3) +// STRIP-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc3) +// STRIP-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc3) +// STRIP-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc3) +// STRIP-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc3) +// STRIP-NEXT: cf.br ^bb2(%8 : i256) loc(#loc3) +// STRIP-NEXT: ^bb2(%12: i256 loc({{.*}}:20:4)): // 2 preds: ^bb1, ^bb3 +// STRIP-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc3) +// STRIP-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc3) +// STRIP-NEXT: ^bb3(%14: i256 loc({{.*}}:20:4)): // pred: ^bb2 +// STRIP-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc3) +// STRIP-NEXT: cf.br ^bb2(%16 : i256) loc(#loc3) +// STRIP-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// STRIP-NEXT: return loc(#loc3) +// STRIP-NEXT: } loc(#loc3) +// STRIP-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:20:4), %arg1: i256 loc({{.*}}:20:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // STRIP-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // STRIP-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) // STRIP-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) // STRIP-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// STRIP-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// STRIP-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// STRIP-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// STRIP-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// STRIP-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// STRIP-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// STRIP-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// STRIP-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// STRIP-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// STRIP-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// STRIP-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// STRIP-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc3) +// STRIP-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc3) +// STRIP-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc3) +// STRIP-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc3) +// STRIP-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc3) +// STRIP-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc3) +// STRIP-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc3) +// STRIP-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc3) +// STRIP-NEXT: ^bb1: // pred: ^bb0 +// STRIP-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// STRIP-NEXT: cf.br ^bb2 loc(#loc3) +// STRIP-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// STRIP-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc3) +// STRIP-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc3) +// STRIP-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc3) +// STRIP-NEXT: ^bb3: // pred: ^bb2 +// STRIP-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc3) +// STRIP-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc3) +// STRIP-NEXT: ^bb4: // pred: ^bb3 +// STRIP-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: cf.br ^bb12 loc(#loc3) +// STRIP-NEXT: ^bb5: // pred: ^bb3 +// STRIP-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// STRIP-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc3) +// STRIP-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc3) +// STRIP-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc3) +// STRIP-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc3) +// STRIP-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// STRIP-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc3) +// STRIP-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: cf.br ^bb12 loc(#loc3) +// STRIP-NEXT: ^bb6: // pred: ^bb2 +// STRIP-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// STRIP-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc3) +// STRIP-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// STRIP-NEXT: ^bb7(%33: i256 loc({{.*}}:20:4)): // 2 preds: ^bb6, ^bb8 +// STRIP-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc3) +// STRIP-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc3) +// STRIP-NEXT: ^bb8(%35: i256 loc({{.*}}:20:4)): // pred: ^bb7 +// STRIP-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc3) +// STRIP-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// STRIP-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc3) +// STRIP-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: cf.br ^bb7(%42 : i256) loc(#loc3) +// STRIP-NEXT: ^bb9: // pred: ^bb7 +// STRIP-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc3) +// STRIP-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc3) +// STRIP-NEXT: ^bb10: // pred: ^bb9 +// STRIP-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc3) +// STRIP-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc3) +// STRIP-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc3) +// STRIP-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc3) +// STRIP-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// STRIP-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc3) +// STRIP-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc3) +// STRIP-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc3) +// STRIP-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc3) +// STRIP-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc3) +// STRIP-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: cf.br ^bb11 loc(#loc3) +// STRIP-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// STRIP-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// STRIP-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc3) +// STRIP-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// STRIP-NEXT: cf.br ^bb12 loc(#loc3) +// STRIP-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// STRIP-NEXT: return loc(#loc3) +// STRIP-NEXT: } loc(#loc3) +// STRIP-NEXT: func.func @k_73() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// STRIP-NEXT: %0 = call @impureMsg_52() : () -> i256 loc(#loc5) +// STRIP-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) +// STRIP-NEXT: "llvm.intrcall"(%1, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) +// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc6) +// STRIP-NEXT: return loc(#loc4) +// STRIP-NEXT: } loc(#loc4) +// STRIP-NEXT: func.func @j_64(%arg0: i256 loc({{.*}}:23:13)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// STRIP-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc8) +// STRIP-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc8) +// STRIP-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc8) +// STRIP-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc9) +// STRIP-NEXT: %2 = call @impureMsg_52() : () -> i256 loc(#loc10) +// STRIP-NEXT: %3 = arith.cmpi eq, %1, %c0_i256 : i256 loc(#loc11) +// STRIP-NEXT: cf.cond_br %3, ^bb1, ^bb2 loc(#loc11) +// STRIP-NEXT: ^bb1: // pred: ^bb0 +// STRIP-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// STRIP-NEXT: "llvm.intrcall"(%4, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) +// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc11) +// STRIP-NEXT: cf.br ^bb2 loc(#loc11) +// STRIP-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// STRIP-NEXT: return loc(#loc7) +// STRIP-NEXT: } loc(#loc7) +// STRIP-NEXT: func.func @impureMsg_52() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// STRIP-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) // STRIP-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // STRIP-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // STRIP-NEXT: %c54277541829991966604798899222822456806220305312019014393495742503709279518720_i256 = arith.constant 54277541829991966604798899222822456806220305312019014393495742503709279518720 : i256 loc(#loc) @@ -1407,224 +1606,83 @@ contract C { // STRIP-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // STRIP-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // STRIP-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// STRIP-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) -// STRIP-NEXT: %2 = arith.addi %1, %c64_i256 : i256 loc(#loc11) -// STRIP-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc11) -// STRIP-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc11) -// STRIP-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc11) -// STRIP-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc11) +// STRIP-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) +// STRIP-NEXT: %2 = arith.addi %1, %c64_i256 : i256 loc(#loc13) +// STRIP-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc13) +// STRIP-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc13) +// STRIP-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc13) +// STRIP-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc13) // STRIP-NEXT: ^bb1: // pred: ^bb0 -// STRIP-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// STRIP-NEXT: cf.br ^bb2 loc(#loc11) +// STRIP-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// STRIP-NEXT: cf.br ^bb2 loc(#loc13) // STRIP-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// STRIP-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: llvm.store %c1_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc11) -// STRIP-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: llvm.store %c54277541829991966604798899222822456806220305312019014393495742503709279518720_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// STRIP-NEXT: %13 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// STRIP-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// STRIP-NEXT: %17 = arith.shrui %16, %c1_i256 : i256 loc(#loc12) -// STRIP-NEXT: %18 = arith.andi %16, %c1_i256 : i256 loc(#loc12) -// STRIP-NEXT: %19 = arith.cmpi eq, %18, %c0_i256 : i256 loc(#loc12) -// STRIP-NEXT: %20 = arith.andi %17, %c127_i256 : i256 loc(#loc12) -// STRIP-NEXT: %21 = arith.select %19, %20, %17 : i256 loc(#loc12) -// STRIP-NEXT: %22 = arith.cmpi ult, %21, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %23 = arith.extui %22 : i1 to i256 loc(#loc12) -// STRIP-NEXT: %24 = arith.cmpi eq, %18, %23 : i256 loc(#loc12) -// STRIP-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc12) +// STRIP-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: %10 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: llvm.store %c1_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc13) +// STRIP-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: llvm.store %c54277541829991966604798899222822456806220305312019014393495742503709279518720_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// STRIP-NEXT: call @__sol.copy.memory.storage.string(%1, %c0_i256) : (i256, i256) -> () loc(#loc3) +// STRIP-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// STRIP-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// STRIP-NEXT: %15 = arith.shrui %14, %c1_i256 : i256 loc(#loc2) +// STRIP-NEXT: %16 = arith.andi %14, %c1_i256 : i256 loc(#loc2) +// STRIP-NEXT: %17 = arith.cmpi eq, %16, %c0_i256 : i256 loc(#loc2) +// STRIP-NEXT: %18 = arith.andi %15, %c127_i256 : i256 loc(#loc2) +// STRIP-NEXT: %19 = arith.select %17, %18, %15 : i256 loc(#loc2) +// STRIP-NEXT: %20 = arith.cmpi ult, %19, %c32_i256 : i256 loc(#loc2) +// STRIP-NEXT: %21 = arith.extui %20 : i1 to i256 loc(#loc2) +// STRIP-NEXT: %22 = arith.cmpi eq, %16, %21 : i256 loc(#loc2) +// STRIP-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc2) // STRIP-NEXT: ^bb3: // pred: ^bb2 -// STRIP-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %26 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: llvm.store %c34_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: "llvm.intrcall"(%27, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// STRIP-NEXT: cf.br ^bb4 loc(#loc12) +// STRIP-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %c34_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// STRIP-NEXT: cf.br ^bb4 loc(#loc2) // STRIP-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// STRIP-NEXT: %28 = arith.cmpi ugt, %21, %c31_i256 : i256 loc(#loc12) -// STRIP-NEXT: cf.cond_br %28, ^bb5, ^bb8 loc(#loc12) +// STRIP-NEXT: %26 = arith.addi %19, %c31_i256 : i256 loc(#loc2) +// STRIP-NEXT: %27 = arith.andi %26, %c-32_i256 : i256 loc(#loc2) +// STRIP-NEXT: %28 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// STRIP-NEXT: %30 = arith.addi %27, %c63_i256 : i256 loc(#loc2) +// STRIP-NEXT: %31 = arith.andi %30, %c-32_i256 : i256 loc(#loc2) +// STRIP-NEXT: %32 = arith.addi %29, %31 : i256 loc(#loc2) +// STRIP-NEXT: %33 = arith.cmpi ugt, %32, %c18446744073709551615_i256 : i256 loc(#loc2) +// STRIP-NEXT: %34 = arith.cmpi ult, %32, %29 : i256 loc(#loc2) +// STRIP-NEXT: %35 = arith.ori %33, %34 : i1 loc(#loc2) +// STRIP-NEXT: cf.cond_br %35, ^bb5, ^bb6 loc(#loc2) // STRIP-NEXT: ^bb5: // pred: ^bb4 -// STRIP-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: llvm.store %c0_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %31 = "llvm.intrcall"(%30, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// STRIP-NEXT: %32 = arith.addi %14, %c31_i256 : i256 loc(#loc12) -// STRIP-NEXT: %33 = arith.divui %32, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %34 = arith.addi %31, %33 : i256 loc(#loc12) -// STRIP-NEXT: %35 = arith.cmpi ult, %14, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %36 = arith.select %35, %31, %34 : i256 loc(#loc12) -// STRIP-NEXT: %37 = arith.addi %21, %c31_i256 : i256 loc(#loc12) -// STRIP-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %39 = arith.addi %31, %38 : i256 loc(#loc12) -// STRIP-NEXT: cf.br ^bb6(%36 : i256) loc(#loc12) -// STRIP-NEXT: ^bb6(%40: i256 loc({{.*}}:20:4)): // 2 preds: ^bb5, ^bb7 -// STRIP-NEXT: %41 = arith.cmpi ult, %40, %39 : i256 loc(#loc12) -// STRIP-NEXT: cf.cond_br %41, ^bb7(%40 : i256), ^bb8 loc(#loc12) -// STRIP-NEXT: ^bb7(%42: i256 loc({{.*}}:20:4)): // pred: ^bb6 -// STRIP-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: llvm.store %c0_i256, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: %44 = arith.addi %42, %c1_i256 : i256 loc(#loc12) -// STRIP-NEXT: cf.br ^bb6(%44 : i256) loc(#loc12) -// STRIP-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// STRIP-NEXT: %45 = arith.cmpi ugt, %14, %c31_i256 : i256 loc(#loc12) -// STRIP-NEXT: cf.cond_br %45, ^bb12, ^bb9 loc(#loc12) -// STRIP-NEXT: ^bb9: // pred: ^bb8 -// STRIP-NEXT: %46 = arith.cmpi ne, %14, %c0_i256 : i256 loc(#loc12) -// STRIP-NEXT: cf.cond_br %46, ^bb11, ^bb10 loc(#loc12) -// STRIP-NEXT: ^bb10: // pred: ^bb9 -// STRIP-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: llvm.store %c0_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: cf.br ^bb18 loc(#loc12) -// STRIP-NEXT: ^bb11: // pred: ^bb9 -// STRIP-NEXT: %48 = arith.addi %1, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %49 = llvm.inttoptr %48 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %50 = llvm.load %49 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// STRIP-NEXT: %51 = arith.muli %14, %c8_i256 : i256 loc(#loc12) -// STRIP-NEXT: %52 = arith.subi %c256_i256, %51 : i256 loc(#loc12) -// STRIP-NEXT: %53 = arith.shli %c-1_i256, %52 : i256 loc(#loc12) -// STRIP-NEXT: %54 = arith.andi %50, %53 : i256 loc(#loc12) -// STRIP-NEXT: %55 = arith.muli %14, %c2_i256 : i256 loc(#loc12) -// STRIP-NEXT: %56 = arith.ori %54, %55 : i256 loc(#loc12) -// STRIP-NEXT: %57 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: cf.br ^bb18 loc(#loc12) -// STRIP-NEXT: ^bb12: // pred: ^bb8 -// STRIP-NEXT: %58 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: llvm.store %c0_i256, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %60 = "llvm.intrcall"(%59, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// STRIP-NEXT: %61 = arith.addi %1, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %62 = arith.andi %14, %c-32_i256 : i256 loc(#loc12) -// STRIP-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc12) -// STRIP-NEXT: ^bb13(%63: i256 loc({{.*}}:20:4)): // 2 preds: ^bb12, ^bb14 -// STRIP-NEXT: %64 = arith.cmpi ult, %63, %62 : i256 loc(#loc12) -// STRIP-NEXT: cf.cond_br %64, ^bb14(%63 : i256), ^bb15 loc(#loc12) -// STRIP-NEXT: ^bb14(%65: i256 loc({{.*}}:20:4)): // pred: ^bb13 -// STRIP-NEXT: %66 = arith.divui %65, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %67 = arith.addi %61, %65 : i256 loc(#loc12) -// STRIP-NEXT: %68 = llvm.inttoptr %67 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %69 = llvm.load %68 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// STRIP-NEXT: %70 = arith.addi %60, %66 : i256 loc(#loc12) -// STRIP-NEXT: %71 = llvm.inttoptr %70 : i256 to !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: llvm.store %69, %71 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: %72 = arith.addi %65, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: cf.br ^bb13(%72 : i256) loc(#loc12) -// STRIP-NEXT: ^bb15: // pred: ^bb13 -// STRIP-NEXT: %73 = arith.cmpi ult, %62, %14 : i256 loc(#loc12) -// STRIP-NEXT: cf.cond_br %73, ^bb16, ^bb17 loc(#loc12) -// STRIP-NEXT: ^bb16: // pred: ^bb15 -// STRIP-NEXT: %74 = arith.andi %14, %c31_i256 : i256 loc(#loc12) -// STRIP-NEXT: %75 = arith.divui %62, %c32_i256 : i256 loc(#loc12) -// STRIP-NEXT: %76 = arith.addi %61, %62 : i256 loc(#loc12) -// STRIP-NEXT: %77 = llvm.inttoptr %76 : i256 to !llvm.ptr<1> loc(#loc12) -// STRIP-NEXT: %78 = llvm.load %77 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc12) -// STRIP-NEXT: %79 = arith.muli %74, %c8_i256 : i256 loc(#loc12) -// STRIP-NEXT: %80 = arith.subi %c256_i256, %79 : i256 loc(#loc12) -// STRIP-NEXT: %81 = arith.shli %c-1_i256, %80 : i256 loc(#loc12) -// STRIP-NEXT: %82 = arith.andi %78, %81 : i256 loc(#loc12) -// STRIP-NEXT: %83 = arith.addi %60, %75 : i256 loc(#loc12) -// STRIP-NEXT: %84 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: llvm.store %82, %84 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: cf.br ^bb17 loc(#loc12) -// STRIP-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// STRIP-NEXT: %85 = arith.muli %14, %c2_i256 : i256 loc(#loc12) -// STRIP-NEXT: %86 = arith.ori %85, %c1_i256 : i256 loc(#loc12) -// STRIP-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: llvm.store %86, %87 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// STRIP-NEXT: cf.br ^bb18 loc(#loc12) -// STRIP-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 -// STRIP-NEXT: %88 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc13) -// STRIP-NEXT: %89 = llvm.load %88 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) -// STRIP-NEXT: %90 = arith.shrui %89, %c1_i256 : i256 loc(#loc13) -// STRIP-NEXT: %91 = arith.andi %89, %c1_i256 : i256 loc(#loc13) -// STRIP-NEXT: %92 = arith.cmpi eq, %91, %c0_i256 : i256 loc(#loc13) -// STRIP-NEXT: %93 = arith.andi %90, %c127_i256 : i256 loc(#loc13) -// STRIP-NEXT: %94 = arith.select %92, %93, %90 : i256 loc(#loc13) -// STRIP-NEXT: %95 = arith.cmpi ult, %94, %c32_i256 : i256 loc(#loc13) -// STRIP-NEXT: %96 = arith.extui %95 : i1 to i256 loc(#loc13) -// STRIP-NEXT: %97 = arith.cmpi eq, %91, %96 : i256 loc(#loc13) -// STRIP-NEXT: cf.cond_br %97, ^bb19, ^bb20 loc(#loc13) -// STRIP-NEXT: ^bb19: // pred: ^bb18 -// STRIP-NEXT: %98 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %98 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %99 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %c34_i256, %99 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %100 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: "llvm.intrcall"(%100, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) -// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc13) -// STRIP-NEXT: cf.br ^bb20 loc(#loc13) -// STRIP-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// STRIP-NEXT: %101 = arith.addi %94, %c31_i256 : i256 loc(#loc13) -// STRIP-NEXT: %102 = arith.andi %101, %c-32_i256 : i256 loc(#loc13) -// STRIP-NEXT: %103 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %104 = llvm.load %103 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc13) -// STRIP-NEXT: %105 = arith.addi %102, %c63_i256 : i256 loc(#loc13) -// STRIP-NEXT: %106 = arith.andi %105, %c-32_i256 : i256 loc(#loc13) -// STRIP-NEXT: %107 = arith.addi %104, %106 : i256 loc(#loc13) -// STRIP-NEXT: %108 = arith.cmpi ugt, %107, %c18446744073709551615_i256 : i256 loc(#loc13) -// STRIP-NEXT: %109 = arith.cmpi ult, %107, %104 : i256 loc(#loc13) -// STRIP-NEXT: %110 = arith.ori %108, %109 : i1 loc(#loc13) -// STRIP-NEXT: cf.cond_br %110, ^bb21, ^bb22 loc(#loc13) -// STRIP-NEXT: ^bb21: // pred: ^bb20 -// STRIP-NEXT: %111 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %112 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %c65_i256, %112 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %113 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: "llvm.intrcall"(%113, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) -// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc13) -// STRIP-NEXT: cf.br ^bb22 loc(#loc13) -// STRIP-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// STRIP-NEXT: %114 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %107, %114 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %115 = llvm.inttoptr %104 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %94, %115 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %116 = arith.addi %104, %c32_i256 : i256 loc(#loc13) -// STRIP-NEXT: %117 = llvm.inttoptr %104 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %94, %117 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %118 = arith.andi %89, %c1_i256 : i256 loc(#loc13) -// STRIP-NEXT: %119 = arith.cmpi eq, %118, %c0_i256 : i256 loc(#loc13) -// STRIP-NEXT: cf.cond_br %119, ^bb26, ^bb23 loc(#loc13) -// STRIP-NEXT: ^bb23: // pred: ^bb22 -// STRIP-NEXT: %120 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %c0_i256, %120 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %121 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %122 = "llvm.intrcall"(%121, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc13) -// STRIP-NEXT: cf.br ^bb24(%c0_i256 : i256) loc(#loc13) -// STRIP-NEXT: ^bb24(%123: i256 loc({{.*}}:4:2)): // 2 preds: ^bb23, ^bb25 -// STRIP-NEXT: %124 = arith.cmpi ult, %123, %94 : i256 loc(#loc13) -// STRIP-NEXT: cf.cond_br %124, ^bb25(%123 : i256), ^bb27 loc(#loc13) -// STRIP-NEXT: ^bb25(%125: i256 loc({{.*}}:4:2)): // pred: ^bb24 -// STRIP-NEXT: %126 = arith.divui %125, %c32_i256 : i256 loc(#loc13) -// STRIP-NEXT: %127 = arith.addi %122, %126 : i256 loc(#loc13) -// STRIP-NEXT: %128 = llvm.inttoptr %127 : i256 to !llvm.ptr<5> loc(#loc13) -// STRIP-NEXT: %129 = llvm.load %128 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) -// STRIP-NEXT: %130 = arith.addi %116, %125 : i256 loc(#loc13) -// STRIP-NEXT: %131 = llvm.inttoptr %130 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %129, %131 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: %132 = arith.addi %125, %c32_i256 : i256 loc(#loc13) -// STRIP-NEXT: cf.br ^bb24(%132 : i256) loc(#loc13) -// STRIP-NEXT: ^bb26: // pred: ^bb22 -// STRIP-NEXT: %133 = arith.andi %89, %c-256_i256 : i256 loc(#loc13) -// STRIP-NEXT: %134 = llvm.inttoptr %116 : i256 to !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: llvm.store %133, %134 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// STRIP-NEXT: cf.br ^bb27 loc(#loc13) -// STRIP-NEXT: ^bb27: // 2 preds: ^bb24, ^bb26 -// STRIP-NEXT: return %104 : i256 loc(#loc14) -// STRIP-NEXT: } loc(#loc10) +// STRIP-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %37 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %c65_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: "llvm.intrcall"(%38, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// STRIP-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// STRIP-NEXT: cf.br ^bb6 loc(#loc2) +// STRIP-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// STRIP-NEXT: %39 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %32, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %40 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %19, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: %41 = arith.addi %29, %c32_i256 : i256 loc(#loc2) +// STRIP-NEXT: %42 = llvm.inttoptr %29 : i256 to !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: llvm.store %19, %42 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// STRIP-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %14, %19, %41) : (i256, i256, i256, i256) -> () loc(#loc2) +// STRIP-NEXT: return %29 : i256 loc(#loc14) +// STRIP-NEXT: } loc(#loc12) // STRIP-NEXT: func.func @i_40() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // STRIP-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc16) // STRIP-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) @@ -1671,15 +1729,15 @@ contract C { // STRIP-NEXT: } loc(#loc) // STRIP-NEXT: #loc = loc(unknown) // STRIP-NEXT: #loc1 = loc({{.*}}:3:0) -// STRIP-NEXT: #loc2 = loc({{.*}}:26:2) -// STRIP-NEXT: #loc3 = loc({{.*}}:27:11) -// STRIP-NEXT: #loc4 = loc({{.*}}:27:4) -// STRIP-NEXT: #loc5 = loc({{.*}}:23:2) -// STRIP-NEXT: #loc7 = loc({{.*}}:24:12) -// STRIP-NEXT: #loc8 = loc({{.*}}:24:15) -// STRIP-NEXT: #loc9 = loc({{.*}}:24:4) -// STRIP-NEXT: #loc10 = loc({{.*}}:19:2) -// STRIP-NEXT: #loc11 = loc({{.*}}:20:13) +// STRIP-NEXT: #loc4 = loc({{.*}}:26:2) +// STRIP-NEXT: #loc5 = loc({{.*}}:27:11) +// STRIP-NEXT: #loc6 = loc({{.*}}:27:4) +// STRIP-NEXT: #loc7 = loc({{.*}}:23:2) +// STRIP-NEXT: #loc9 = loc({{.*}}:24:12) +// STRIP-NEXT: #loc10 = loc({{.*}}:24:15) +// STRIP-NEXT: #loc11 = loc({{.*}}:24:4) +// STRIP-NEXT: #loc12 = loc({{.*}}:19:2) +// STRIP-NEXT: #loc13 = loc({{.*}}:20:13) // STRIP-NEXT: #loc14 = loc({{.*}}:21:4) // STRIP-NEXT: #loc15 = loc({{.*}}:14:2) // STRIP-NEXT: #loc16 = loc({{.*}}:15:4) diff --git a/test/lit/mlirCodegen/EVM/state-var.sol b/test/lit/mlirCodegen/EVM/state-var.sol index 08bd12ac0..7f10616a6 100644 --- a/test/lit/mlirCodegen/EVM/state-var.sol +++ b/test/lit/mlirCodegen/EVM/state-var.sol @@ -26,10 +26,10 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:22:17) -// CHECK-NEXT: #loc5 = loc({{.*}}:22:44) -// CHECK-NEXT: #loc7 = loc({{.*}}:21:20) -// CHECK-NEXT: #loc11 = loc({{.*}}:9:2) +// CHECK-NEXT: #loc2 = loc({{.*}}:22:44) +// CHECK-NEXT: #loc3 = loc({{.*}}:9:2) +// CHECK-NEXT: #loc5 = loc({{.*}}:22:17) +// CHECK-NEXT: #loc8 = loc({{.*}}:21:20) // CHECK-NEXT: #loc14 = loc({{.*}}:18:19) // CHECK-NEXT: #loc15 = loc({{.*}}:18:27) // CHECK-NEXT: #loc20 = loc({{.*}}:17:19) @@ -123,7 +123,39 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) -// CHECK-NEXT: func.func @set_s_154(%arg0: i256 loc({{.*}}:22:17)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:22:44), %arg1: i256 loc({{.*}}:22:44), %arg2: i256 loc({{.*}}:22:44)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:22:44)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:22:44)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:22:44), %arg1: i256 loc({{.*}}:22:44)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) @@ -137,147 +169,162 @@ contract C { // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc4) -// CHECK-NEXT: %2 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %4 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %6 = arith.shrui %5, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %7 = arith.andi %5, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %8 = arith.cmpi eq, %7, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: %9 = arith.andi %6, %c127_i256 : i256 loc(#loc5) -// CHECK-NEXT: %10 = arith.select %8, %9, %6 : i256 loc(#loc5) -// CHECK-NEXT: %11 = arith.cmpi ult, %10, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %12 = arith.extui %11 : i1 to i256 loc(#loc5) -// CHECK-NEXT: %13 = arith.cmpi eq, %7, %12 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %13, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c34_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %17 = arith.cmpi ugt, %10, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb6 loc(#loc5) +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c6_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %21 = arith.addi %3, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %22 = arith.divui %21, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %23 = arith.addi %20, %22 : i256 loc(#loc5) -// CHECK-NEXT: %24 = arith.cmpi ult, %3, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %25 = arith.select %24, %20, %23 : i256 loc(#loc5) -// CHECK-NEXT: %26 = arith.addi %10, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %27 = arith.divui %26, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %28 = arith.addi %20, %27 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%25 : i256) loc(#loc5) -// CHECK-NEXT: ^bb4(%29: i256 loc({{.*}}:22:44)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %30 = arith.cmpi ult, %29, %28 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %30, ^bb5(%29 : i256), ^bb6 loc(#loc5) -// CHECK-NEXT: ^bb5(%31: i256 loc({{.*}}:22:44)): // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %31 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %33 = arith.addi %31, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb4(%33 : i256) loc(#loc5) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %34 = arith.cmpi ugt, %3, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %34, ^bb10, ^bb7 loc(#loc5) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %35 = arith.cmpi ne, %3, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %35, ^bb9, ^bb8 loc(#loc5) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %36 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc2) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc2) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:22:44)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc2) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:22:44)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc2) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc2) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc2) // CHECK-NEXT: ^bb9: // pred: ^bb7 -// CHECK-NEXT: %37 = arith.addi %1, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %40 = arith.muli %3, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %41 = arith.subi %c256_i256, %40 : i256 loc(#loc5) -// CHECK-NEXT: %42 = arith.shli %c-1_i256, %41 : i256 loc(#loc5) -// CHECK-NEXT: %43 = arith.andi %39, %42 : i256 loc(#loc5) -// CHECK-NEXT: %44 = arith.muli %3, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %45 = arith.ori %43, %44 : i256 loc(#loc5) -// CHECK-NEXT: %46 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) -// CHECK-NEXT: ^bb10: // pred: ^bb6 -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c6_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %49 = "llvm.intrcall"(%48, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %50 = arith.addi %1, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %51 = arith.andi %3, %c-32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc5) -// CHECK-NEXT: ^bb11(%52: i256 loc({{.*}}:22:44)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %53 = arith.cmpi ult, %52, %51 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %53, ^bb12(%52 : i256), ^bb13 loc(#loc5) -// CHECK-NEXT: ^bb12(%54: i256 loc({{.*}}:22:44)): // pred: ^bb11 -// CHECK-NEXT: %55 = arith.divui %54, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %56 = arith.addi %50, %54 : i256 loc(#loc5) -// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %58 = llvm.load %57 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %59 = arith.addi %49, %55 : i256 loc(#loc5) -// CHECK-NEXT: %60 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %58, %60 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %61 = arith.addi %54, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: cf.br ^bb11(%61 : i256) loc(#loc5) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %62 = arith.cmpi ult, %51, %3 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %62, ^bb14, ^bb15 loc(#loc5) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %63 = arith.andi %3, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %64 = arith.divui %51, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %65 = arith.addi %50, %51 : i256 loc(#loc5) -// CHECK-NEXT: %66 = llvm.inttoptr %65 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %67 = llvm.load %66 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %68 = arith.muli %63, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %69 = arith.subi %c256_i256, %68 : i256 loc(#loc5) -// CHECK-NEXT: %70 = arith.shli %c-1_i256, %69 : i256 loc(#loc5) -// CHECK-NEXT: %71 = arith.andi %67, %70 : i256 loc(#loc5) -// CHECK-NEXT: %72 = arith.addi %49, %64 : i256 loc(#loc5) -// CHECK-NEXT: %73 = llvm.inttoptr %72 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %71, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb15 loc(#loc5) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %74 = arith.muli %3, %c2_i256 : i256 loc(#loc5) -// CHECK-NEXT: %75 = arith.ori %74, %c1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %76 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %75, %76 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: cf.br ^bb16 loc(#loc5) -// CHECK-NEXT: ^bb16: // 3 preds: ^bb8, ^bb9, ^bb15 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc2) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc2) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc2) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc2) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc2) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 // CHECK-NEXT: return loc(#loc2) // CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:9:2), %arg1: i256 loc({{.*}}:9:2), %arg2: i256 loc({{.*}}:9:2), %arg3: i256 loc({{.*}}:9:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc3) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:9:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc3) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:9:2)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc3) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc3) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: cf.br ^bb5 loc(#loc3) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @set_s_154(%arg0: i256 loc({{.*}}:22:17)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc5) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc5) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc5) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc6) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%1, %c6_i256) : (i256, i256) -> () loc(#loc2) +// CHECK-NEXT: return loc(#loc4) +// CHECK-NEXT: } loc(#loc4) // CHECK-NEXT: func.func @set_addr_144(%arg0: i256 loc({{.*}}:21:20)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-1461501637330902918203684832716283019655932542976_i256 = arith.constant -1461501637330902918203684832716283019655932542976 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc7) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc7) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc8) -// CHECK-NEXT: %2 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc9) -// CHECK-NEXT: %3 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %5 = arith.andi %4, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc9) -// CHECK-NEXT: %6 = arith.ori %5, %2 : i256 loc(#loc9) -// CHECK-NEXT: %7 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: llvm.store %6, %7 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: return loc(#loc6) -// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc8) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc8) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc9) +// CHECK-NEXT: %2 = arith.andi %1, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc10) +// CHECK-NEXT: %3 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc10) +// CHECK-NEXT: %5 = arith.andi %4, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc10) +// CHECK-NEXT: %6 = arith.ori %5, %2 : i256 loc(#loc10) +// CHECK-NEXT: %7 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: llvm.store %6, %7 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: return loc(#loc7) +// CHECK-NEXT: } loc(#loc7) // CHECK-NEXT: func.func @get_s_134() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -291,86 +338,59 @@ contract C { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc11) -// CHECK-NEXT: %0 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc11) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc11) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc11) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc11) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc11) +// CHECK-NEXT: %c6_i256 = arith.constant 6 : i256 loc(#loc3) +// CHECK-NEXT: %0 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc3) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// CHECK-NEXT: cf.br ^bb2 loc(#loc11) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc11) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc11) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc11) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc11) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc11) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc11) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc11) +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc3) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc3) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc3) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc3) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// CHECK-NEXT: cf.br ^bb4 loc(#loc11) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb4 loc(#loc3) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc11) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c6_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc11) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc11) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:9:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc11) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:9:2)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc11) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc11) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc11) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc11) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: cf.br ^bb9 loc(#loc11) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c6_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc3) // CHECK-NEXT: return %16 : i256 loc(#loc12) -// CHECK-NEXT: } loc(#loc10) +// CHECK-NEXT: } loc(#loc11) // CHECK-NEXT: func.func @set_mc1_126(%arg0: i256 loc({{.*}}:18:19), %arg1: i256 loc({{.*}}:18:27)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-1461501637330902918203684832716283019655932542976_i256 = arith.constant -1461501637330902918203684832716283019655932542976 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) @@ -536,12 +556,12 @@ contract C { // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:22:2) -// CHECK-NEXT: #loc4 = loc({{.*}}:22:48) -// CHECK-NEXT: #loc6 = loc({{.*}}:21:2) -// CHECK-NEXT: #loc8 = loc({{.*}}:21:48) -// CHECK-NEXT: #loc9 = loc({{.*}}:21:41) -// CHECK-NEXT: #loc10 = loc({{.*}}:19:2) +// CHECK-NEXT: #loc4 = loc({{.*}}:22:2) +// CHECK-NEXT: #loc6 = loc({{.*}}:22:48) +// CHECK-NEXT: #loc7 = loc({{.*}}:21:2) +// CHECK-NEXT: #loc9 = loc({{.*}}:21:48) +// CHECK-NEXT: #loc10 = loc({{.*}}:21:41) +// CHECK-NEXT: #loc11 = loc({{.*}}:19:2) // CHECK-NEXT: #loc12 = loc({{.*}}:19:53) // CHECK-NEXT: #loc13 = loc({{.*}}:18:2) // CHECK-NEXT: #loc16 = loc({{.*}}:18:46) diff --git a/test/lit/mlirCodegen/EVM/storage-string.sol b/test/lit/mlirCodegen/EVM/storage-string.sol index 3698bfac3..07a92812c 100644 --- a/test/lit/mlirCodegen/EVM/storage-string.sol +++ b/test/lit/mlirCodegen/EVM/storage-string.sol @@ -67,17 +67,17 @@ contract Test { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc3 = loc({{.*}}:62:17) -// CHECK-NEXT: #loc7 = loc({{.*}}:58:17) -// CHECK-NEXT: #loc17 = loc({{.*}}:3:2) -// CHECK-NEXT: #loc20 = loc({{.*}}:42:14) -// CHECK-NEXT: #loc22 = loc({{.*}}:43:4) -// CHECK-NEXT: #loc24 = loc({{.*}}:39:4) -// CHECK-NEXT: #loc26 = loc({{.*}}:34:13) -// CHECK-NEXT: #loc28 = loc({{.*}}:35:4) -// CHECK-NEXT: #loc35 = loc({{.*}}:23:4) -// CHECK-NEXT: #loc37 = loc({{.*}}:19:4) -// CHECK-NEXT: #loc39 = loc({{.*}}:15:4) +// CHECK-NEXT: #loc2 = loc({{.*}}:3:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:43:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:39:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:35:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:62:17) +// CHECK-NEXT: #loc11 = loc({{.*}}:58:17) +// CHECK-NEXT: #loc23 = loc({{.*}}:42:14) +// CHECK-NEXT: #loc28 = loc({{.*}}:34:13) +// CHECK-NEXT: #loc36 = loc({{.*}}:23:4) +// CHECK-NEXT: #loc38 = loc({{.*}}:19:4) +// CHECK-NEXT: #loc40 = loc({{.*}}:15:4) // CHECK-NEXT: module @Test_156 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -633,13 +633,48 @@ contract Test { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) -// CHECK-NEXT: func.func @m4dyn_155(%arg0: i256 loc({{.*}}:62:17)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:3:2), %arg1: i256 loc({{.*}}:3:2), %arg2: i256 loc({{.*}}:3:2), %arg3: i256 loc({{.*}}:3:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:3:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:3:2)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy.calldata.storage.string(%arg0: i256 loc({{.*}}:43:4), %arg1: i256 loc({{.*}}:43:4), %arg2: i256 loc({{.*}}:43:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) @@ -648,10 +683,272 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc4) -// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %0 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg2, %6, %arg1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %13 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %14 = arith.cmpi ne, %arg1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %14, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %15 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %16 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %18 = arith.muli %arg1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = arith.subi %c256_i256, %18 : i256 loc(#loc3) +// CHECK-NEXT: %20 = arith.shli %c-1_i256, %19 : i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.andi %17, %20 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.muli %arg1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.ori %21, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg2, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %28 = arith.andi %arg1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%29: i256 loc({{.*}}:43:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %30 = arith.cmpi ult, %29, %28 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %30, ^bb8(%29 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%31: i256 loc({{.*}}:43:4)): // pred: ^bb7 +// CHECK-NEXT: %32 = arith.divui %31, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %33 = arith.addi %arg0, %31 : i256 loc(#loc3) +// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %36 = arith.addi %27, %32 : i256 loc(#loc3) +// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %35, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %38 = arith.addi %31, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%38 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %39 = arith.cmpi ult, %28, %arg1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %39, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %40 = arith.andi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %41 = arith.divui %28, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %arg0, %28 : i256 loc(#loc3) +// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %44 = llvm.load %43 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.muli %40, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.subi %c256_i256, %45 : i256 loc(#loc3) +// CHECK-NEXT: %47 = arith.shli %c-1_i256, %46 : i256 loc(#loc3) +// CHECK-NEXT: %48 = arith.andi %44, %47 : i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.addi %27, %41 : i256 loc(#loc3) +// CHECK-NEXT: %50 = llvm.inttoptr %49 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %48, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %51 = arith.muli %arg1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.ori %51, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %53 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.copy.storage.storage.string(%arg0: i256 loc({{.*}}:39:4), %arg1: i256 loc({{.*}}:39:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc4) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc4) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc4) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %13 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %15 = arith.shrui %14, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %16 = arith.andi %14, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %17 = arith.cmpi eq, %16, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: %18 = arith.andi %15, %c127_i256 : i256 loc(#loc4) +// CHECK-NEXT: %19 = arith.select %17, %18, %15 : i256 loc(#loc4) +// CHECK-NEXT: %20 = arith.cmpi ult, %19, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %21 = arith.extui %20 : i1 to i256 loc(#loc4) +// CHECK-NEXT: %22 = arith.cmpi eq, %16, %21 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc4) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c34_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb4 loc(#loc4) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %19, %6) : (i256, i256, i256) -> () loc(#loc4) +// CHECK-NEXT: %26 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %26, ^bb8, ^bb5 loc(#loc4) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %27 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %27, ^bb7, ^bb6 loc(#loc4) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %28 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb14 loc(#loc4) +// CHECK-NEXT: ^bb7: // pred: ^bb5 +// CHECK-NEXT: %29 = arith.muli %6, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %30 = arith.subi %c256_i256, %29 : i256 loc(#loc4) +// CHECK-NEXT: %31 = arith.shli %c-1_i256, %30 : i256 loc(#loc4) +// CHECK-NEXT: %32 = arith.andi %1, %31 : i256 loc(#loc4) +// CHECK-NEXT: %33 = arith.muli %6, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: %34 = arith.ori %32, %33 : i256 loc(#loc4) +// CHECK-NEXT: %35 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %34, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb14 loc(#loc4) +// CHECK-NEXT: ^bb8: // pred: ^bb4 +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %arg1, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %38 = "llvm.intrcall"(%37, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %arg0, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %41 = "llvm.intrcall"(%40, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %42 = arith.andi %6, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb9(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb9(%43: i256 loc({{.*}}:39:4)): // 2 preds: ^bb8, ^bb10 +// CHECK-NEXT: %44 = arith.cmpi ult, %43, %42 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %44, ^bb10(%43 : i256), ^bb11 loc(#loc4) +// CHECK-NEXT: ^bb10(%45: i256 loc({{.*}}:39:4)): // pred: ^bb9 +// CHECK-NEXT: %46 = arith.divui %45, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %47 = arith.addi %41, %46 : i256 loc(#loc4) +// CHECK-NEXT: %48 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %50 = arith.addi %38, %46 : i256 loc(#loc4) +// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %49, %51 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %52 = arith.addi %45, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb9(%52 : i256) loc(#loc4) +// CHECK-NEXT: ^bb11: // pred: ^bb9 +// CHECK-NEXT: %53 = arith.cmpi ult, %42, %6 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %53, ^bb12, ^bb13 loc(#loc4) +// CHECK-NEXT: ^bb12: // pred: ^bb11 +// CHECK-NEXT: %54 = arith.andi %6, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %55 = arith.divui %42, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %56 = arith.addi %41, %55 : i256 loc(#loc4) +// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %58 = llvm.load %57 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %59 = arith.muli %54, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %60 = arith.subi %c256_i256, %59 : i256 loc(#loc4) +// CHECK-NEXT: %61 = arith.shli %c-1_i256, %60 : i256 loc(#loc4) +// CHECK-NEXT: %62 = arith.andi %58, %61 : i256 loc(#loc4) +// CHECK-NEXT: %63 = arith.addi %38, %55 : i256 loc(#loc4) +// CHECK-NEXT: %64 = llvm.inttoptr %63 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %62, %64 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb13 loc(#loc4) +// CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 +// CHECK-NEXT: %65 = arith.muli %6, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: %66 = arith.ori %65, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %67 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %66, %67 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb14 loc(#loc4) +// CHECK-NEXT: ^bb14: // 3 preds: ^bb6, ^bb7, ^bb13 +// CHECK-NEXT: return loc(#loc4) +// CHECK-NEXT: } loc(#loc4) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:35:4), %arg1: i256 loc({{.*}}:35:4), %arg2: i256 loc({{.*}}:35:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc5) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc5) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc5) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc5) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:35:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc5) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:35:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc5) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:35:4), %arg1: i256 loc({{.*}}:35:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) // CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) // CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc5) // CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc5) @@ -672,42 +969,80 @@ contract Test { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) // CHECK-NEXT: cf.br ^bb2 loc(#loc5) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %15 = arith.cmpi uge, %1, %8 : i256 loc(#loc5) -// CHECK-NEXT: cf.cond_br %15, ^bb3, ^bb4 loc(#loc5) +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc5) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc5) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %17 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c50_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%18, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb4 loc(#loc5) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %19 = arith.cmpi ugt, %8, %c31_i256 : i256 loc(#loc5) -// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %22 = "llvm.intrcall"(%21, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) -// CHECK-NEXT: %23 = arith.select %19, %22, %c0_i256 : i256 loc(#loc5) -// CHECK-NEXT: %24 = arith.divui %1, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %25 = arith.remui %1, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %26 = arith.subi %c31_i256, %25 : i256 loc(#loc5) -// CHECK-NEXT: %27 = arith.addi %23, %24 : i256 loc(#loc5) -// CHECK-NEXT: %28 = arith.muli %26, %c8_i256 : i256 loc(#loc5) -// CHECK-NEXT: %29 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %31 = arith.shli %c255_i256, %28 : i256 loc(#loc5) -// CHECK-NEXT: %32 = arith.xori %31, %c-1_i256 : i256 loc(#loc5) -// CHECK-NEXT: %33 = arith.andi %30, %32 : i256 loc(#loc5) -// CHECK-NEXT: %34 = arith.shli %c65_i256, %28 : i256 loc(#loc5) -// CHECK-NEXT: %35 = arith.ori %33, %34 : i256 loc(#loc5) -// CHECK-NEXT: %36 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: return loc(#loc2) -// CHECK-NEXT: } loc(#loc2) -// CHECK-NEXT: func.func @m3dyn_143(%arg0: i256 loc({{.*}}:58:17)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c248_i256 = arith.constant 248 : i256 loc(#loc) +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc5) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb12 loc(#loc5) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc5) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc5) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc5) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc5) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb12 loc(#loc5) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:35:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc5) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:35:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc5) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc5) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc5) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc5) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc5) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc5) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc5) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc5) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc5) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb11 loc(#loc5) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb12 loc(#loc5) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: func.func @m4dyn_155(%arg0: i256 loc({{.*}}:62:17)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) @@ -765,13 +1100,84 @@ contract Test { // CHECK-NEXT: %25 = arith.remui %1, %c32_i256 : i256 loc(#loc9) // CHECK-NEXT: %26 = arith.subi %c31_i256, %25 : i256 loc(#loc9) // CHECK-NEXT: %27 = arith.addi %23, %24 : i256 loc(#loc9) -// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %30 = arith.muli %26, %c8_i256 : i256 loc(#loc9) -// CHECK-NEXT: %31 = arith.shrui %29, %30 : i256 loc(#loc9) -// CHECK-NEXT: %32 = arith.shli %31, %c248_i256 : i256 loc(#loc9) -// CHECK-NEXT: return %32 : i256 loc(#loc10) +// CHECK-NEXT: %28 = arith.muli %26, %c8_i256 : i256 loc(#loc9) +// CHECK-NEXT: %29 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %30 = llvm.load %29 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %31 = arith.shli %c255_i256, %28 : i256 loc(#loc9) +// CHECK-NEXT: %32 = arith.xori %31, %c-1_i256 : i256 loc(#loc9) +// CHECK-NEXT: %33 = arith.andi %30, %32 : i256 loc(#loc9) +// CHECK-NEXT: %34 = arith.shli %c65_i256, %28 : i256 loc(#loc9) +// CHECK-NEXT: %35 = arith.ori %33, %34 : i256 loc(#loc9) +// CHECK-NEXT: %36 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: return loc(#loc6) // CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: func.func @m3dyn_143(%arg0: i256 loc({{.*}}:58:17)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c248_i256 = arith.constant 248 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c50_i256 = arith.constant 50 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc11) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc11) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc12) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc13) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc13) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc13) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc13) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc13) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc13) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc13) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc13) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb2 loc(#loc13) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %15 = arith.cmpi uge, %1, %8 : i256 loc(#loc13) +// CHECK-NEXT: cf.cond_br %15, ^bb3, ^bb4 loc(#loc13) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %17 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c50_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: "llvm.intrcall"(%18, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc13) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc13) +// CHECK-NEXT: cf.br ^bb4 loc(#loc13) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %19 = arith.cmpi ugt, %8, %c31_i256 : i256 loc(#loc13) +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) +// CHECK-NEXT: %22 = "llvm.intrcall"(%21, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc13) +// CHECK-NEXT: %23 = arith.select %19, %22, %c0_i256 : i256 loc(#loc13) +// CHECK-NEXT: %24 = arith.divui %1, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %25 = arith.remui %1, %c32_i256 : i256 loc(#loc13) +// CHECK-NEXT: %26 = arith.subi %c31_i256, %25 : i256 loc(#loc13) +// CHECK-NEXT: %27 = arith.addi %23, %24 : i256 loc(#loc13) +// CHECK-NEXT: %28 = llvm.inttoptr %27 : i256 to !llvm.ptr<5> loc(#loc13) +// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) +// CHECK-NEXT: %30 = arith.muli %26, %c8_i256 : i256 loc(#loc13) +// CHECK-NEXT: %31 = arith.shrui %29, %30 : i256 loc(#loc13) +// CHECK-NEXT: %32 = arith.shli %31, %c248_i256 : i256 loc(#loc13) +// CHECK-NEXT: return %32 : i256 loc(#loc14) +// CHECK-NEXT: } loc(#loc10) // CHECK-NEXT: func.func @m4_131() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c24319387245186224558909315616398949447074717515120640_i256 = arith.constant 24319387245186224558909315616398949447074717515120640 : i256 loc(#loc) // CHECK-NEXT: %c-95406826884961342500336545879718955523139276405473281_i256 = arith.constant -95406826884961342500336545879718955523139276405473281 : i256 loc(#loc) @@ -785,54 +1191,54 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc12) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc12) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc12) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc12) +// CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc16) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc16) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc16) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc16) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc16) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc16) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc16) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc16) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc16) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc16) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb2 loc(#loc12) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) +// CHECK-NEXT: cf.br ^bb2 loc(#loc16) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.cmpi ule, %6, %c10_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc12) +// CHECK-NEXT: %13 = arith.cmpi ule, %6, %c10_i256 : i256 loc(#loc16) +// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc16) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c50_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb4 loc(#loc12) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c50_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) +// CHECK-NEXT: cf.br ^bb4 loc(#loc16) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %21 = arith.select %17, %20, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %24 = arith.andi %23, %c-95406826884961342500336545879718955523139276405473281_i256 : i256 loc(#loc12) -// CHECK-NEXT: %25 = arith.ori %24, %c24319387245186224558909315616398949447074717515120640_i256 : i256 loc(#loc12) -// CHECK-NEXT: %26 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %25, %26 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: return loc(#loc11) -// CHECK-NEXT: } loc(#loc11) +// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc16) +// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) +// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) +// CHECK-NEXT: %21 = arith.select %17, %20, %c0_i256 : i256 loc(#loc16) +// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) +// CHECK-NEXT: %24 = arith.andi %23, %c-95406826884961342500336545879718955523139276405473281_i256 : i256 loc(#loc16) +// CHECK-NEXT: %25 = arith.ori %24, %c24319387245186224558909315616398949447074717515120640_i256 : i256 loc(#loc16) +// CHECK-NEXT: %26 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: llvm.store %25, %26 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: return loc(#loc15) +// CHECK-NEXT: } loc(#loc15) // CHECK-NEXT: func.func @m3_121() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c168_i256 = arith.constant 168 : i256 loc(#loc) // CHECK-NEXT: %c248_i256 = arith.constant 248 : i256 loc(#loc) @@ -846,55 +1252,54 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc14) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc14) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc14) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc14) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc14) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc14) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc14) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc14) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc14) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc14) +// CHECK-NEXT: %c10_i256 = arith.constant 10 : i256 loc(#loc18) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc18) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc18) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc18) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc18) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc18) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc18) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc18) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc18) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc18) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc18) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc14) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc14) -// CHECK-NEXT: cf.br ^bb2 loc(#loc14) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc18) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc18) +// CHECK-NEXT: cf.br ^bb2 loc(#loc18) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.cmpi ule, %6, %c10_i256 : i256 loc(#loc14) -// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc14) +// CHECK-NEXT: %13 = arith.cmpi ule, %6, %c10_i256 : i256 loc(#loc18) +// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc18) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c50_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc14) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc14) -// CHECK-NEXT: cf.br ^bb4 loc(#loc14) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c50_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc18) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc18) +// CHECK-NEXT: cf.br ^bb4 loc(#loc18) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc14) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc14) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc14) -// CHECK-NEXT: %21 = arith.select %17, %20, %c0_i256 : i256 loc(#loc14) -// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc14) -// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc14) -// CHECK-NEXT: %24 = arith.shrui %23, %c168_i256 : i256 loc(#loc14) -// CHECK-NEXT: %25 = arith.shli %24, %c248_i256 : i256 loc(#loc14) -// CHECK-NEXT: return %25 : i256 loc(#loc15) -// CHECK-NEXT: } loc(#loc13) +// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc18) +// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc18) +// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc18) +// CHECK-NEXT: %21 = arith.select %17, %20, %c0_i256 : i256 loc(#loc18) +// CHECK-NEXT: %22 = llvm.inttoptr %21 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc18) +// CHECK-NEXT: %24 = arith.shrui %23, %c168_i256 : i256 loc(#loc18) +// CHECK-NEXT: %25 = arith.shli %24, %c248_i256 : i256 loc(#loc18) +// CHECK-NEXT: return %25 : i256 loc(#loc19) +// CHECK-NEXT: } loc(#loc17) // CHECK-NEXT: func.func @m2_111() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -908,505 +1313,84 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc17) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc17) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc17) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc17) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc17) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) -// CHECK-NEXT: cf.br ^bb2 loc(#loc17) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc17) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc17) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc17) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc17) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc17) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc17) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc17) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc17) +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc2) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc17) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc17) -// CHECK-NEXT: cf.br ^bb4 loc(#loc17) +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc17) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc17) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc17) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc17) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:3:2)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc17) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc17) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:3:2)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc17) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc17) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc17) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc17) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc17) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc17) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc17) -// CHECK-NEXT: cf.br ^bb9 loc(#loc17) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: return %16 : i256 loc(#loc18) -// CHECK-NEXT: } loc(#loc16) +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: return %16 : i256 loc(#loc21) +// CHECK-NEXT: } loc(#loc20) // CHECK-NEXT: func.func @cs_103(%arg0: !llvm.struct<(i256, i256)> loc({{.*}}:42:14)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc20) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc20) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc21) -// CHECK-NEXT: %2 = llvm.extractvalue %1[1] : !llvm.struct<(i256, i256)> loc(#loc22) -// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: %4 = llvm.load %3 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc22) -// CHECK-NEXT: %5 = arith.shrui %4, %c1_i256 : i256 loc(#loc22) -// CHECK-NEXT: %6 = arith.andi %4, %c1_i256 : i256 loc(#loc22) -// CHECK-NEXT: %7 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc22) -// CHECK-NEXT: %8 = arith.andi %5, %c127_i256 : i256 loc(#loc22) -// CHECK-NEXT: %9 = arith.select %7, %8, %5 : i256 loc(#loc22) -// CHECK-NEXT: %10 = arith.cmpi ult, %9, %c32_i256 : i256 loc(#loc22) -// CHECK-NEXT: %11 = arith.extui %10 : i1 to i256 loc(#loc22) -// CHECK-NEXT: %12 = arith.cmpi eq, %6, %11 : i256 loc(#loc22) -// CHECK-NEXT: cf.cond_br %12, ^bb1, ^bb2 loc(#loc22) -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: %14 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: llvm.store %c34_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: "llvm.intrcall"(%15, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc22) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc22) -// CHECK-NEXT: cf.br ^bb2 loc(#loc22) -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %16 = arith.cmpi ugt, %9, %c31_i256 : i256 loc(#loc22) -// CHECK-NEXT: cf.cond_br %16, ^bb3, ^bb6 loc(#loc22) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: %19 = "llvm.intrcall"(%18, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc22) -// CHECK-NEXT: %20 = arith.addi %2, %c31_i256 : i256 loc(#loc22) -// CHECK-NEXT: %21 = arith.divui %20, %c32_i256 : i256 loc(#loc22) -// CHECK-NEXT: %22 = arith.addi %19, %21 : i256 loc(#loc22) -// CHECK-NEXT: %23 = arith.cmpi ult, %2, %c32_i256 : i256 loc(#loc22) -// CHECK-NEXT: %24 = arith.select %23, %19, %22 : i256 loc(#loc22) -// CHECK-NEXT: %25 = arith.addi %9, %c31_i256 : i256 loc(#loc22) -// CHECK-NEXT: %26 = arith.divui %25, %c32_i256 : i256 loc(#loc22) -// CHECK-NEXT: %27 = arith.addi %19, %26 : i256 loc(#loc22) -// CHECK-NEXT: cf.br ^bb4(%24 : i256) loc(#loc22) -// CHECK-NEXT: ^bb4(%28: i256 loc({{.*}}:43:4)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %29 = arith.cmpi ult, %28, %27 : i256 loc(#loc22) -// CHECK-NEXT: cf.cond_br %29, ^bb5(%28 : i256), ^bb6 loc(#loc22) -// CHECK-NEXT: ^bb5(%30: i256 loc({{.*}}:43:4)): // pred: ^bb4 -// CHECK-NEXT: %31 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: llvm.store %c0_i256, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: %32 = arith.addi %30, %c1_i256 : i256 loc(#loc22) -// CHECK-NEXT: cf.br ^bb4(%32 : i256) loc(#loc22) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %33 = arith.cmpi ugt, %2, %c31_i256 : i256 loc(#loc22) -// CHECK-NEXT: cf.cond_br %33, ^bb10, ^bb7 loc(#loc22) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %34 = arith.cmpi ne, %2, %c0_i256 : i256 loc(#loc22) -// CHECK-NEXT: cf.cond_br %34, ^bb9, ^bb8 loc(#loc22) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %35 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: llvm.store %c0_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: cf.br ^bb16 loc(#loc22) -// CHECK-NEXT: ^bb9: // pred: ^bb7 -// CHECK-NEXT: %36 = llvm.extractvalue %1[0] : !llvm.struct<(i256, i256)> loc(#loc22) -// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<2> loc(#loc22) -// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc22) -// CHECK-NEXT: %39 = arith.muli %2, %c8_i256 : i256 loc(#loc22) -// CHECK-NEXT: %40 = arith.subi %c256_i256, %39 : i256 loc(#loc22) -// CHECK-NEXT: %41 = arith.shli %c-1_i256, %40 : i256 loc(#loc22) -// CHECK-NEXT: %42 = arith.andi %38, %41 : i256 loc(#loc22) -// CHECK-NEXT: %43 = arith.muli %2, %c2_i256 : i256 loc(#loc22) -// CHECK-NEXT: %44 = arith.ori %42, %43 : i256 loc(#loc22) -// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: cf.br ^bb16 loc(#loc22) -// CHECK-NEXT: ^bb10: // pred: ^bb6 -// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: llvm.store %c0_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc22) -// CHECK-NEXT: %48 = "llvm.intrcall"(%47, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc22) -// CHECK-NEXT: %49 = llvm.extractvalue %1[0] : !llvm.struct<(i256, i256)> loc(#loc22) -// CHECK-NEXT: %50 = arith.andi %2, %c-32_i256 : i256 loc(#loc22) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc22) -// CHECK-NEXT: ^bb11(%51: i256 loc({{.*}}:43:4)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %52 = arith.cmpi ult, %51, %50 : i256 loc(#loc22) -// CHECK-NEXT: cf.cond_br %52, ^bb12(%51 : i256), ^bb13 loc(#loc22) -// CHECK-NEXT: ^bb12(%53: i256 loc({{.*}}:43:4)): // pred: ^bb11 -// CHECK-NEXT: %54 = arith.divui %53, %c32_i256 : i256 loc(#loc22) -// CHECK-NEXT: %55 = arith.addi %49, %53 : i256 loc(#loc22) -// CHECK-NEXT: %56 = llvm.inttoptr %55 : i256 to !llvm.ptr<2> loc(#loc22) -// CHECK-NEXT: %57 = llvm.load %56 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc22) -// CHECK-NEXT: %58 = arith.addi %48, %54 : i256 loc(#loc22) -// CHECK-NEXT: %59 = llvm.inttoptr %58 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: llvm.store %57, %59 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: %60 = arith.addi %53, %c32_i256 : i256 loc(#loc22) -// CHECK-NEXT: cf.br ^bb11(%60 : i256) loc(#loc22) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %61 = arith.cmpi ult, %50, %2 : i256 loc(#loc22) -// CHECK-NEXT: cf.cond_br %61, ^bb14, ^bb15 loc(#loc22) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %62 = arith.andi %2, %c31_i256 : i256 loc(#loc22) -// CHECK-NEXT: %63 = arith.divui %50, %c32_i256 : i256 loc(#loc22) -// CHECK-NEXT: %64 = arith.addi %49, %50 : i256 loc(#loc22) -// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<2> loc(#loc22) -// CHECK-NEXT: %66 = llvm.load %65 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc22) -// CHECK-NEXT: %67 = arith.muli %62, %c8_i256 : i256 loc(#loc22) -// CHECK-NEXT: %68 = arith.subi %c256_i256, %67 : i256 loc(#loc22) -// CHECK-NEXT: %69 = arith.shli %c-1_i256, %68 : i256 loc(#loc22) -// CHECK-NEXT: %70 = arith.andi %66, %69 : i256 loc(#loc22) -// CHECK-NEXT: %71 = arith.addi %48, %63 : i256 loc(#loc22) -// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: llvm.store %70, %72 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: cf.br ^bb15 loc(#loc22) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %73 = arith.muli %2, %c2_i256 : i256 loc(#loc22) -// CHECK-NEXT: %74 = arith.ori %73, %c1_i256 : i256 loc(#loc22) -// CHECK-NEXT: %75 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: llvm.store %74, %75 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: cf.br ^bb16 loc(#loc22) -// CHECK-NEXT: ^bb16: // 3 preds: ^bb8, ^bb9, ^bb15 -// CHECK-NEXT: return loc(#loc19) -// CHECK-NEXT: } loc(#loc19) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc23) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x !llvm.struct<(i256, i256)> : (i256) -> !llvm.ptr loc(#loc23) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : !llvm.struct<(i256, i256)>, !llvm.ptr loc(#loc23) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> !llvm.struct<(i256, i256)> loc(#loc24) +// CHECK-NEXT: %2 = llvm.extractvalue %1[0] : !llvm.struct<(i256, i256)> loc(#loc3) +// CHECK-NEXT: %3 = llvm.extractvalue %1[1] : !llvm.struct<(i256, i256)> loc(#loc3) +// CHECK-NEXT: call @__sol.copy.calldata.storage.string(%2, %3, %c0_i256) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: return loc(#loc22) +// CHECK-NEXT: } loc(#loc22) // CHECK-NEXT: func.func @ss_93() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc24) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc24) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc24) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc24) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc24) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc24) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc24) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc24) -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc24) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc24) -// CHECK-NEXT: cf.br ^bb2 loc(#loc24) -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc24) -// CHECK-NEXT: %15 = arith.shrui %14, %c1_i256 : i256 loc(#loc24) -// CHECK-NEXT: %16 = arith.andi %14, %c1_i256 : i256 loc(#loc24) -// CHECK-NEXT: %17 = arith.cmpi eq, %16, %c0_i256 : i256 loc(#loc24) -// CHECK-NEXT: %18 = arith.andi %15, %c127_i256 : i256 loc(#loc24) -// CHECK-NEXT: %19 = arith.select %17, %18, %15 : i256 loc(#loc24) -// CHECK-NEXT: %20 = arith.cmpi ult, %19, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %21 = arith.extui %20 : i1 to i256 loc(#loc24) -// CHECK-NEXT: %22 = arith.cmpi eq, %16, %21 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc24) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c34_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc24) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc24) -// CHECK-NEXT: cf.br ^bb4 loc(#loc24) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = arith.cmpi ugt, %19, %c31_i256 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %26, ^bb5, ^bb8 loc(#loc24) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c1_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc24) -// CHECK-NEXT: %30 = arith.addi %6, %c31_i256 : i256 loc(#loc24) -// CHECK-NEXT: %31 = arith.divui %30, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %32 = arith.addi %29, %31 : i256 loc(#loc24) -// CHECK-NEXT: %33 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %34 = arith.select %33, %29, %32 : i256 loc(#loc24) -// CHECK-NEXT: %35 = arith.addi %19, %c31_i256 : i256 loc(#loc24) -// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %37 = arith.addi %29, %36 : i256 loc(#loc24) -// CHECK-NEXT: cf.br ^bb6(%34 : i256) loc(#loc24) -// CHECK-NEXT: ^bb6(%38: i256 loc({{.*}}:39:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %39 = arith.cmpi ult, %38, %37 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %39, ^bb7(%38 : i256), ^bb8 loc(#loc24) -// CHECK-NEXT: ^bb7(%40: i256 loc({{.*}}:39:4)): // pred: ^bb6 -// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: llvm.store %c0_i256, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %42 = arith.addi %40, %c1_i256 : i256 loc(#loc24) -// CHECK-NEXT: cf.br ^bb6(%42 : i256) loc(#loc24) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %43 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %43, ^bb12, ^bb9 loc(#loc24) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %44 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %44, ^bb11, ^bb10 loc(#loc24) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %45 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: llvm.store %c0_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: cf.br ^bb18 loc(#loc24) -// CHECK-NEXT: ^bb11: // pred: ^bb9 -// CHECK-NEXT: %46 = arith.muli %6, %c8_i256 : i256 loc(#loc24) -// CHECK-NEXT: %47 = arith.subi %c256_i256, %46 : i256 loc(#loc24) -// CHECK-NEXT: %48 = arith.shli %c-1_i256, %47 : i256 loc(#loc24) -// CHECK-NEXT: %49 = arith.andi %1, %48 : i256 loc(#loc24) -// CHECK-NEXT: %50 = arith.muli %6, %c2_i256 : i256 loc(#loc24) -// CHECK-NEXT: %51 = arith.ori %49, %50 : i256 loc(#loc24) -// CHECK-NEXT: %52 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: cf.br ^bb18 loc(#loc24) -// CHECK-NEXT: ^bb12: // pred: ^bb8 -// CHECK-NEXT: %53 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c1_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %54 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %55 = "llvm.intrcall"(%54, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc24) -// CHECK-NEXT: %56 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: llvm.store %c0_i256, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %57 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc24) -// CHECK-NEXT: %58 = "llvm.intrcall"(%57, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc24) -// CHECK-NEXT: %59 = arith.andi %6, %c-32_i256 : i256 loc(#loc24) -// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc24) -// CHECK-NEXT: ^bb13(%60: i256 loc({{.*}}:39:4)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %61 = arith.cmpi ult, %60, %59 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %61, ^bb14(%60 : i256), ^bb15 loc(#loc24) -// CHECK-NEXT: ^bb14(%62: i256 loc({{.*}}:39:4)): // pred: ^bb13 -// CHECK-NEXT: %63 = arith.divui %62, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %64 = arith.addi %58, %63 : i256 loc(#loc24) -// CHECK-NEXT: %65 = llvm.inttoptr %64 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %66 = llvm.load %65 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc24) -// CHECK-NEXT: %67 = arith.addi %55, %63 : i256 loc(#loc24) -// CHECK-NEXT: %68 = llvm.inttoptr %67 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: llvm.store %66, %68 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %69 = arith.addi %62, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: cf.br ^bb13(%69 : i256) loc(#loc24) -// CHECK-NEXT: ^bb15: // pred: ^bb13 -// CHECK-NEXT: %70 = arith.cmpi ult, %59, %6 : i256 loc(#loc24) -// CHECK-NEXT: cf.cond_br %70, ^bb16, ^bb17 loc(#loc24) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %71 = arith.andi %6, %c31_i256 : i256 loc(#loc24) -// CHECK-NEXT: %72 = arith.divui %59, %c32_i256 : i256 loc(#loc24) -// CHECK-NEXT: %73 = arith.addi %58, %72 : i256 loc(#loc24) -// CHECK-NEXT: %74 = llvm.inttoptr %73 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %75 = llvm.load %74 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc24) -// CHECK-NEXT: %76 = arith.muli %71, %c8_i256 : i256 loc(#loc24) -// CHECK-NEXT: %77 = arith.subi %c256_i256, %76 : i256 loc(#loc24) -// CHECK-NEXT: %78 = arith.shli %c-1_i256, %77 : i256 loc(#loc24) -// CHECK-NEXT: %79 = arith.andi %75, %78 : i256 loc(#loc24) -// CHECK-NEXT: %80 = arith.addi %55, %72 : i256 loc(#loc24) -// CHECK-NEXT: %81 = llvm.inttoptr %80 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: llvm.store %79, %81 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: cf.br ^bb17 loc(#loc24) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %82 = arith.muli %6, %c2_i256 : i256 loc(#loc24) -// CHECK-NEXT: %83 = arith.ori %82, %c1_i256 : i256 loc(#loc24) -// CHECK-NEXT: %84 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: llvm.store %83, %84 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: cf.br ^bb18 loc(#loc24) -// CHECK-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 -// CHECK-NEXT: return loc(#loc23) -// CHECK-NEXT: } loc(#loc23) -// CHECK-NEXT: func.func @m_85(%arg0: i256 loc({{.*}}:34:13)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc26) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc26) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc26) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc27) -// CHECK-NEXT: %2 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc28) -// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc28) -// CHECK-NEXT: %6 = arith.shrui %5, %c1_i256 : i256 loc(#loc28) -// CHECK-NEXT: %7 = arith.andi %5, %c1_i256 : i256 loc(#loc28) -// CHECK-NEXT: %8 = arith.cmpi eq, %7, %c0_i256 : i256 loc(#loc28) -// CHECK-NEXT: %9 = arith.andi %6, %c127_i256 : i256 loc(#loc28) -// CHECK-NEXT: %10 = arith.select %8, %9, %6 : i256 loc(#loc28) -// CHECK-NEXT: %11 = arith.cmpi ult, %10, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %12 = arith.extui %11 : i1 to i256 loc(#loc28) -// CHECK-NEXT: %13 = arith.cmpi eq, %7, %12 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %13, ^bb1, ^bb2 loc(#loc28) -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c34_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc28) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc28) -// CHECK-NEXT: cf.br ^bb2 loc(#loc28) -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %17 = arith.cmpi ugt, %10, %c31_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %17, ^bb3, ^bb6 loc(#loc28) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %18 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c0_i256, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %20 = "llvm.intrcall"(%19, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc28) -// CHECK-NEXT: %21 = arith.addi %3, %c31_i256 : i256 loc(#loc28) -// CHECK-NEXT: %22 = arith.divui %21, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %23 = arith.addi %20, %22 : i256 loc(#loc28) -// CHECK-NEXT: %24 = arith.cmpi ult, %3, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %25 = arith.select %24, %20, %23 : i256 loc(#loc28) -// CHECK-NEXT: %26 = arith.addi %10, %c31_i256 : i256 loc(#loc28) -// CHECK-NEXT: %27 = arith.divui %26, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %28 = arith.addi %20, %27 : i256 loc(#loc28) -// CHECK-NEXT: cf.br ^bb4(%25 : i256) loc(#loc28) -// CHECK-NEXT: ^bb4(%29: i256 loc({{.*}}:35:4)): // 2 preds: ^bb3, ^bb5 -// CHECK-NEXT: %30 = arith.cmpi ult, %29, %28 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %30, ^bb5(%29 : i256), ^bb6 loc(#loc28) -// CHECK-NEXT: ^bb5(%31: i256 loc({{.*}}:35:4)): // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %31 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: %33 = arith.addi %31, %c1_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.br ^bb4(%33 : i256) loc(#loc28) -// CHECK-NEXT: ^bb6: // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %34 = arith.cmpi ugt, %3, %c31_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %34, ^bb10, ^bb7 loc(#loc28) -// CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %35 = arith.cmpi ne, %3, %c0_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %35, ^bb9, ^bb8 loc(#loc28) -// CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %c0_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: cf.br ^bb16 loc(#loc28) -// CHECK-NEXT: ^bb9: // pred: ^bb7 -// CHECK-NEXT: %37 = arith.addi %1, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc28) -// CHECK-NEXT: %40 = arith.muli %3, %c8_i256 : i256 loc(#loc28) -// CHECK-NEXT: %41 = arith.subi %c256_i256, %40 : i256 loc(#loc28) -// CHECK-NEXT: %42 = arith.shli %c-1_i256, %41 : i256 loc(#loc28) -// CHECK-NEXT: %43 = arith.andi %39, %42 : i256 loc(#loc28) -// CHECK-NEXT: %44 = arith.muli %3, %c2_i256 : i256 loc(#loc28) -// CHECK-NEXT: %45 = arith.ori %43, %44 : i256 loc(#loc28) -// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: cf.br ^bb16 loc(#loc28) -// CHECK-NEXT: ^bb10: // pred: ^bb6 -// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: llvm.store %c0_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %48 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %49 = "llvm.intrcall"(%48, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc28) -// CHECK-NEXT: %50 = arith.addi %1, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %51 = arith.andi %3, %c-32_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc28) -// CHECK-NEXT: ^bb11(%52: i256 loc({{.*}}:35:4)): // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %53 = arith.cmpi ult, %52, %51 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %53, ^bb12(%52 : i256), ^bb13 loc(#loc28) -// CHECK-NEXT: ^bb12(%54: i256 loc({{.*}}:35:4)): // pred: ^bb11 -// CHECK-NEXT: %55 = arith.divui %54, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %56 = arith.addi %50, %54 : i256 loc(#loc28) -// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %58 = llvm.load %57 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc28) -// CHECK-NEXT: %59 = arith.addi %49, %55 : i256 loc(#loc28) -// CHECK-NEXT: %60 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %58, %60 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: %61 = arith.addi %54, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: cf.br ^bb11(%61 : i256) loc(#loc28) -// CHECK-NEXT: ^bb13: // pred: ^bb11 -// CHECK-NEXT: %62 = arith.cmpi ult, %51, %3 : i256 loc(#loc28) -// CHECK-NEXT: cf.cond_br %62, ^bb14, ^bb15 loc(#loc28) -// CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %63 = arith.andi %3, %c31_i256 : i256 loc(#loc28) -// CHECK-NEXT: %64 = arith.divui %51, %c32_i256 : i256 loc(#loc28) -// CHECK-NEXT: %65 = arith.addi %50, %51 : i256 loc(#loc28) -// CHECK-NEXT: %66 = llvm.inttoptr %65 : i256 to !llvm.ptr<1> loc(#loc28) -// CHECK-NEXT: %67 = llvm.load %66 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc28) -// CHECK-NEXT: %68 = arith.muli %63, %c8_i256 : i256 loc(#loc28) -// CHECK-NEXT: %69 = arith.subi %c256_i256, %68 : i256 loc(#loc28) -// CHECK-NEXT: %70 = arith.shli %c-1_i256, %69 : i256 loc(#loc28) -// CHECK-NEXT: %71 = arith.andi %67, %70 : i256 loc(#loc28) -// CHECK-NEXT: %72 = arith.addi %49, %64 : i256 loc(#loc28) -// CHECK-NEXT: %73 = llvm.inttoptr %72 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %71, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: cf.br ^bb15 loc(#loc28) -// CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %74 = arith.muli %3, %c2_i256 : i256 loc(#loc28) -// CHECK-NEXT: %75 = arith.ori %74, %c1_i256 : i256 loc(#loc28) -// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %75, %76 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: cf.br ^bb16 loc(#loc28) -// CHECK-NEXT: ^bb16: // 3 preds: ^bb8, ^bb9, ^bb15 +// CHECK-NEXT: call @__sol.copy.storage.storage.string(%c0_i256, %c1_i256) : (i256, i256) -> () loc(#loc4) // CHECK-NEXT: return loc(#loc25) // CHECK-NEXT: } loc(#loc25) +// CHECK-NEXT: func.func @m_85(%arg0: i256 loc({{.*}}:34:13)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc28) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc28) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc28) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc29) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%1, %c0_i256) : (i256, i256) -> () loc(#loc5) +// CHECK-NEXT: return loc(#loc27) +// CHECK-NEXT: } loc(#loc27) // CHECK-NEXT: func.func @p3_75() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) @@ -1416,29 +1400,29 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc30) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc30) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc30) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc30) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc30) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc30) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc30) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc30) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc30) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc30) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc30) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc31) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc31) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc31) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc31) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc31) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc31) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc31) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc31) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc31) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc31) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc31) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc30) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc30) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc30) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc30) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc30) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc30) -// CHECK-NEXT: cf.br ^bb2 loc(#loc30) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc31) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc31) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc31) +// CHECK-NEXT: cf.br ^bb2 loc(#loc31) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: return %6 : i256 loc(#loc31) -// CHECK-NEXT: } loc(#loc29) +// CHECK-NEXT: return %6 : i256 loc(#loc32) +// CHECK-NEXT: } loc(#loc30) // CHECK-NEXT: func.func @pop_66() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c62_i256 = arith.constant 62 : i256 loc(#loc) // CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) @@ -1456,95 +1440,95 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc33) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc33) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc33) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc33) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc33) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc33) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc33) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc33) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc33) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc33) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc34) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc34) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc34) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc34) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc34) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc34) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc34) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc34) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc34) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc34) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc33) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc33) -// CHECK-NEXT: cf.br ^bb2 loc(#loc33) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc34) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc34) +// CHECK-NEXT: cf.br ^bb2 loc(#loc34) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc33) -// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc33) +// CHECK-NEXT: %13 = arith.cmpi eq, %6, %c0_i256 : i256 loc(#loc34) +// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc34) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: llvm.store %c49_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc33) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc33) -// CHECK-NEXT: cf.br ^bb4 loc(#loc33) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: llvm.store %c49_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc34) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc34) +// CHECK-NEXT: cf.br ^bb4 loc(#loc34) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %17 = arith.cmpi eq, %6, %c32_i256 : i256 loc(#loc33) -// CHECK-NEXT: cf.cond_br %17, ^bb8, ^bb5 loc(#loc33) +// CHECK-NEXT: %17 = arith.cmpi eq, %6, %c32_i256 : i256 loc(#loc34) +// CHECK-NEXT: cf.cond_br %17, ^bb8, ^bb5 loc(#loc34) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %18 = arith.subi %6, %c1_i256 : i256 loc(#loc33) -// CHECK-NEXT: %19 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc33) -// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc33) +// CHECK-NEXT: %18 = arith.subi %6, %c1_i256 : i256 loc(#loc34) +// CHECK-NEXT: %19 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc34) +// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc34) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %22 = "llvm.intrcall"(%21, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc33) -// CHECK-NEXT: %23 = arith.divui %18, %c32_i256 : i256 loc(#loc33) -// CHECK-NEXT: %24 = arith.remui %18, %c32_i256 : i256 loc(#loc33) -// CHECK-NEXT: %25 = arith.subi %c31_i256, %24 : i256 loc(#loc33) -// CHECK-NEXT: %26 = arith.addi %22, %23 : i256 loc(#loc33) -// CHECK-NEXT: %27 = llvm.inttoptr %26 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: %28 = llvm.load %27 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc33) -// CHECK-NEXT: %29 = arith.muli %25, %c8_i256 : i256 loc(#loc33) -// CHECK-NEXT: %30 = arith.shli %c255_i256, %29 : i256 loc(#loc33) -// CHECK-NEXT: %31 = arith.xori %30, %c-1_i256 : i256 loc(#loc33) -// CHECK-NEXT: %32 = arith.andi %28, %31 : i256 loc(#loc33) -// CHECK-NEXT: %33 = arith.shli %c0_i256, %29 : i256 loc(#loc33) -// CHECK-NEXT: %34 = arith.ori %32, %33 : i256 loc(#loc33) -// CHECK-NEXT: %35 = llvm.inttoptr %26 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: llvm.store %34, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: %36 = arith.subi %1, %c2_i256 : i256 loc(#loc33) -// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: llvm.store %36, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: cf.br ^bb9 loc(#loc33) +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: llvm.store %c0_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %22 = "llvm.intrcall"(%21, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc34) +// CHECK-NEXT: %23 = arith.divui %18, %c32_i256 : i256 loc(#loc34) +// CHECK-NEXT: %24 = arith.remui %18, %c32_i256 : i256 loc(#loc34) +// CHECK-NEXT: %25 = arith.subi %c31_i256, %24 : i256 loc(#loc34) +// CHECK-NEXT: %26 = arith.addi %22, %23 : i256 loc(#loc34) +// CHECK-NEXT: %27 = llvm.inttoptr %26 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: %28 = llvm.load %27 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc34) +// CHECK-NEXT: %29 = arith.muli %25, %c8_i256 : i256 loc(#loc34) +// CHECK-NEXT: %30 = arith.shli %c255_i256, %29 : i256 loc(#loc34) +// CHECK-NEXT: %31 = arith.xori %30, %c-1_i256 : i256 loc(#loc34) +// CHECK-NEXT: %32 = arith.andi %28, %31 : i256 loc(#loc34) +// CHECK-NEXT: %33 = arith.shli %c0_i256, %29 : i256 loc(#loc34) +// CHECK-NEXT: %34 = arith.ori %32, %33 : i256 loc(#loc34) +// CHECK-NEXT: %35 = llvm.inttoptr %26 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: llvm.store %34, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: %36 = arith.subi %1, %c2_i256 : i256 loc(#loc34) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: llvm.store %36, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: cf.br ^bb9 loc(#loc34) // CHECK-NEXT: ^bb7: // pred: ^bb5 -// CHECK-NEXT: %38 = arith.muli %18, %c8_i256 : i256 loc(#loc33) -// CHECK-NEXT: %39 = arith.shrui %c-1_i256, %38 : i256 loc(#loc33) -// CHECK-NEXT: %40 = arith.xori %39, %c-1_i256 : i256 loc(#loc33) -// CHECK-NEXT: %41 = arith.andi %1, %40 : i256 loc(#loc33) -// CHECK-NEXT: %42 = arith.muli %18, %c2_i256 : i256 loc(#loc33) -// CHECK-NEXT: %43 = arith.ori %41, %42 : i256 loc(#loc33) -// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: llvm.store %43, %44 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: cf.br ^bb9 loc(#loc33) +// CHECK-NEXT: %38 = arith.muli %18, %c8_i256 : i256 loc(#loc34) +// CHECK-NEXT: %39 = arith.shrui %c-1_i256, %38 : i256 loc(#loc34) +// CHECK-NEXT: %40 = arith.xori %39, %c-1_i256 : i256 loc(#loc34) +// CHECK-NEXT: %41 = arith.andi %1, %40 : i256 loc(#loc34) +// CHECK-NEXT: %42 = arith.muli %18, %c2_i256 : i256 loc(#loc34) +// CHECK-NEXT: %43 = arith.ori %41, %42 : i256 loc(#loc34) +// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: llvm.store %43, %44 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: cf.br ^bb9 loc(#loc34) // CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: llvm.store %c0_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc33) -// CHECK-NEXT: %47 = "llvm.intrcall"(%46, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc33) -// CHECK-NEXT: %48 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc33) -// CHECK-NEXT: %50 = arith.andi %49, %c-256_i256 : i256 loc(#loc33) -// CHECK-NEXT: %51 = arith.ori %50, %c62_i256 : i256 loc(#loc33) -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: %53 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: llvm.store %c0_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: cf.br ^bb9 loc(#loc33) +// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: llvm.store %c0_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %46 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc34) +// CHECK-NEXT: %47 = "llvm.intrcall"(%46, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc34) +// CHECK-NEXT: %48 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc34) +// CHECK-NEXT: %50 = arith.andi %49, %c-256_i256 : i256 loc(#loc34) +// CHECK-NEXT: %51 = arith.ori %50, %c62_i256 : i256 loc(#loc34) +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: %53 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: llvm.store %c0_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc34) +// CHECK-NEXT: cf.br ^bb9 loc(#loc34) // CHECK-NEXT: ^bb9: // 3 preds: ^bb6, ^bb7, ^bb8 -// CHECK-NEXT: return loc(#loc32) -// CHECK-NEXT: } loc(#loc32) +// CHECK-NEXT: return loc(#loc33) +// CHECK-NEXT: } loc(#loc33) // CHECK-NEXT: func.func @pRefHexLit_57() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c104_i256 = arith.constant 104 : i256 loc(#loc) // CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) @@ -1564,101 +1548,101 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc35) -// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc35) -// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc35) -// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc35) -// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc35) -// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc35) -// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc35) -// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc35) -// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc35) -// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc35) +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc36) +// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc36) +// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc36) +// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc36) +// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc36) +// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc36) +// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc36) +// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc36) +// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc36) +// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc36) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc35) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc35) -// CHECK-NEXT: cf.br ^bb2 loc(#loc35) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc36) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc36) +// CHECK-NEXT: cf.br ^bb2 loc(#loc36) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %14 = arith.cmpi ugt, %7, %c18446744073709551616_i256 : i256 loc(#loc35) -// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc35) +// CHECK-NEXT: %14 = arith.cmpi ugt, %7, %c18446744073709551616_i256 : i256 loc(#loc36) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc36) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc35) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc35) -// CHECK-NEXT: cf.br ^bb4 loc(#loc35) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc36) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc36) +// CHECK-NEXT: cf.br ^bb4 loc(#loc36) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %18 = arith.cmpi ugt, %7, %c31_i256 : i256 loc(#loc35) -// CHECK-NEXT: cf.cond_br %18, ^bb8, ^bb5 loc(#loc35) +// CHECK-NEXT: %18 = arith.cmpi ugt, %7, %c31_i256 : i256 loc(#loc36) +// CHECK-NEXT: cf.cond_br %18, ^bb8, ^bb5 loc(#loc36) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %19 = arith.cmpi eq, %7, %c31_i256 : i256 loc(#loc35) -// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc35) +// CHECK-NEXT: %19 = arith.cmpi eq, %7, %c31_i256 : i256 loc(#loc36) +// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc36) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %20 = arith.addi %2, %c2_i256 : i256 loc(#loc35) -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: %22 = arith.divui %7, %c32_i256 : i256 loc(#loc35) -// CHECK-NEXT: %23 = arith.remui %7, %c32_i256 : i256 loc(#loc35) -// CHECK-NEXT: %24 = arith.subi %c31_i256, %23 : i256 loc(#loc35) -// CHECK-NEXT: %25 = llvm.insertvalue %22, %0[0] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: %26 = llvm.insertvalue %24, %25[1] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: cf.br ^bb9(%26 : !llvm.struct<(i256, i256)>) loc(#loc35) +// CHECK-NEXT: %20 = arith.addi %2, %c2_i256 : i256 loc(#loc36) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: %22 = arith.divui %7, %c32_i256 : i256 loc(#loc36) +// CHECK-NEXT: %23 = arith.remui %7, %c32_i256 : i256 loc(#loc36) +// CHECK-NEXT: %24 = arith.subi %c31_i256, %23 : i256 loc(#loc36) +// CHECK-NEXT: %25 = llvm.insertvalue %22, %0[0] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: %26 = llvm.insertvalue %24, %25[1] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: cf.br ^bb9(%26 : !llvm.struct<(i256, i256)>) loc(#loc36) // CHECK-NEXT: ^bb7: // pred: ^bb5 -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc35) -// CHECK-NEXT: %30 = arith.andi %2, %c-256_i256 : i256 loc(#loc35) -// CHECK-NEXT: %31 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: llvm.store %c65_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: %33 = arith.divui %7, %c32_i256 : i256 loc(#loc35) -// CHECK-NEXT: %34 = arith.remui %7, %c32_i256 : i256 loc(#loc35) -// CHECK-NEXT: %35 = arith.subi %c31_i256, %34 : i256 loc(#loc35) -// CHECK-NEXT: %36 = arith.addi %29, %33 : i256 loc(#loc35) -// CHECK-NEXT: %37 = llvm.insertvalue %36, %0[0] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: %38 = llvm.insertvalue %35, %37[1] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: cf.br ^bb9(%38 : !llvm.struct<(i256, i256)>) loc(#loc35) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc36) +// CHECK-NEXT: %30 = arith.andi %2, %c-256_i256 : i256 loc(#loc36) +// CHECK-NEXT: %31 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: llvm.store %c65_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: %33 = arith.divui %7, %c32_i256 : i256 loc(#loc36) +// CHECK-NEXT: %34 = arith.remui %7, %c32_i256 : i256 loc(#loc36) +// CHECK-NEXT: %35 = arith.subi %c31_i256, %34 : i256 loc(#loc36) +// CHECK-NEXT: %36 = arith.addi %29, %33 : i256 loc(#loc36) +// CHECK-NEXT: %37 = llvm.insertvalue %36, %0[0] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: %38 = llvm.insertvalue %35, %37[1] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: cf.br ^bb9(%38 : !llvm.struct<(i256, i256)>) loc(#loc36) // CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %39 = arith.addi %2, %c2_i256 : i256 loc(#loc35) -// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc35) -// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc35) -// CHECK-NEXT: %43 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: llvm.store %39, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: %44 = arith.divui %7, %c32_i256 : i256 loc(#loc35) -// CHECK-NEXT: %45 = arith.remui %7, %c32_i256 : i256 loc(#loc35) -// CHECK-NEXT: %46 = arith.subi %c31_i256, %45 : i256 loc(#loc35) -// CHECK-NEXT: %47 = arith.addi %42, %44 : i256 loc(#loc35) -// CHECK-NEXT: %48 = llvm.insertvalue %47, %0[0] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: %49 = llvm.insertvalue %46, %48[1] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: cf.br ^bb9(%49 : !llvm.struct<(i256, i256)>) loc(#loc35) +// CHECK-NEXT: %39 = arith.addi %2, %c2_i256 : i256 loc(#loc36) +// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc36) +// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc36) +// CHECK-NEXT: %43 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: llvm.store %39, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: %44 = arith.divui %7, %c32_i256 : i256 loc(#loc36) +// CHECK-NEXT: %45 = arith.remui %7, %c32_i256 : i256 loc(#loc36) +// CHECK-NEXT: %46 = arith.subi %c31_i256, %45 : i256 loc(#loc36) +// CHECK-NEXT: %47 = arith.addi %42, %44 : i256 loc(#loc36) +// CHECK-NEXT: %48 = llvm.insertvalue %47, %0[0] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: %49 = llvm.insertvalue %46, %48[1] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: cf.br ^bb9(%49 : !llvm.struct<(i256, i256)>) loc(#loc36) // CHECK-NEXT: ^bb9(%50: !llvm.struct<(i256, i256)> loc({{.*}}:23:4)): // 3 preds: ^bb6, ^bb7, ^bb8 -// CHECK-NEXT: %51 = llvm.extractvalue %50[0] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: %52 = llvm.extractvalue %50[1] : !llvm.struct<(i256, i256)> loc(#loc35) -// CHECK-NEXT: %53 = arith.muli %52, %c8_i256 : i256 loc(#loc35) -// CHECK-NEXT: %54 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: %55 = llvm.load %54 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc35) -// CHECK-NEXT: %56 = arith.shli %c255_i256, %53 : i256 loc(#loc35) -// CHECK-NEXT: %57 = arith.xori %56, %c-1_i256 : i256 loc(#loc35) -// CHECK-NEXT: %58 = arith.andi %55, %57 : i256 loc(#loc35) -// CHECK-NEXT: %59 = arith.shli %c104_i256, %53 : i256 loc(#loc35) -// CHECK-NEXT: %60 = arith.ori %58, %59 : i256 loc(#loc35) -// CHECK-NEXT: %61 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: llvm.store %60, %61 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc35) -// CHECK-NEXT: return loc(#loc34) -// CHECK-NEXT: } loc(#loc34) +// CHECK-NEXT: %51 = llvm.extractvalue %50[0] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: %52 = llvm.extractvalue %50[1] : !llvm.struct<(i256, i256)> loc(#loc36) +// CHECK-NEXT: %53 = arith.muli %52, %c8_i256 : i256 loc(#loc36) +// CHECK-NEXT: %54 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: %55 = llvm.load %54 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc36) +// CHECK-NEXT: %56 = arith.shli %c255_i256, %53 : i256 loc(#loc36) +// CHECK-NEXT: %57 = arith.xori %56, %c-1_i256 : i256 loc(#loc36) +// CHECK-NEXT: %58 = arith.andi %55, %57 : i256 loc(#loc36) +// CHECK-NEXT: %59 = arith.shli %c104_i256, %53 : i256 loc(#loc36) +// CHECK-NEXT: %60 = arith.ori %58, %59 : i256 loc(#loc36) +// CHECK-NEXT: %61 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: llvm.store %60, %61 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc36) +// CHECK-NEXT: return loc(#loc35) +// CHECK-NEXT: } loc(#loc35) // CHECK-NEXT: func.func @pRefStrLit_46() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c103_i256 = arith.constant 103 : i256 loc(#loc) // CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) @@ -1678,101 +1662,101 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc37) -// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc37) -// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc37) -// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc37) -// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc37) -// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc37) -// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc37) -// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc37) -// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc37) -// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc37) +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc38) +// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc38) +// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc38) +// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc38) +// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc38) +// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc38) +// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc38) +// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc38) +// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc38) +// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc38) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc37) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc37) -// CHECK-NEXT: cf.br ^bb2 loc(#loc37) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc38) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc38) +// CHECK-NEXT: cf.br ^bb2 loc(#loc38) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %14 = arith.cmpi ugt, %7, %c18446744073709551616_i256 : i256 loc(#loc37) -// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc37) +// CHECK-NEXT: %14 = arith.cmpi ugt, %7, %c18446744073709551616_i256 : i256 loc(#loc38) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc38) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc37) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc37) -// CHECK-NEXT: cf.br ^bb4 loc(#loc37) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc38) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc38) +// CHECK-NEXT: cf.br ^bb4 loc(#loc38) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %18 = arith.cmpi ugt, %7, %c31_i256 : i256 loc(#loc37) -// CHECK-NEXT: cf.cond_br %18, ^bb8, ^bb5 loc(#loc37) +// CHECK-NEXT: %18 = arith.cmpi ugt, %7, %c31_i256 : i256 loc(#loc38) +// CHECK-NEXT: cf.cond_br %18, ^bb8, ^bb5 loc(#loc38) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %19 = arith.cmpi eq, %7, %c31_i256 : i256 loc(#loc37) -// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc37) +// CHECK-NEXT: %19 = arith.cmpi eq, %7, %c31_i256 : i256 loc(#loc38) +// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc38) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %20 = arith.addi %2, %c2_i256 : i256 loc(#loc37) -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: %22 = arith.divui %7, %c32_i256 : i256 loc(#loc37) -// CHECK-NEXT: %23 = arith.remui %7, %c32_i256 : i256 loc(#loc37) -// CHECK-NEXT: %24 = arith.subi %c31_i256, %23 : i256 loc(#loc37) -// CHECK-NEXT: %25 = llvm.insertvalue %22, %0[0] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: %26 = llvm.insertvalue %24, %25[1] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: cf.br ^bb9(%26 : !llvm.struct<(i256, i256)>) loc(#loc37) +// CHECK-NEXT: %20 = arith.addi %2, %c2_i256 : i256 loc(#loc38) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: %22 = arith.divui %7, %c32_i256 : i256 loc(#loc38) +// CHECK-NEXT: %23 = arith.remui %7, %c32_i256 : i256 loc(#loc38) +// CHECK-NEXT: %24 = arith.subi %c31_i256, %23 : i256 loc(#loc38) +// CHECK-NEXT: %25 = llvm.insertvalue %22, %0[0] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: %26 = llvm.insertvalue %24, %25[1] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: cf.br ^bb9(%26 : !llvm.struct<(i256, i256)>) loc(#loc38) // CHECK-NEXT: ^bb7: // pred: ^bb5 -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc37) -// CHECK-NEXT: %30 = arith.andi %2, %c-256_i256 : i256 loc(#loc37) -// CHECK-NEXT: %31 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: llvm.store %c65_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: %33 = arith.divui %7, %c32_i256 : i256 loc(#loc37) -// CHECK-NEXT: %34 = arith.remui %7, %c32_i256 : i256 loc(#loc37) -// CHECK-NEXT: %35 = arith.subi %c31_i256, %34 : i256 loc(#loc37) -// CHECK-NEXT: %36 = arith.addi %29, %33 : i256 loc(#loc37) -// CHECK-NEXT: %37 = llvm.insertvalue %36, %0[0] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: %38 = llvm.insertvalue %35, %37[1] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: cf.br ^bb9(%38 : !llvm.struct<(i256, i256)>) loc(#loc37) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc38) +// CHECK-NEXT: %30 = arith.andi %2, %c-256_i256 : i256 loc(#loc38) +// CHECK-NEXT: %31 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: llvm.store %c65_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: %33 = arith.divui %7, %c32_i256 : i256 loc(#loc38) +// CHECK-NEXT: %34 = arith.remui %7, %c32_i256 : i256 loc(#loc38) +// CHECK-NEXT: %35 = arith.subi %c31_i256, %34 : i256 loc(#loc38) +// CHECK-NEXT: %36 = arith.addi %29, %33 : i256 loc(#loc38) +// CHECK-NEXT: %37 = llvm.insertvalue %36, %0[0] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: %38 = llvm.insertvalue %35, %37[1] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: cf.br ^bb9(%38 : !llvm.struct<(i256, i256)>) loc(#loc38) // CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %39 = arith.addi %2, %c2_i256 : i256 loc(#loc37) -// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc37) -// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc37) -// CHECK-NEXT: %43 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: llvm.store %39, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: %44 = arith.divui %7, %c32_i256 : i256 loc(#loc37) -// CHECK-NEXT: %45 = arith.remui %7, %c32_i256 : i256 loc(#loc37) -// CHECK-NEXT: %46 = arith.subi %c31_i256, %45 : i256 loc(#loc37) -// CHECK-NEXT: %47 = arith.addi %42, %44 : i256 loc(#loc37) -// CHECK-NEXT: %48 = llvm.insertvalue %47, %0[0] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: %49 = llvm.insertvalue %46, %48[1] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: cf.br ^bb9(%49 : !llvm.struct<(i256, i256)>) loc(#loc37) +// CHECK-NEXT: %39 = arith.addi %2, %c2_i256 : i256 loc(#loc38) +// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc38) +// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc38) +// CHECK-NEXT: %43 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: llvm.store %39, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: %44 = arith.divui %7, %c32_i256 : i256 loc(#loc38) +// CHECK-NEXT: %45 = arith.remui %7, %c32_i256 : i256 loc(#loc38) +// CHECK-NEXT: %46 = arith.subi %c31_i256, %45 : i256 loc(#loc38) +// CHECK-NEXT: %47 = arith.addi %42, %44 : i256 loc(#loc38) +// CHECK-NEXT: %48 = llvm.insertvalue %47, %0[0] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: %49 = llvm.insertvalue %46, %48[1] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: cf.br ^bb9(%49 : !llvm.struct<(i256, i256)>) loc(#loc38) // CHECK-NEXT: ^bb9(%50: !llvm.struct<(i256, i256)> loc({{.*}}:19:4)): // 3 preds: ^bb6, ^bb7, ^bb8 -// CHECK-NEXT: %51 = llvm.extractvalue %50[0] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: %52 = llvm.extractvalue %50[1] : !llvm.struct<(i256, i256)> loc(#loc37) -// CHECK-NEXT: %53 = arith.muli %52, %c8_i256 : i256 loc(#loc37) -// CHECK-NEXT: %54 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: %55 = llvm.load %54 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc37) -// CHECK-NEXT: %56 = arith.shli %c255_i256, %53 : i256 loc(#loc37) -// CHECK-NEXT: %57 = arith.xori %56, %c-1_i256 : i256 loc(#loc37) -// CHECK-NEXT: %58 = arith.andi %55, %57 : i256 loc(#loc37) -// CHECK-NEXT: %59 = arith.shli %c103_i256, %53 : i256 loc(#loc37) -// CHECK-NEXT: %60 = arith.ori %58, %59 : i256 loc(#loc37) -// CHECK-NEXT: %61 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: llvm.store %60, %61 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc37) -// CHECK-NEXT: return loc(#loc36) -// CHECK-NEXT: } loc(#loc36) +// CHECK-NEXT: %51 = llvm.extractvalue %50[0] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: %52 = llvm.extractvalue %50[1] : !llvm.struct<(i256, i256)> loc(#loc38) +// CHECK-NEXT: %53 = arith.muli %52, %c8_i256 : i256 loc(#loc38) +// CHECK-NEXT: %54 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: %55 = llvm.load %54 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc38) +// CHECK-NEXT: %56 = arith.shli %c255_i256, %53 : i256 loc(#loc38) +// CHECK-NEXT: %57 = arith.xori %56, %c-1_i256 : i256 loc(#loc38) +// CHECK-NEXT: %58 = arith.andi %55, %57 : i256 loc(#loc38) +// CHECK-NEXT: %59 = arith.shli %c103_i256, %53 : i256 loc(#loc38) +// CHECK-NEXT: %60 = arith.ori %58, %59 : i256 loc(#loc38) +// CHECK-NEXT: %61 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: llvm.store %60, %61 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc38) +// CHECK-NEXT: return loc(#loc37) +// CHECK-NEXT: } loc(#loc37) // CHECK-NEXT: func.func @p2_35() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c101_i256 = arith.constant 101 : i256 loc(#loc) // CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) @@ -1792,101 +1776,101 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc39) -// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc39) -// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc39) -// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc39) -// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc39) -// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc39) -// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc39) -// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc39) -// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc39) -// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc39) +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: %2 = llvm.load %1 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc40) +// CHECK-NEXT: %3 = arith.shrui %2, %c1_i256 : i256 loc(#loc40) +// CHECK-NEXT: %4 = arith.andi %2, %c1_i256 : i256 loc(#loc40) +// CHECK-NEXT: %5 = arith.cmpi eq, %4, %c0_i256 : i256 loc(#loc40) +// CHECK-NEXT: %6 = arith.andi %3, %c127_i256 : i256 loc(#loc40) +// CHECK-NEXT: %7 = arith.select %5, %6, %3 : i256 loc(#loc40) +// CHECK-NEXT: %8 = arith.cmpi ult, %7, %c32_i256 : i256 loc(#loc40) +// CHECK-NEXT: %9 = arith.extui %8 : i1 to i256 loc(#loc40) +// CHECK-NEXT: %10 = arith.cmpi eq, %4, %9 : i256 loc(#loc40) +// CHECK-NEXT: cf.cond_br %10, ^bb1, ^bb2 loc(#loc40) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc39) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc39) -// CHECK-NEXT: cf.br ^bb2 loc(#loc39) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: llvm.store %c34_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %13 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: "llvm.intrcall"(%13, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc40) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc40) +// CHECK-NEXT: cf.br ^bb2 loc(#loc40) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %14 = arith.cmpi ugt, %7, %c18446744073709551616_i256 : i256 loc(#loc39) -// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc39) +// CHECK-NEXT: %14 = arith.cmpi ugt, %7, %c18446744073709551616_i256 : i256 loc(#loc40) +// CHECK-NEXT: cf.cond_br %14, ^bb3, ^bb4 loc(#loc40) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc39) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc39) -// CHECK-NEXT: cf.br ^bb4 loc(#loc39) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %16 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: llvm.store %c65_i256, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %17 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: "llvm.intrcall"(%17, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc40) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc40) +// CHECK-NEXT: cf.br ^bb4 loc(#loc40) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %18 = arith.cmpi ugt, %7, %c31_i256 : i256 loc(#loc39) -// CHECK-NEXT: cf.cond_br %18, ^bb8, ^bb5 loc(#loc39) +// CHECK-NEXT: %18 = arith.cmpi ugt, %7, %c31_i256 : i256 loc(#loc40) +// CHECK-NEXT: cf.cond_br %18, ^bb8, ^bb5 loc(#loc40) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %19 = arith.cmpi eq, %7, %c31_i256 : i256 loc(#loc39) -// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc39) +// CHECK-NEXT: %19 = arith.cmpi eq, %7, %c31_i256 : i256 loc(#loc40) +// CHECK-NEXT: cf.cond_br %19, ^bb7, ^bb6 loc(#loc40) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %20 = arith.addi %2, %c2_i256 : i256 loc(#loc39) -// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: %22 = arith.divui %7, %c32_i256 : i256 loc(#loc39) -// CHECK-NEXT: %23 = arith.remui %7, %c32_i256 : i256 loc(#loc39) -// CHECK-NEXT: %24 = arith.subi %c31_i256, %23 : i256 loc(#loc39) -// CHECK-NEXT: %25 = llvm.insertvalue %22, %0[0] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: %26 = llvm.insertvalue %24, %25[1] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: cf.br ^bb9(%26 : !llvm.struct<(i256, i256)>) loc(#loc39) +// CHECK-NEXT: %20 = arith.addi %2, %c2_i256 : i256 loc(#loc40) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: llvm.store %20, %21 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: %22 = arith.divui %7, %c32_i256 : i256 loc(#loc40) +// CHECK-NEXT: %23 = arith.remui %7, %c32_i256 : i256 loc(#loc40) +// CHECK-NEXT: %24 = arith.subi %c31_i256, %23 : i256 loc(#loc40) +// CHECK-NEXT: %25 = llvm.insertvalue %22, %0[0] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: %26 = llvm.insertvalue %24, %25[1] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: cf.br ^bb9(%26 : !llvm.struct<(i256, i256)>) loc(#loc40) // CHECK-NEXT: ^bb7: // pred: ^bb5 -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc39) -// CHECK-NEXT: %30 = arith.andi %2, %c-256_i256 : i256 loc(#loc39) -// CHECK-NEXT: %31 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: llvm.store %c65_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: %33 = arith.divui %7, %c32_i256 : i256 loc(#loc39) -// CHECK-NEXT: %34 = arith.remui %7, %c32_i256 : i256 loc(#loc39) -// CHECK-NEXT: %35 = arith.subi %c31_i256, %34 : i256 loc(#loc39) -// CHECK-NEXT: %36 = arith.addi %29, %33 : i256 loc(#loc39) -// CHECK-NEXT: %37 = llvm.insertvalue %36, %0[0] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: %38 = llvm.insertvalue %35, %37[1] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: cf.br ^bb9(%38 : !llvm.struct<(i256, i256)>) loc(#loc39) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: llvm.store %c0_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %29 = "llvm.intrcall"(%28, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc40) +// CHECK-NEXT: %30 = arith.andi %2, %c-256_i256 : i256 loc(#loc40) +// CHECK-NEXT: %31 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: llvm.store %c65_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: %33 = arith.divui %7, %c32_i256 : i256 loc(#loc40) +// CHECK-NEXT: %34 = arith.remui %7, %c32_i256 : i256 loc(#loc40) +// CHECK-NEXT: %35 = arith.subi %c31_i256, %34 : i256 loc(#loc40) +// CHECK-NEXT: %36 = arith.addi %29, %33 : i256 loc(#loc40) +// CHECK-NEXT: %37 = llvm.insertvalue %36, %0[0] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: %38 = llvm.insertvalue %35, %37[1] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: cf.br ^bb9(%38 : !llvm.struct<(i256, i256)>) loc(#loc40) // CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %39 = arith.addi %2, %c2_i256 : i256 loc(#loc39) -// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc39) -// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc39) -// CHECK-NEXT: %43 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: llvm.store %39, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: %44 = arith.divui %7, %c32_i256 : i256 loc(#loc39) -// CHECK-NEXT: %45 = arith.remui %7, %c32_i256 : i256 loc(#loc39) -// CHECK-NEXT: %46 = arith.subi %c31_i256, %45 : i256 loc(#loc39) -// CHECK-NEXT: %47 = arith.addi %42, %44 : i256 loc(#loc39) -// CHECK-NEXT: %48 = llvm.insertvalue %47, %0[0] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: %49 = llvm.insertvalue %46, %48[1] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: cf.br ^bb9(%49 : !llvm.struct<(i256, i256)>) loc(#loc39) +// CHECK-NEXT: %39 = arith.addi %2, %c2_i256 : i256 loc(#loc40) +// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: llvm.store %c0_i256, %40 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %41 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc40) +// CHECK-NEXT: %42 = "llvm.intrcall"(%41, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc40) +// CHECK-NEXT: %43 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: llvm.store %39, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: %44 = arith.divui %7, %c32_i256 : i256 loc(#loc40) +// CHECK-NEXT: %45 = arith.remui %7, %c32_i256 : i256 loc(#loc40) +// CHECK-NEXT: %46 = arith.subi %c31_i256, %45 : i256 loc(#loc40) +// CHECK-NEXT: %47 = arith.addi %42, %44 : i256 loc(#loc40) +// CHECK-NEXT: %48 = llvm.insertvalue %47, %0[0] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: %49 = llvm.insertvalue %46, %48[1] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: cf.br ^bb9(%49 : !llvm.struct<(i256, i256)>) loc(#loc40) // CHECK-NEXT: ^bb9(%50: !llvm.struct<(i256, i256)> loc({{.*}}:15:4)): // 3 preds: ^bb6, ^bb7, ^bb8 -// CHECK-NEXT: %51 = llvm.extractvalue %50[0] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: %52 = llvm.extractvalue %50[1] : !llvm.struct<(i256, i256)> loc(#loc39) -// CHECK-NEXT: %53 = arith.muli %52, %c8_i256 : i256 loc(#loc39) -// CHECK-NEXT: %54 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: %55 = llvm.load %54 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc39) -// CHECK-NEXT: %56 = arith.shli %c255_i256, %53 : i256 loc(#loc39) -// CHECK-NEXT: %57 = arith.xori %56, %c-1_i256 : i256 loc(#loc39) -// CHECK-NEXT: %58 = arith.andi %55, %57 : i256 loc(#loc39) -// CHECK-NEXT: %59 = arith.shli %c101_i256, %53 : i256 loc(#loc39) -// CHECK-NEXT: %60 = arith.ori %58, %59 : i256 loc(#loc39) -// CHECK-NEXT: %61 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: llvm.store %60, %61 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc39) -// CHECK-NEXT: return loc(#loc38) -// CHECK-NEXT: } loc(#loc38) +// CHECK-NEXT: %51 = llvm.extractvalue %50[0] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: %52 = llvm.extractvalue %50[1] : !llvm.struct<(i256, i256)> loc(#loc40) +// CHECK-NEXT: %53 = arith.muli %52, %c8_i256 : i256 loc(#loc40) +// CHECK-NEXT: %54 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: %55 = llvm.load %54 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc40) +// CHECK-NEXT: %56 = arith.shli %c255_i256, %53 : i256 loc(#loc40) +// CHECK-NEXT: %57 = arith.xori %56, %c-1_i256 : i256 loc(#loc40) +// CHECK-NEXT: %58 = arith.andi %55, %57 : i256 loc(#loc40) +// CHECK-NEXT: %59 = arith.shli %c101_i256, %53 : i256 loc(#loc40) +// CHECK-NEXT: %60 = arith.ori %58, %59 : i256 loc(#loc40) +// CHECK-NEXT: %61 = llvm.inttoptr %51 : i256 to !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: llvm.store %60, %61 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc40) +// CHECK-NEXT: return loc(#loc39) +// CHECK-NEXT: } loc(#loc39) // CHECK-NEXT: func.func @pLit_24() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) @@ -1904,95 +1888,95 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc41) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc41) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc41) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc41) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc41) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc41) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc41) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc41) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc41) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc41) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc41) +// CHECK-NEXT: %c100_i256 = arith.constant 100 : i256 loc(#loc42) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc42) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc42) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc42) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc42) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc42) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc42) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc42) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc42) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc42) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc42) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc41) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc41) -// CHECK-NEXT: cf.br ^bb2 loc(#loc41) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc42) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc42) +// CHECK-NEXT: cf.br ^bb2 loc(#loc42) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.cmpi ugt, %6, %c18446744073709551616_i256 : i256 loc(#loc41) -// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc41) +// CHECK-NEXT: %13 = arith.cmpi ugt, %6, %c18446744073709551616_i256 : i256 loc(#loc42) +// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc42) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %c65_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc41) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc41) -// CHECK-NEXT: cf.br ^bb4 loc(#loc41) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %c65_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc42) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc42) +// CHECK-NEXT: cf.br ^bb4 loc(#loc42) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc41) -// CHECK-NEXT: cf.cond_br %17, ^bb8, ^bb5 loc(#loc41) +// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc42) +// CHECK-NEXT: cf.cond_br %17, ^bb8, ^bb5 loc(#loc42) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %18 = arith.cmpi eq, %6, %c31_i256 : i256 loc(#loc41) -// CHECK-NEXT: cf.cond_br %18, ^bb7, ^bb6 loc(#loc41) +// CHECK-NEXT: %18 = arith.cmpi eq, %6, %c31_i256 : i256 loc(#loc42) +// CHECK-NEXT: cf.cond_br %18, ^bb7, ^bb6 loc(#loc42) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %19 = arith.subi %c31_i256, %6 : i256 loc(#loc41) -// CHECK-NEXT: %20 = arith.muli %19, %c8_i256 : i256 loc(#loc41) -// CHECK-NEXT: %21 = arith.shli %c255_i256, %20 : i256 loc(#loc41) -// CHECK-NEXT: %22 = arith.xori %21, %c-1_i256 : i256 loc(#loc41) -// CHECK-NEXT: %23 = arith.andi %1, %22 : i256 loc(#loc41) -// CHECK-NEXT: %24 = arith.shli %c100_i256, %20 : i256 loc(#loc41) -// CHECK-NEXT: %25 = arith.ori %23, %24 : i256 loc(#loc41) -// CHECK-NEXT: %26 = arith.addi %25, %c2_i256 : i256 loc(#loc41) -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: cf.br ^bb9 loc(#loc41) +// CHECK-NEXT: %19 = arith.subi %c31_i256, %6 : i256 loc(#loc42) +// CHECK-NEXT: %20 = arith.muli %19, %c8_i256 : i256 loc(#loc42) +// CHECK-NEXT: %21 = arith.shli %c255_i256, %20 : i256 loc(#loc42) +// CHECK-NEXT: %22 = arith.xori %21, %c-1_i256 : i256 loc(#loc42) +// CHECK-NEXT: %23 = arith.andi %1, %22 : i256 loc(#loc42) +// CHECK-NEXT: %24 = arith.shli %c100_i256, %20 : i256 loc(#loc42) +// CHECK-NEXT: %25 = arith.ori %23, %24 : i256 loc(#loc42) +// CHECK-NEXT: %26 = arith.addi %25, %c2_i256 : i256 loc(#loc42) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: cf.br ^bb9 loc(#loc42) // CHECK-NEXT: ^bb7: // pred: ^bb5 -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc41) -// CHECK-NEXT: %31 = arith.andi %1, %c-256_i256 : i256 loc(#loc41) -// CHECK-NEXT: %32 = arith.ori %31, %c100_i256 : i256 loc(#loc41) -// CHECK-NEXT: %33 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: llvm.store %32, %33 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: llvm.store %c65_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: cf.br ^bb9 loc(#loc41) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc42) +// CHECK-NEXT: %31 = arith.andi %1, %c-256_i256 : i256 loc(#loc42) +// CHECK-NEXT: %32 = arith.ori %31, %c100_i256 : i256 loc(#loc42) +// CHECK-NEXT: %33 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %32, %33 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %c65_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: cf.br ^bb9 loc(#loc42) // CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %35 = arith.addi %1, %c2_i256 : i256 loc(#loc41) -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: llvm.store %c0_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc41) -// CHECK-NEXT: %39 = "llvm.intrcall"(%38, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc41) -// CHECK-NEXT: %40 = arith.divui %6, %c32_i256 : i256 loc(#loc41) -// CHECK-NEXT: %41 = arith.remui %6, %c32_i256 : i256 loc(#loc41) -// CHECK-NEXT: %42 = arith.subi %c31_i256, %41 : i256 loc(#loc41) -// CHECK-NEXT: %43 = arith.addi %39, %40 : i256 loc(#loc41) -// CHECK-NEXT: %44 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: %45 = llvm.load %44 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc41) -// CHECK-NEXT: %46 = arith.muli %42, %c8_i256 : i256 loc(#loc41) -// CHECK-NEXT: %47 = arith.shli %c255_i256, %46 : i256 loc(#loc41) -// CHECK-NEXT: %48 = arith.xori %47, %c-1_i256 : i256 loc(#loc41) -// CHECK-NEXT: %49 = arith.andi %45, %48 : i256 loc(#loc41) -// CHECK-NEXT: %50 = arith.shli %c100_i256, %46 : i256 loc(#loc41) -// CHECK-NEXT: %51 = arith.ori %49, %50 : i256 loc(#loc41) -// CHECK-NEXT: %52 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc41) -// CHECK-NEXT: cf.br ^bb9 loc(#loc41) +// CHECK-NEXT: %35 = arith.addi %1, %c2_i256 : i256 loc(#loc42) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: llvm.store %c0_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc42) +// CHECK-NEXT: %39 = "llvm.intrcall"(%38, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc42) +// CHECK-NEXT: %40 = arith.divui %6, %c32_i256 : i256 loc(#loc42) +// CHECK-NEXT: %41 = arith.remui %6, %c32_i256 : i256 loc(#loc42) +// CHECK-NEXT: %42 = arith.subi %c31_i256, %41 : i256 loc(#loc42) +// CHECK-NEXT: %43 = arith.addi %39, %40 : i256 loc(#loc42) +// CHECK-NEXT: %44 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: %45 = llvm.load %44 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc42) +// CHECK-NEXT: %46 = arith.muli %42, %c8_i256 : i256 loc(#loc42) +// CHECK-NEXT: %47 = arith.shli %c255_i256, %46 : i256 loc(#loc42) +// CHECK-NEXT: %48 = arith.xori %47, %c-1_i256 : i256 loc(#loc42) +// CHECK-NEXT: %49 = arith.andi %45, %48 : i256 loc(#loc42) +// CHECK-NEXT: %50 = arith.shli %c100_i256, %46 : i256 loc(#loc42) +// CHECK-NEXT: %51 = arith.ori %49, %50 : i256 loc(#loc42) +// CHECK-NEXT: %52 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc42) +// CHECK-NEXT: cf.br ^bb9 loc(#loc42) // CHECK-NEXT: ^bb9: // 3 preds: ^bb6, ^bb7, ^bb8 -// CHECK-NEXT: return loc(#loc40) -// CHECK-NEXT: } loc(#loc40) +// CHECK-NEXT: return loc(#loc41) +// CHECK-NEXT: } loc(#loc41) // CHECK-NEXT: func.func @p_14() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) @@ -2010,128 +1994,129 @@ contract Test { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c221_i256 = arith.constant 221 : i256 loc(#loc43) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc43) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc43) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc43) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc43) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc43) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc43) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc43) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc43) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc43) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc43) +// CHECK-NEXT: %c221_i256 = arith.constant 221 : i256 loc(#loc44) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc44) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc44) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc44) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc44) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc44) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc44) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc44) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc44) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc44) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc44) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc43) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc43) -// CHECK-NEXT: cf.br ^bb2 loc(#loc43) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc44) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc44) +// CHECK-NEXT: cf.br ^bb2 loc(#loc44) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.cmpi ugt, %6, %c18446744073709551616_i256 : i256 loc(#loc43) -// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc43) +// CHECK-NEXT: %13 = arith.cmpi ugt, %6, %c18446744073709551616_i256 : i256 loc(#loc44) +// CHECK-NEXT: cf.cond_br %13, ^bb3, ^bb4 loc(#loc44) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: llvm.store %c65_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc43) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc43) -// CHECK-NEXT: cf.br ^bb4 loc(#loc43) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %14 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %15 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: llvm.store %c65_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: "llvm.intrcall"(%16, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc44) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc44) +// CHECK-NEXT: cf.br ^bb4 loc(#loc44) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc43) -// CHECK-NEXT: cf.cond_br %17, ^bb8, ^bb5 loc(#loc43) +// CHECK-NEXT: %17 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc44) +// CHECK-NEXT: cf.cond_br %17, ^bb8, ^bb5 loc(#loc44) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %18 = arith.cmpi eq, %6, %c31_i256 : i256 loc(#loc43) -// CHECK-NEXT: cf.cond_br %18, ^bb7, ^bb6 loc(#loc43) +// CHECK-NEXT: %18 = arith.cmpi eq, %6, %c31_i256 : i256 loc(#loc44) +// CHECK-NEXT: cf.cond_br %18, ^bb7, ^bb6 loc(#loc44) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %19 = arith.subi %c31_i256, %6 : i256 loc(#loc43) -// CHECK-NEXT: %20 = arith.muli %19, %c8_i256 : i256 loc(#loc43) -// CHECK-NEXT: %21 = arith.shli %c255_i256, %20 : i256 loc(#loc43) -// CHECK-NEXT: %22 = arith.xori %21, %c-1_i256 : i256 loc(#loc43) -// CHECK-NEXT: %23 = arith.andi %1, %22 : i256 loc(#loc43) -// CHECK-NEXT: %24 = arith.shli %c221_i256, %20 : i256 loc(#loc43) -// CHECK-NEXT: %25 = arith.ori %23, %24 : i256 loc(#loc43) -// CHECK-NEXT: %26 = arith.addi %25, %c2_i256 : i256 loc(#loc43) -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: cf.br ^bb9 loc(#loc43) +// CHECK-NEXT: %19 = arith.subi %c31_i256, %6 : i256 loc(#loc44) +// CHECK-NEXT: %20 = arith.muli %19, %c8_i256 : i256 loc(#loc44) +// CHECK-NEXT: %21 = arith.shli %c255_i256, %20 : i256 loc(#loc44) +// CHECK-NEXT: %22 = arith.xori %21, %c-1_i256 : i256 loc(#loc44) +// CHECK-NEXT: %23 = arith.andi %1, %22 : i256 loc(#loc44) +// CHECK-NEXT: %24 = arith.shli %c221_i256, %20 : i256 loc(#loc44) +// CHECK-NEXT: %25 = arith.ori %23, %24 : i256 loc(#loc44) +// CHECK-NEXT: %26 = arith.addi %25, %c2_i256 : i256 loc(#loc44) +// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: cf.br ^bb9 loc(#loc44) // CHECK-NEXT: ^bb7: // pred: ^bb5 -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc43) -// CHECK-NEXT: %31 = arith.andi %1, %c-256_i256 : i256 loc(#loc43) -// CHECK-NEXT: %32 = arith.ori %31, %c221_i256 : i256 loc(#loc43) -// CHECK-NEXT: %33 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: llvm.store %32, %33 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: llvm.store %c65_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: cf.br ^bb9 loc(#loc43) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc44) +// CHECK-NEXT: %31 = arith.andi %1, %c-256_i256 : i256 loc(#loc44) +// CHECK-NEXT: %32 = arith.ori %31, %c221_i256 : i256 loc(#loc44) +// CHECK-NEXT: %33 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: llvm.store %32, %33 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: llvm.store %c65_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: cf.br ^bb9 loc(#loc44) // CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %35 = arith.addi %1, %c2_i256 : i256 loc(#loc43) -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: llvm.store %c0_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc43) -// CHECK-NEXT: %39 = "llvm.intrcall"(%38, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc43) -// CHECK-NEXT: %40 = arith.divui %6, %c32_i256 : i256 loc(#loc43) -// CHECK-NEXT: %41 = arith.remui %6, %c32_i256 : i256 loc(#loc43) -// CHECK-NEXT: %42 = arith.subi %c31_i256, %41 : i256 loc(#loc43) -// CHECK-NEXT: %43 = arith.addi %39, %40 : i256 loc(#loc43) -// CHECK-NEXT: %44 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: %45 = llvm.load %44 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc43) -// CHECK-NEXT: %46 = arith.muli %42, %c8_i256 : i256 loc(#loc43) -// CHECK-NEXT: %47 = arith.shli %c255_i256, %46 : i256 loc(#loc43) -// CHECK-NEXT: %48 = arith.xori %47, %c-1_i256 : i256 loc(#loc43) -// CHECK-NEXT: %49 = arith.andi %45, %48 : i256 loc(#loc43) -// CHECK-NEXT: %50 = arith.shli %c221_i256, %46 : i256 loc(#loc43) -// CHECK-NEXT: %51 = arith.ori %49, %50 : i256 loc(#loc43) -// CHECK-NEXT: %52 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc43) -// CHECK-NEXT: cf.br ^bb9 loc(#loc43) +// CHECK-NEXT: %35 = arith.addi %1, %c2_i256 : i256 loc(#loc44) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: llvm.store %35, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: llvm.store %c0_i256, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %38 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc44) +// CHECK-NEXT: %39 = "llvm.intrcall"(%38, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc44) +// CHECK-NEXT: %40 = arith.divui %6, %c32_i256 : i256 loc(#loc44) +// CHECK-NEXT: %41 = arith.remui %6, %c32_i256 : i256 loc(#loc44) +// CHECK-NEXT: %42 = arith.subi %c31_i256, %41 : i256 loc(#loc44) +// CHECK-NEXT: %43 = arith.addi %39, %40 : i256 loc(#loc44) +// CHECK-NEXT: %44 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: %45 = llvm.load %44 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc44) +// CHECK-NEXT: %46 = arith.muli %42, %c8_i256 : i256 loc(#loc44) +// CHECK-NEXT: %47 = arith.shli %c255_i256, %46 : i256 loc(#loc44) +// CHECK-NEXT: %48 = arith.xori %47, %c-1_i256 : i256 loc(#loc44) +// CHECK-NEXT: %49 = arith.andi %45, %48 : i256 loc(#loc44) +// CHECK-NEXT: %50 = arith.shli %c221_i256, %46 : i256 loc(#loc44) +// CHECK-NEXT: %51 = arith.ori %49, %50 : i256 loc(#loc44) +// CHECK-NEXT: %52 = llvm.inttoptr %43 : i256 to !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc44) +// CHECK-NEXT: cf.br ^bb9 loc(#loc44) // CHECK-NEXT: ^bb9: // 3 preds: ^bb6, ^bb7, ^bb8 -// CHECK-NEXT: return loc(#loc42) -// CHECK-NEXT: } loc(#loc42) +// CHECK-NEXT: return loc(#loc43) +// CHECK-NEXT: } loc(#loc43) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:62:2) -// CHECK-NEXT: #loc4 = loc({{.*}}:63:8) -// CHECK-NEXT: #loc5 = loc({{.*}}:63:4) -// CHECK-NEXT: #loc6 = loc({{.*}}:58:2) -// CHECK-NEXT: #loc8 = loc({{.*}}:59:15) -// CHECK-NEXT: #loc9 = loc({{.*}}:59:11) -// CHECK-NEXT: #loc10 = loc({{.*}}:59:4) -// CHECK-NEXT: #loc11 = loc({{.*}}:54:2) -// CHECK-NEXT: #loc12 = loc({{.*}}:55:4) -// CHECK-NEXT: #loc13 = loc({{.*}}:50:2) -// CHECK-NEXT: #loc14 = loc({{.*}}:51:11) -// CHECK-NEXT: #loc15 = loc({{.*}}:51:4) -// CHECK-NEXT: #loc16 = loc({{.*}}:46:2) -// CHECK-NEXT: #loc18 = loc({{.*}}:47:4) -// CHECK-NEXT: #loc19 = loc({{.*}}:42:2) -// CHECK-NEXT: #loc21 = loc({{.*}}:43:10) -// CHECK-NEXT: #loc23 = loc({{.*}}:38:2) -// CHECK-NEXT: #loc25 = loc({{.*}}:34:2) -// CHECK-NEXT: #loc27 = loc({{.*}}:35:10) -// CHECK-NEXT: #loc29 = loc({{.*}}:30:2) -// CHECK-NEXT: #loc30 = loc({{.*}}:31:11) -// CHECK-NEXT: #loc31 = loc({{.*}}:31:4) -// CHECK-NEXT: #loc32 = loc({{.*}}:26:2) -// CHECK-NEXT: #loc33 = loc({{.*}}:27:4) -// CHECK-NEXT: #loc34 = loc({{.*}}:22:2) -// CHECK-NEXT: #loc36 = loc({{.*}}:18:2) -// CHECK-NEXT: #loc38 = loc({{.*}}:14:2) -// CHECK-NEXT: #loc40 = loc({{.*}}:10:2) -// CHECK-NEXT: #loc41 = loc({{.*}}:11:4) -// CHECK-NEXT: #loc42 = loc({{.*}}:6:2) -// CHECK-NEXT: #loc43 = loc({{.*}}:7:4) +// CHECK-NEXT: #loc6 = loc({{.*}}:62:2) +// CHECK-NEXT: #loc8 = loc({{.*}}:63:8) +// CHECK-NEXT: #loc9 = loc({{.*}}:63:4) +// CHECK-NEXT: #loc10 = loc({{.*}}:58:2) +// CHECK-NEXT: #loc12 = loc({{.*}}:59:15) +// CHECK-NEXT: #loc13 = loc({{.*}}:59:11) +// CHECK-NEXT: #loc14 = loc({{.*}}:59:4) +// CHECK-NEXT: #loc15 = loc({{.*}}:54:2) +// CHECK-NEXT: #loc16 = loc({{.*}}:55:4) +// CHECK-NEXT: #loc17 = loc({{.*}}:50:2) +// CHECK-NEXT: #loc18 = loc({{.*}}:51:11) +// CHECK-NEXT: #loc19 = loc({{.*}}:51:4) +// CHECK-NEXT: #loc20 = loc({{.*}}:46:2) +// CHECK-NEXT: #loc21 = loc({{.*}}:47:4) +// CHECK-NEXT: #loc22 = loc({{.*}}:42:2) +// CHECK-NEXT: #loc24 = loc({{.*}}:43:10) +// CHECK-NEXT: #loc25 = loc({{.*}}:38:2) +// CHECK-NEXT: #loc26 = loc({{.*}}:4:2) +// CHECK-NEXT: #loc27 = loc({{.*}}:34:2) +// CHECK-NEXT: #loc29 = loc({{.*}}:35:10) +// CHECK-NEXT: #loc30 = loc({{.*}}:30:2) +// CHECK-NEXT: #loc31 = loc({{.*}}:31:11) +// CHECK-NEXT: #loc32 = loc({{.*}}:31:4) +// CHECK-NEXT: #loc33 = loc({{.*}}:26:2) +// CHECK-NEXT: #loc34 = loc({{.*}}:27:4) +// CHECK-NEXT: #loc35 = loc({{.*}}:22:2) +// CHECK-NEXT: #loc37 = loc({{.*}}:18:2) +// CHECK-NEXT: #loc39 = loc({{.*}}:14:2) +// CHECK-NEXT: #loc41 = loc({{.*}}:10:2) +// CHECK-NEXT: #loc42 = loc({{.*}}:11:4) +// CHECK-NEXT: #loc43 = loc({{.*}}:6:2) +// CHECK-NEXT: #loc44 = loc({{.*}}:7:4) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/storage-struct.sol b/test/lit/mlirCodegen/EVM/storage-struct.sol index 742741516..b48ec06ed 100644 --- a/test/lit/mlirCodegen/EVM/storage-struct.sol +++ b/test/lit/mlirCodegen/EVM/storage-struct.sol @@ -94,7 +94,7 @@ contract C { // NOTE: Assertions have been autogenerated by test/updFileCheckTest.py // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol -// CHECK-NEXT: #loc20 = loc({{.*}}:78:4) +// CHECK-NEXT: #loc2 = loc({{.*}}:78:4) // CHECK-NEXT: module @C_243 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -210,6 +210,146 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:78:4), %arg1: i256 loc({{.*}}:78:4), %arg2: i256 loc({{.*}}:78:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:78:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:78:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:78:4), %arg1: i256 loc({{.*}}:78:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc2) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc2) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc2) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:78:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc2) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:78:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc2) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc2) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc2) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc2) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc2) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc2) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc2) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc2) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb11 loc(#loc2) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: cf.br ^bb12 loc(#loc2) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: func.func @rw_242() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c48059_i256 = arith.constant 48059 : i256 loc(#loc) // CHECK-NEXT: %c15_i256 = arith.constant 15 : i256 loc(#loc) @@ -238,23 +378,17 @@ contract C { // CHECK-NEXT: %c16_i256 = arith.constant 16 : i256 loc(#loc) // CHECK-NEXT: %c18_i256 = arith.constant 18 : i256 loc(#loc) // CHECK-NEXT: %c14_i256 = arith.constant 14 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c47687202278368593055453199545051370742183790376672955679702151372887807754240_i256 = arith.constant 47687202278368593055453199545051370742183790376672955679702151372887807754240 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c9_i256 = arith.constant 9 : i256 loc(#loc) // CHECK-NEXT: %c1461501637330902918203684832716283019655932542975_i256 = arith.constant 1461501637330902918203684832716283019655932542975 : i256 loc(#loc) // CHECK-NEXT: %c79228162514264337593543950335_i256 = arith.constant 79228162514264337593543950335 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c5_i256 = arith.constant 5 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) // CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) @@ -262,283 +396,169 @@ contract C { // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc) // CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %2 = arith.shrui %1, %c8_i256 : i256 loc(#loc3) -// CHECK-NEXT: %3 = arith.andi %2, %c255_i256 : i256 loc(#loc3) -// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) -// CHECK-NEXT: %6 = arith.andi %5, %c-256_i256 : i256 loc(#loc4) -// CHECK-NEXT: %7 = arith.ori %6, %3 : i256 loc(#loc4) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: llvm.store %7, %8 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) -// CHECK-NEXT: %9 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc5) -// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) -// CHECK-NEXT: %11 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %10, %11 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %14 = arith.andi %13, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %15 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %17 = arith.andi %16, %c-256_i256 : i256 loc(#loc8) -// CHECK-NEXT: %18 = arith.ori %17, %14 : i256 loc(#loc8) -// CHECK-NEXT: %19 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %18, %19 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %20 = llvm.inttoptr %c7_i256 : i256 to !llvm.ptr<5> loc(#loc9) -// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) -// CHECK-NEXT: %22 = arith.andi %21, %c255_i256 : i256 loc(#loc9) -// CHECK-NEXT: %23 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: %24 = llvm.load %23 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc10) -// CHECK-NEXT: %25 = arith.andi %24, %c-256_i256 : i256 loc(#loc10) -// CHECK-NEXT: %26 = arith.ori %25, %22 : i256 loc(#loc10) -// CHECK-NEXT: %27 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: %28 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) -// CHECK-NEXT: %30 = arith.addi %29, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %31 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c6_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc11) -// CHECK-NEXT: %35 = arith.addi %34, %29 : i256 loc(#loc11) -// CHECK-NEXT: %36 = llvm.inttoptr %35 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: llvm.store %c1_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %37 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %39 = arith.andi %38, %c79228162514264337593543950335_i256 : i256 loc(#loc12) -// CHECK-NEXT: %40 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc13) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) -// CHECK-NEXT: %42 = arith.andi %41, %c-79228162514264337593543950336_i256 : i256 loc(#loc13) -// CHECK-NEXT: %43 = arith.ori %42, %39 : i256 loc(#loc13) -// CHECK-NEXT: %44 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc13) -// CHECK-NEXT: llvm.store %43, %44 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc13) -// CHECK-NEXT: %45 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc14) -// CHECK-NEXT: %46 = arith.andi %45, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc15) -// CHECK-NEXT: %47 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc15) -// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc15) -// CHECK-NEXT: %49 = arith.andi %48, %c79228162514264337593543950335_i256 : i256 loc(#loc15) -// CHECK-NEXT: %50 = arith.shli %46, %c96_i256 : i256 loc(#loc15) -// CHECK-NEXT: %51 = arith.ori %49, %50 : i256 loc(#loc15) -// CHECK-NEXT: %52 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc15) -// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc15) -// CHECK-NEXT: %53 = llvm.inttoptr %c9_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c100_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %54 = llvm.inttoptr %c10_i256 : i256 to !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: llvm.store %c201_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc17) -// CHECK-NEXT: %55 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> loc(#loc18) -// CHECK-NEXT: %56 = llvm.load %55 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc18) -// CHECK-NEXT: %57 = arith.andi %56, %c-340282366920938463463374607431768211456_i256 : i256 loc(#loc18) -// CHECK-NEXT: %58 = arith.ori %57, %c202_i256 : i256 loc(#loc18) -// CHECK-NEXT: %59 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> loc(#loc18) -// CHECK-NEXT: llvm.store %58, %59 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) -// CHECK-NEXT: %60 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc19) -// CHECK-NEXT: %62 = arith.addi %61, %c64_i256 : i256 loc(#loc19) -// CHECK-NEXT: %63 = arith.cmpi ugt, %62, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: %64 = arith.cmpi ult, %62, %61 : i256 loc(#loc19) -// CHECK-NEXT: %65 = arith.ori %63, %64 : i1 loc(#loc19) -// CHECK-NEXT: cf.cond_br %65, ^bb1, ^bb2 loc(#loc19) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %2 = arith.shrui %1, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %3 = arith.andi %2, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %4 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %5 = llvm.load %4 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.andi %5, %c-256_i256 : i256 loc(#loc5) +// CHECK-NEXT: %7 = arith.ori %6, %3 : i256 loc(#loc5) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %7, %8 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %9 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc6) +// CHECK-NEXT: %10 = llvm.load %9 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) +// CHECK-NEXT: %11 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: llvm.store %10, %11 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc7) +// CHECK-NEXT: %12 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<5> loc(#loc8) +// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) +// CHECK-NEXT: %14 = arith.andi %13, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %15 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc9) +// CHECK-NEXT: %17 = arith.andi %16, %c-256_i256 : i256 loc(#loc9) +// CHECK-NEXT: %18 = arith.ori %17, %14 : i256 loc(#loc9) +// CHECK-NEXT: %19 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: llvm.store %18, %19 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc9) +// CHECK-NEXT: %20 = llvm.inttoptr %c7_i256 : i256 to !llvm.ptr<5> loc(#loc10) +// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc10) +// CHECK-NEXT: %22 = arith.andi %21, %c255_i256 : i256 loc(#loc10) +// CHECK-NEXT: %23 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc11) +// CHECK-NEXT: %24 = llvm.load %23 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) +// CHECK-NEXT: %25 = arith.andi %24, %c-256_i256 : i256 loc(#loc11) +// CHECK-NEXT: %26 = arith.ori %25, %22 : i256 loc(#loc11) +// CHECK-NEXT: %27 = llvm.inttoptr %c5_i256 : i256 to !llvm.ptr<5> loc(#loc11) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc11) +// CHECK-NEXT: %28 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) +// CHECK-NEXT: %30 = arith.addi %29, %c1_i256 : i256 loc(#loc12) +// CHECK-NEXT: %31 = llvm.inttoptr %c6_i256 : i256 to !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: llvm.store %30, %31 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: llvm.store %c6_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) +// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) +// CHECK-NEXT: %35 = arith.addi %34, %29 : i256 loc(#loc12) +// CHECK-NEXT: %36 = llvm.inttoptr %35 : i256 to !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: llvm.store %c1_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: %37 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc13) +// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) +// CHECK-NEXT: %39 = arith.andi %38, %c79228162514264337593543950335_i256 : i256 loc(#loc13) +// CHECK-NEXT: %40 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc14) +// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc14) +// CHECK-NEXT: %42 = arith.andi %41, %c-79228162514264337593543950336_i256 : i256 loc(#loc14) +// CHECK-NEXT: %43 = arith.ori %42, %39 : i256 loc(#loc14) +// CHECK-NEXT: %44 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc14) +// CHECK-NEXT: llvm.store %43, %44 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc14) +// CHECK-NEXT: %45 = "llvm.intrcall"() <{id = 4028 : i32, name = "evm.address"}> : () -> i256 loc(#loc15) +// CHECK-NEXT: %46 = arith.andi %45, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc16) +// CHECK-NEXT: %47 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) +// CHECK-NEXT: %49 = arith.andi %48, %c79228162514264337593543950335_i256 : i256 loc(#loc16) +// CHECK-NEXT: %50 = arith.shli %46, %c96_i256 : i256 loc(#loc16) +// CHECK-NEXT: %51 = arith.ori %49, %50 : i256 loc(#loc16) +// CHECK-NEXT: %52 = llvm.inttoptr %c8_i256 : i256 to !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) +// CHECK-NEXT: %53 = llvm.inttoptr %c9_i256 : i256 to !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: llvm.store %c100_i256, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc17) +// CHECK-NEXT: %54 = llvm.inttoptr %c10_i256 : i256 to !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: llvm.store %c201_i256, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc18) +// CHECK-NEXT: %55 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: %56 = llvm.load %55 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) +// CHECK-NEXT: %57 = arith.andi %56, %c-340282366920938463463374607431768211456_i256 : i256 loc(#loc19) +// CHECK-NEXT: %58 = arith.ori %57, %c202_i256 : i256 loc(#loc19) +// CHECK-NEXT: %59 = llvm.inttoptr %c11_i256 : i256 to !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: llvm.store %58, %59 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) +// CHECK-NEXT: %60 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: %61 = llvm.load %60 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc20) +// CHECK-NEXT: %62 = arith.addi %61, %c64_i256 : i256 loc(#loc20) +// CHECK-NEXT: %63 = arith.cmpi ugt, %62, %c18446744073709551615_i256 : i256 loc(#loc20) +// CHECK-NEXT: %64 = arith.cmpi ult, %62, %61 : i256 loc(#loc20) +// CHECK-NEXT: %65 = arith.ori %63, %64 : i1 loc(#loc20) +// CHECK-NEXT: cf.cond_br %65, ^bb1, ^bb2 loc(#loc20) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %66 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %66 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %67 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %67 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %68 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%68, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb2 loc(#loc19) -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %69 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %62, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %70 = llvm.inttoptr %61 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c2_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %71 = arith.addi %61, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c47687202278368593055453199545051370742183790376672955679702151372887807754240_i256, %72 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %73 = llvm.inttoptr %61 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %74 = llvm.load %73 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc20) -// CHECK-NEXT: %75 = llvm.inttoptr %c12_i256 : i256 to !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: %76 = llvm.load %75 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc20) -// CHECK-NEXT: %77 = arith.shrui %76, %c1_i256 : i256 loc(#loc20) -// CHECK-NEXT: %78 = arith.andi %76, %c1_i256 : i256 loc(#loc20) -// CHECK-NEXT: %79 = arith.cmpi eq, %78, %c0_i256 : i256 loc(#loc20) -// CHECK-NEXT: %80 = arith.andi %77, %c127_i256 : i256 loc(#loc20) -// CHECK-NEXT: %81 = arith.select %79, %80, %77 : i256 loc(#loc20) -// CHECK-NEXT: %82 = arith.cmpi ult, %81, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %83 = arith.extui %82 : i1 to i256 loc(#loc20) -// CHECK-NEXT: %84 = arith.cmpi eq, %78, %83 : i256 loc(#loc20) -// CHECK-NEXT: cf.cond_br %84, ^bb3, ^bb4 loc(#loc20) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %85 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %85 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %86 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %c34_i256, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: "llvm.intrcall"(%87, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc20) +// CHECK-NEXT: %66 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %66 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: %67 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: llvm.store %c65_i256, %67 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: %68 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: "llvm.intrcall"(%68, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc20) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc20) -// CHECK-NEXT: cf.br ^bb4 loc(#loc20) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %88 = arith.cmpi ugt, %81, %c31_i256 : i256 loc(#loc20) -// CHECK-NEXT: cf.cond_br %88, ^bb5, ^bb8 loc(#loc20) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %89 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %c12_i256, %89 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %90 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %91 = "llvm.intrcall"(%90, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc20) -// CHECK-NEXT: %92 = arith.addi %74, %c31_i256 : i256 loc(#loc20) -// CHECK-NEXT: %93 = arith.divui %92, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %94 = arith.addi %91, %93 : i256 loc(#loc20) -// CHECK-NEXT: %95 = arith.cmpi ult, %74, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %96 = arith.select %95, %91, %94 : i256 loc(#loc20) -// CHECK-NEXT: %97 = arith.addi %81, %c31_i256 : i256 loc(#loc20) -// CHECK-NEXT: %98 = arith.divui %97, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %99 = arith.addi %91, %98 : i256 loc(#loc20) -// CHECK-NEXT: cf.br ^bb6(%96 : i256) loc(#loc20) -// CHECK-NEXT: ^bb6(%100: i256 loc({{.*}}:78:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %101 = arith.cmpi ult, %100, %99 : i256 loc(#loc20) -// CHECK-NEXT: cf.cond_br %101, ^bb7(%100 : i256), ^bb8 loc(#loc20) -// CHECK-NEXT: ^bb7(%102: i256 loc({{.*}}:78:4)): // pred: ^bb6 -// CHECK-NEXT: %103 = llvm.inttoptr %102 : i256 to !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: llvm.store %c0_i256, %103 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: %104 = arith.addi %102, %c1_i256 : i256 loc(#loc20) -// CHECK-NEXT: cf.br ^bb6(%104 : i256) loc(#loc20) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %105 = arith.cmpi ugt, %74, %c31_i256 : i256 loc(#loc20) -// CHECK-NEXT: cf.cond_br %105, ^bb12, ^bb9 loc(#loc20) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %106 = arith.cmpi ne, %74, %c0_i256 : i256 loc(#loc20) -// CHECK-NEXT: cf.cond_br %106, ^bb11, ^bb10 loc(#loc20) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %107 = llvm.inttoptr %c12_i256 : i256 to !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: llvm.store %c0_i256, %107 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: cf.br ^bb18 loc(#loc20) -// CHECK-NEXT: ^bb11: // pred: ^bb9 -// CHECK-NEXT: %108 = arith.addi %61, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %109 = llvm.inttoptr %108 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %110 = llvm.load %109 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc20) -// CHECK-NEXT: %111 = arith.muli %74, %c8_i256 : i256 loc(#loc20) -// CHECK-NEXT: %112 = arith.subi %c256_i256, %111 : i256 loc(#loc20) -// CHECK-NEXT: %113 = arith.shli %c-1_i256, %112 : i256 loc(#loc20) -// CHECK-NEXT: %114 = arith.andi %110, %113 : i256 loc(#loc20) -// CHECK-NEXT: %115 = arith.muli %74, %c2_i256 : i256 loc(#loc20) -// CHECK-NEXT: %116 = arith.ori %114, %115 : i256 loc(#loc20) -// CHECK-NEXT: %117 = llvm.inttoptr %c12_i256 : i256 to !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: llvm.store %116, %117 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: cf.br ^bb18 loc(#loc20) -// CHECK-NEXT: ^bb12: // pred: ^bb8 -// CHECK-NEXT: %118 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: llvm.store %c12_i256, %118 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %119 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %120 = "llvm.intrcall"(%119, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc20) -// CHECK-NEXT: %121 = arith.addi %61, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %122 = arith.andi %74, %c-32_i256 : i256 loc(#loc20) -// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc20) -// CHECK-NEXT: ^bb13(%123: i256 loc({{.*}}:78:4)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %124 = arith.cmpi ult, %123, %122 : i256 loc(#loc20) -// CHECK-NEXT: cf.cond_br %124, ^bb14(%123 : i256), ^bb15 loc(#loc20) -// CHECK-NEXT: ^bb14(%125: i256 loc({{.*}}:78:4)): // pred: ^bb13 -// CHECK-NEXT: %126 = arith.divui %125, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %127 = arith.addi %121, %125 : i256 loc(#loc20) -// CHECK-NEXT: %128 = llvm.inttoptr %127 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %129 = llvm.load %128 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc20) -// CHECK-NEXT: %130 = arith.addi %120, %126 : i256 loc(#loc20) -// CHECK-NEXT: %131 = llvm.inttoptr %130 : i256 to !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: llvm.store %129, %131 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: %132 = arith.addi %125, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: cf.br ^bb13(%132 : i256) loc(#loc20) -// CHECK-NEXT: ^bb15: // pred: ^bb13 -// CHECK-NEXT: %133 = arith.cmpi ult, %122, %74 : i256 loc(#loc20) -// CHECK-NEXT: cf.cond_br %133, ^bb16, ^bb17 loc(#loc20) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %134 = arith.andi %74, %c31_i256 : i256 loc(#loc20) -// CHECK-NEXT: %135 = arith.divui %122, %c32_i256 : i256 loc(#loc20) -// CHECK-NEXT: %136 = arith.addi %121, %122 : i256 loc(#loc20) -// CHECK-NEXT: %137 = llvm.inttoptr %136 : i256 to !llvm.ptr<1> loc(#loc20) -// CHECK-NEXT: %138 = llvm.load %137 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc20) -// CHECK-NEXT: %139 = arith.muli %134, %c8_i256 : i256 loc(#loc20) -// CHECK-NEXT: %140 = arith.subi %c256_i256, %139 : i256 loc(#loc20) -// CHECK-NEXT: %141 = arith.shli %c-1_i256, %140 : i256 loc(#loc20) -// CHECK-NEXT: %142 = arith.andi %138, %141 : i256 loc(#loc20) -// CHECK-NEXT: %143 = arith.addi %120, %135 : i256 loc(#loc20) -// CHECK-NEXT: %144 = llvm.inttoptr %143 : i256 to !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: llvm.store %142, %144 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: cf.br ^bb17 loc(#loc20) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %145 = arith.muli %74, %c2_i256 : i256 loc(#loc20) -// CHECK-NEXT: %146 = arith.ori %145, %c1_i256 : i256 loc(#loc20) -// CHECK-NEXT: %147 = llvm.inttoptr %c12_i256 : i256 to !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: llvm.store %146, %147 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc20) -// CHECK-NEXT: cf.br ^bb18 loc(#loc20) -// CHECK-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 -// CHECK-NEXT: %148 = llvm.inttoptr %c13_i256 : i256 to !llvm.ptr<5> loc(#loc21) -// CHECK-NEXT: llvm.store %c300_i256, %148 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc21) -// CHECK-NEXT: %149 = llvm.inttoptr %c13_i256 : i256 to !llvm.ptr<5> loc(#loc22) -// CHECK-NEXT: %150 = llvm.load %149 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc22) -// CHECK-NEXT: %151 = llvm.inttoptr %c10_i256 : i256 to !llvm.ptr<5> loc(#loc23) -// CHECK-NEXT: llvm.store %150, %151 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc23) -// CHECK-NEXT: %152 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %153 = llvm.load %152 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc24) -// CHECK-NEXT: %154 = arith.andi %153, %c-256_i256 : i256 loc(#loc24) -// CHECK-NEXT: %155 = arith.ori %154, %c1_i256 : i256 loc(#loc24) -// CHECK-NEXT: %156 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: llvm.store %155, %156 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) -// CHECK-NEXT: %157 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc25) -// CHECK-NEXT: %158 = llvm.load %157 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc25) -// CHECK-NEXT: %159 = arith.andi %158, %c-65281_i256 : i256 loc(#loc25) -// CHECK-NEXT: %160 = arith.ori %159, %c512_i256 : i256 loc(#loc25) -// CHECK-NEXT: %161 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc25) -// CHECK-NEXT: llvm.store %160, %161 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc25) -// CHECK-NEXT: %162 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc26) -// CHECK-NEXT: %163 = llvm.load %162 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc26) -// CHECK-NEXT: %164 = arith.andi %163, %c-16711681_i256 : i256 loc(#loc26) -// CHECK-NEXT: %165 = arith.ori %164, %c196608_i256 : i256 loc(#loc26) -// CHECK-NEXT: %166 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc26) -// CHECK-NEXT: llvm.store %165, %166 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc26) -// CHECK-NEXT: %167 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: %168 = llvm.load %167 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc27) -// CHECK-NEXT: %169 = arith.andi %168, %c-4278190081_i256 : i256 loc(#loc27) -// CHECK-NEXT: %170 = arith.ori %169, %c67108864_i256 : i256 loc(#loc27) -// CHECK-NEXT: %171 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: llvm.store %170, %171 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) -// CHECK-NEXT: %172 = llvm.inttoptr %c18_i256 : i256 to !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: llvm.store %c43690_i256, %172 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) -// CHECK-NEXT: %173 = llvm.inttoptr %c15_i256 : i256 to !llvm.ptr<5> loc(#loc29) -// CHECK-NEXT: llvm.store %c48059_i256, %173 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc29) -// CHECK-NEXT: %174 = llvm.inttoptr %c15_i256 : i256 to !llvm.ptr<5> loc(#loc30) -// CHECK-NEXT: %175 = llvm.load %174 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc30) -// CHECK-NEXT: %176 = llvm.inttoptr %c16_i256 : i256 to !llvm.ptr<5> loc(#loc31) -// CHECK-NEXT: llvm.store %175, %176 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc31) -// CHECK-NEXT: %177 = llvm.inttoptr %c18_i256 : i256 to !llvm.ptr<5> loc(#loc32) -// CHECK-NEXT: %178 = llvm.load %177 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc32) -// CHECK-NEXT: %179 = llvm.inttoptr %c17_i256 : i256 to !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: llvm.store %178, %179 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc33) -// CHECK-NEXT: return loc(#loc2) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc20) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %69 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: llvm.store %62, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: %70 = llvm.inttoptr %61 : i256 to !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: llvm.store %c2_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: %71 = arith.addi %61, %c32_i256 : i256 loc(#loc20) +// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: llvm.store %c47687202278368593055453199545051370742183790376672955679702151372887807754240_i256, %72 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc20) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%61, %c12_i256) : (i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %73 = llvm.inttoptr %c13_i256 : i256 to !llvm.ptr<5> loc(#loc21) +// CHECK-NEXT: llvm.store %c300_i256, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc21) +// CHECK-NEXT: %74 = llvm.inttoptr %c13_i256 : i256 to !llvm.ptr<5> loc(#loc22) +// CHECK-NEXT: %75 = llvm.load %74 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc22) +// CHECK-NEXT: %76 = llvm.inttoptr %c10_i256 : i256 to !llvm.ptr<5> loc(#loc23) +// CHECK-NEXT: llvm.store %75, %76 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc23) +// CHECK-NEXT: %77 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc24) +// CHECK-NEXT: %78 = llvm.load %77 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc24) +// CHECK-NEXT: %79 = arith.andi %78, %c-256_i256 : i256 loc(#loc24) +// CHECK-NEXT: %80 = arith.ori %79, %c1_i256 : i256 loc(#loc24) +// CHECK-NEXT: %81 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc24) +// CHECK-NEXT: llvm.store %80, %81 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc24) +// CHECK-NEXT: %82 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc25) +// CHECK-NEXT: %83 = llvm.load %82 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc25) +// CHECK-NEXT: %84 = arith.andi %83, %c-65281_i256 : i256 loc(#loc25) +// CHECK-NEXT: %85 = arith.ori %84, %c512_i256 : i256 loc(#loc25) +// CHECK-NEXT: %86 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc25) +// CHECK-NEXT: llvm.store %85, %86 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc25) +// CHECK-NEXT: %87 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc26) +// CHECK-NEXT: %88 = llvm.load %87 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc26) +// CHECK-NEXT: %89 = arith.andi %88, %c-16711681_i256 : i256 loc(#loc26) +// CHECK-NEXT: %90 = arith.ori %89, %c196608_i256 : i256 loc(#loc26) +// CHECK-NEXT: %91 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc26) +// CHECK-NEXT: llvm.store %90, %91 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc26) +// CHECK-NEXT: %92 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc27) +// CHECK-NEXT: %93 = llvm.load %92 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc27) +// CHECK-NEXT: %94 = arith.andi %93, %c-4278190081_i256 : i256 loc(#loc27) +// CHECK-NEXT: %95 = arith.ori %94, %c67108864_i256 : i256 loc(#loc27) +// CHECK-NEXT: %96 = llvm.inttoptr %c14_i256 : i256 to !llvm.ptr<5> loc(#loc27) +// CHECK-NEXT: llvm.store %95, %96 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc27) +// CHECK-NEXT: %97 = llvm.inttoptr %c18_i256 : i256 to !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: llvm.store %c43690_i256, %97 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc28) +// CHECK-NEXT: %98 = llvm.inttoptr %c15_i256 : i256 to !llvm.ptr<5> loc(#loc29) +// CHECK-NEXT: llvm.store %c48059_i256, %98 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc29) +// CHECK-NEXT: %99 = llvm.inttoptr %c15_i256 : i256 to !llvm.ptr<5> loc(#loc30) +// CHECK-NEXT: %100 = llvm.load %99 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc30) +// CHECK-NEXT: %101 = llvm.inttoptr %c16_i256 : i256 to !llvm.ptr<5> loc(#loc31) +// CHECK-NEXT: llvm.store %100, %101 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc31) +// CHECK-NEXT: %102 = llvm.inttoptr %c18_i256 : i256 to !llvm.ptr<5> loc(#loc32) +// CHECK-NEXT: %103 = llvm.load %102 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc32) +// CHECK-NEXT: %104 = llvm.inttoptr %c17_i256 : i256 to !llvm.ptr<5> loc(#loc33) +// CHECK-NEXT: llvm.store %103, %104 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc33) +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) -// CHECK-NEXT: #loc2 = loc({{.*}}:67:2) -// CHECK-NEXT: #loc3 = loc({{.*}}:68:15) -// CHECK-NEXT: #loc4 = loc({{.*}}:68:4) -// CHECK-NEXT: #loc5 = loc({{.*}}:69:18) -// CHECK-NEXT: #loc6 = loc({{.*}}:69:4) -// CHECK-NEXT: #loc7 = loc({{.*}}:70:21) -// CHECK-NEXT: #loc8 = loc({{.*}}:70:4) -// CHECK-NEXT: #loc9 = loc({{.*}}:71:14) -// CHECK-NEXT: #loc10 = loc({{.*}}:71:4) -// CHECK-NEXT: #loc11 = loc({{.*}}:72:4) -// CHECK-NEXT: #loc12 = loc({{.*}}:73:20) -// CHECK-NEXT: #loc13 = loc({{.*}}:73:4) -// CHECK-NEXT: #loc14 = loc({{.*}}:74:30) -// CHECK-NEXT: #loc15 = loc({{.*}}:74:4) -// CHECK-NEXT: #loc16 = loc({{.*}}:75:4) -// CHECK-NEXT: #loc17 = loc({{.*}}:76:4) -// CHECK-NEXT: #loc18 = loc({{.*}}:77:4) -// CHECK-NEXT: #loc19 = loc({{.*}}:78:31) +// CHECK-NEXT: #loc3 = loc({{.*}}:67:2) +// CHECK-NEXT: #loc4 = loc({{.*}}:68:15) +// CHECK-NEXT: #loc5 = loc({{.*}}:68:4) +// CHECK-NEXT: #loc6 = loc({{.*}}:69:18) +// CHECK-NEXT: #loc7 = loc({{.*}}:69:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:70:21) +// CHECK-NEXT: #loc9 = loc({{.*}}:70:4) +// CHECK-NEXT: #loc10 = loc({{.*}}:71:14) +// CHECK-NEXT: #loc11 = loc({{.*}}:71:4) +// CHECK-NEXT: #loc12 = loc({{.*}}:72:4) +// CHECK-NEXT: #loc13 = loc({{.*}}:73:20) +// CHECK-NEXT: #loc14 = loc({{.*}}:73:4) +// CHECK-NEXT: #loc15 = loc({{.*}}:74:30) +// CHECK-NEXT: #loc16 = loc({{.*}}:74:4) +// CHECK-NEXT: #loc17 = loc({{.*}}:75:4) +// CHECK-NEXT: #loc18 = loc({{.*}}:76:4) +// CHECK-NEXT: #loc19 = loc({{.*}}:77:4) +// CHECK-NEXT: #loc20 = loc({{.*}}:78:31) // CHECK-NEXT: #loc21 = loc({{.*}}:79:4) // CHECK-NEXT: #loc22 = loc({{.*}}:80:28) // CHECK-NEXT: #loc23 = loc({{.*}}:80:4) diff --git a/test/lit/mlirCodegen/EVM/string_and_bytes_getter.sol b/test/lit/mlirCodegen/EVM/string_and_bytes_getter.sol index db620abbb..e47f825e8 100644 --- a/test/lit/mlirCodegen/EVM/string_and_bytes_getter.sol +++ b/test/lit/mlirCodegen/EVM/string_and_bytes_getter.sol @@ -15,12 +15,7 @@ contract C { // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol // CHECK-NEXT: #loc3 = loc({{.*}}:6:4) -// CHECK-NEXT: #loc6 = loc({{.*}}:8:8) -// CHECK-NEXT: #loc8 = loc({{.*}}:9:8) -// CHECK-NEXT: #loc10 = loc({{.*}}:10:8) -// CHECK-NEXT: #loc11 = loc({{.*}}:5:4) -// CHECK-NEXT: #loc12 = loc({{.*}}:4:4) -// CHECK-NEXT: #loc13 = loc({{.*}}:3:4) +// CHECK-NEXT: #loc11 = loc({{.*}}:3:4) // CHECK-NEXT: module @C_26 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { // CHECK-NEXT: func.func @".unreachable"() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: llvm.unreachable loc(#loc1) @@ -89,16 +84,11 @@ contract C { // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: func.func @_25() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c-439061522557375173052089223601630338202760422010735733633791622124826263552_i256 = arith.constant -439061522557375173052089223601630338202760422010735733633791622124826263552 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) // CHECK-NEXT: %c29517411314469296944035832213410995203454146012831046463037677802962997477376_i256 = arith.constant 29517411314469296944035832213410995203454146012831046463037677802962997477376 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c47219736118185034978131396930477889456522225816706544572588755557152609796096_i256 = arith.constant 47219736118185034978131396930477889456522225816706544572588755557152609796096 : i256 loc(#loc) // CHECK-NEXT: %c11_i256 = arith.constant 11 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) -// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) -// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) -// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c44048183293808120317390542201052832727062033572611867748297851798484192067584_i256 = arith.constant 44048183293808120317390542201052832727062033572611867748297851798484192067584 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) @@ -106,8 +96,6 @@ contract C { // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c3_i256 = arith.constant 3 : i256 loc(#loc3) // CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -135,538 +123,82 @@ contract C { // CHECK-NEXT: %11 = arith.addi %1, %c32_i256 : i256 loc(#loc4) // CHECK-NEXT: %12 = llvm.inttoptr %11 : i256 to !llvm.ptr<1> loc(#loc4) // CHECK-NEXT: llvm.store %c44048183293808120317390542201052832727062033572611867748297851798484192067584_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %13 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %15 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %17 = arith.shrui %16, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %18 = arith.andi %16, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %19 = arith.cmpi eq, %18, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: %20 = arith.andi %17, %c127_i256 : i256 loc(#loc3) -// CHECK-NEXT: %21 = arith.select %19, %20, %17 : i256 loc(#loc3) -// CHECK-NEXT: %22 = arith.cmpi ult, %21, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %23 = arith.extui %22 : i1 to i256 loc(#loc3) -// CHECK-NEXT: %24 = arith.cmpi eq, %18, %23 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %24, ^bb3, ^bb4 loc(#loc3) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%1, %c3_i256) : (i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) +// CHECK-NEXT: %15 = arith.addi %14, %c64_i256 : i256 loc(#loc5) +// CHECK-NEXT: %16 = arith.cmpi ugt, %15, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: %17 = arith.cmpi ult, %15, %14 : i256 loc(#loc5) +// CHECK-NEXT: %18 = arith.ori %16, %17 : i1 loc(#loc5) +// CHECK-NEXT: cf.cond_br %18, ^bb3, ^bb4 loc(#loc5) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %26 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c34_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %27 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: "llvm.intrcall"(%27, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) -// CHECK-NEXT: cf.br ^bb4 loc(#loc3) +// CHECK-NEXT: %19 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %19 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %20 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %20 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %21 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%21, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb4 loc(#loc5) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %28 = arith.cmpi ugt, %21, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %28, ^bb5, ^bb8 loc(#loc3) +// CHECK-NEXT: %22 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %15, %22 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %23 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c11_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %24 = arith.addi %14, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %25 = llvm.inttoptr %24 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c47219736118185034978131396930477889456522225816706544572588755557152609796096_i256, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%14, %c0_i256) : (i256, i256) -> () loc(#loc6) +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %27 = llvm.load %26 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) +// CHECK-NEXT: %28 = arith.addi %27, %c64_i256 : i256 loc(#loc7) +// CHECK-NEXT: %29 = arith.cmpi ugt, %28, %c18446744073709551615_i256 : i256 loc(#loc7) +// CHECK-NEXT: %30 = arith.cmpi ult, %28, %27 : i256 loc(#loc7) +// CHECK-NEXT: %31 = arith.ori %29, %30 : i1 loc(#loc7) +// CHECK-NEXT: cf.cond_br %31, ^bb5, ^bb6 loc(#loc7) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c3_i256, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %30 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %31 = "llvm.intrcall"(%30, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %32 = arith.addi %14, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %33 = arith.divui %32, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %34 = arith.addi %31, %33 : i256 loc(#loc3) -// CHECK-NEXT: %35 = arith.cmpi ult, %14, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %36 = arith.select %35, %31, %34 : i256 loc(#loc3) -// CHECK-NEXT: %37 = arith.addi %21, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %39 = arith.addi %31, %38 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%36 : i256) loc(#loc3) -// CHECK-NEXT: ^bb6(%40: i256 loc({{.*}}:6:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %41 = arith.cmpi ult, %40, %39 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %41, ^bb7(%40 : i256), ^bb8 loc(#loc3) -// CHECK-NEXT: ^bb7(%42: i256 loc({{.*}}:6:4)): // pred: ^bb6 -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %43 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %44 = arith.addi %42, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc3) -// CHECK-NEXT: ^bb8: // 2 preds: ^bb4, ^bb6 -// CHECK-NEXT: %45 = arith.cmpi ugt, %14, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %45, ^bb12, ^bb9 loc(#loc3) -// CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %46 = arith.cmpi ne, %14, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %46, ^bb11, ^bb10 loc(#loc3) -// CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %47 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %c0_i256, %47 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb18 loc(#loc3) -// CHECK-NEXT: ^bb11: // pred: ^bb9 -// CHECK-NEXT: %48 = arith.addi %1, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %49 = llvm.inttoptr %48 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %50 = llvm.load %49 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %51 = arith.muli %14, %c8_i256 : i256 loc(#loc3) -// CHECK-NEXT: %52 = arith.subi %c256_i256, %51 : i256 loc(#loc3) -// CHECK-NEXT: %53 = arith.shli %c-1_i256, %52 : i256 loc(#loc3) -// CHECK-NEXT: %54 = arith.andi %50, %53 : i256 loc(#loc3) -// CHECK-NEXT: %55 = arith.muli %14, %c2_i256 : i256 loc(#loc3) -// CHECK-NEXT: %56 = arith.ori %54, %55 : i256 loc(#loc3) -// CHECK-NEXT: %57 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb18 loc(#loc3) -// CHECK-NEXT: ^bb12: // pred: ^bb8 -// CHECK-NEXT: %58 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c3_i256, %58 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %59 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %60 = "llvm.intrcall"(%59, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: %61 = arith.addi %1, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %62 = arith.andi %14, %c-32_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb13(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb13(%63: i256 loc({{.*}}:6:4)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %64 = arith.cmpi ult, %63, %62 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %64, ^bb14(%63 : i256), ^bb15 loc(#loc3) -// CHECK-NEXT: ^bb14(%65: i256 loc({{.*}}:6:4)): // pred: ^bb13 -// CHECK-NEXT: %66 = arith.divui %65, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %67 = arith.addi %61, %65 : i256 loc(#loc3) -// CHECK-NEXT: %68 = llvm.inttoptr %67 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %69 = llvm.load %68 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %70 = arith.addi %60, %66 : i256 loc(#loc3) -// CHECK-NEXT: %71 = llvm.inttoptr %70 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %69, %71 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %72 = arith.addi %65, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb13(%72 : i256) loc(#loc3) -// CHECK-NEXT: ^bb15: // pred: ^bb13 -// CHECK-NEXT: %73 = arith.cmpi ult, %62, %14 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %73, ^bb16, ^bb17 loc(#loc3) -// CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %74 = arith.andi %14, %c31_i256 : i256 loc(#loc3) -// CHECK-NEXT: %75 = arith.divui %62, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %76 = arith.addi %61, %62 : i256 loc(#loc3) -// CHECK-NEXT: %77 = llvm.inttoptr %76 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %78 = llvm.load %77 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) -// CHECK-NEXT: %79 = arith.muli %74, %c8_i256 : i256 loc(#loc3) -// CHECK-NEXT: %80 = arith.subi %c256_i256, %79 : i256 loc(#loc3) -// CHECK-NEXT: %81 = arith.shli %c-1_i256, %80 : i256 loc(#loc3) -// CHECK-NEXT: %82 = arith.andi %78, %81 : i256 loc(#loc3) -// CHECK-NEXT: %83 = arith.addi %60, %75 : i256 loc(#loc3) -// CHECK-NEXT: %84 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %82, %84 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb17 loc(#loc3) -// CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %85 = arith.muli %14, %c2_i256 : i256 loc(#loc3) -// CHECK-NEXT: %86 = arith.ori %85, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %87 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: llvm.store %86, %87 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: cf.br ^bb18 loc(#loc3) -// CHECK-NEXT: ^bb18: // 3 preds: ^bb10, ^bb11, ^bb17 -// CHECK-NEXT: %88 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %89 = llvm.load %88 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc5) -// CHECK-NEXT: %90 = arith.addi %89, %c64_i256 : i256 loc(#loc5) -// CHECK-NEXT: %91 = arith.cmpi ugt, %90, %c18446744073709551615_i256 : i256 loc(#loc5) -// CHECK-NEXT: %92 = arith.cmpi ult, %90, %89 : i256 loc(#loc5) -// CHECK-NEXT: %93 = arith.ori %91, %92 : i1 loc(#loc5) -// CHECK-NEXT: cf.cond_br %93, ^bb19, ^bb20 loc(#loc5) -// CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %94 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %94 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %95 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c65_i256, %95 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %96 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: "llvm.intrcall"(%96, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) -// CHECK-NEXT: cf.br ^bb20 loc(#loc5) -// CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// CHECK-NEXT: %97 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %90, %97 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %98 = llvm.inttoptr %89 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c11_i256, %98 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %99 = arith.addi %89, %c32_i256 : i256 loc(#loc5) -// CHECK-NEXT: %100 = llvm.inttoptr %99 : i256 to !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: llvm.store %c47219736118185034978131396930477889456522225816706544572588755557152609796096_i256, %100 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) -// CHECK-NEXT: %101 = llvm.inttoptr %89 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %102 = llvm.load %101 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %103 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %104 = llvm.load %103 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc6) -// CHECK-NEXT: %105 = arith.shrui %104, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %106 = arith.andi %104, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %107 = arith.cmpi eq, %106, %c0_i256 : i256 loc(#loc6) -// CHECK-NEXT: %108 = arith.andi %105, %c127_i256 : i256 loc(#loc6) -// CHECK-NEXT: %109 = arith.select %107, %108, %105 : i256 loc(#loc6) -// CHECK-NEXT: %110 = arith.cmpi ult, %109, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %111 = arith.extui %110 : i1 to i256 loc(#loc6) -// CHECK-NEXT: %112 = arith.cmpi eq, %106, %111 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %112, ^bb21, ^bb22 loc(#loc6) -// CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %113 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %113 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %114 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c34_i256, %114 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %115 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: "llvm.intrcall"(%115, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc6) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc6) -// CHECK-NEXT: cf.br ^bb22 loc(#loc6) -// CHECK-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// CHECK-NEXT: %116 = arith.cmpi ugt, %109, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %116, ^bb23, ^bb26 loc(#loc6) -// CHECK-NEXT: ^bb23: // pred: ^bb22 -// CHECK-NEXT: %117 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %117 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %118 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %119 = "llvm.intrcall"(%118, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %120 = arith.addi %102, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: %121 = arith.divui %120, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %122 = arith.addi %119, %121 : i256 loc(#loc6) -// CHECK-NEXT: %123 = arith.cmpi ult, %102, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %124 = arith.select %123, %119, %122 : i256 loc(#loc6) -// CHECK-NEXT: %125 = arith.addi %109, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: %126 = arith.divui %125, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %127 = arith.addi %119, %126 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb24(%124 : i256) loc(#loc6) -// CHECK-NEXT: ^bb24(%128: i256 loc({{.*}}:8:8)): // 2 preds: ^bb23, ^bb25 -// CHECK-NEXT: %129 = arith.cmpi ult, %128, %127 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %129, ^bb25(%128 : i256), ^bb26 loc(#loc6) -// CHECK-NEXT: ^bb25(%130: i256 loc({{.*}}:8:8)): // pred: ^bb24 -// CHECK-NEXT: %131 = llvm.inttoptr %130 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %131 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %132 = arith.addi %130, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb24(%132 : i256) loc(#loc6) -// CHECK-NEXT: ^bb26: // 2 preds: ^bb22, ^bb24 -// CHECK-NEXT: %133 = arith.cmpi ugt, %102, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %133, ^bb30, ^bb27 loc(#loc6) -// CHECK-NEXT: ^bb27: // pred: ^bb26 -// CHECK-NEXT: %134 = arith.cmpi ne, %102, %c0_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %134, ^bb29, ^bb28 loc(#loc6) -// CHECK-NEXT: ^bb28: // pred: ^bb27 -// CHECK-NEXT: %135 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %135 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb36 loc(#loc6) -// CHECK-NEXT: ^bb29: // pred: ^bb27 -// CHECK-NEXT: %136 = arith.addi %89, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %137 = llvm.inttoptr %136 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %138 = llvm.load %137 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %139 = arith.muli %102, %c8_i256 : i256 loc(#loc6) -// CHECK-NEXT: %140 = arith.subi %c256_i256, %139 : i256 loc(#loc6) -// CHECK-NEXT: %141 = arith.shli %c-1_i256, %140 : i256 loc(#loc6) -// CHECK-NEXT: %142 = arith.andi %138, %141 : i256 loc(#loc6) -// CHECK-NEXT: %143 = arith.muli %102, %c2_i256 : i256 loc(#loc6) -// CHECK-NEXT: %144 = arith.ori %142, %143 : i256 loc(#loc6) -// CHECK-NEXT: %145 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %144, %145 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb36 loc(#loc6) -// CHECK-NEXT: ^bb30: // pred: ^bb26 -// CHECK-NEXT: %146 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: llvm.store %c0_i256, %146 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %147 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %148 = "llvm.intrcall"(%147, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc6) -// CHECK-NEXT: %149 = arith.addi %89, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %150 = arith.andi %102, %c-32_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb31(%c0_i256 : i256) loc(#loc6) -// CHECK-NEXT: ^bb31(%151: i256 loc({{.*}}:8:8)): // 2 preds: ^bb30, ^bb32 -// CHECK-NEXT: %152 = arith.cmpi ult, %151, %150 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %152, ^bb32(%151 : i256), ^bb33 loc(#loc6) -// CHECK-NEXT: ^bb32(%153: i256 loc({{.*}}:8:8)): // pred: ^bb31 -// CHECK-NEXT: %154 = arith.divui %153, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %155 = arith.addi %149, %153 : i256 loc(#loc6) -// CHECK-NEXT: %156 = llvm.inttoptr %155 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %157 = llvm.load %156 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %158 = arith.addi %148, %154 : i256 loc(#loc6) -// CHECK-NEXT: %159 = llvm.inttoptr %158 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %157, %159 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: %160 = arith.addi %153, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: cf.br ^bb31(%160 : i256) loc(#loc6) -// CHECK-NEXT: ^bb33: // pred: ^bb31 -// CHECK-NEXT: %161 = arith.cmpi ult, %150, %102 : i256 loc(#loc6) -// CHECK-NEXT: cf.cond_br %161, ^bb34, ^bb35 loc(#loc6) -// CHECK-NEXT: ^bb34: // pred: ^bb33 -// CHECK-NEXT: %162 = arith.andi %102, %c31_i256 : i256 loc(#loc6) -// CHECK-NEXT: %163 = arith.divui %150, %c32_i256 : i256 loc(#loc6) -// CHECK-NEXT: %164 = arith.addi %149, %150 : i256 loc(#loc6) -// CHECK-NEXT: %165 = llvm.inttoptr %164 : i256 to !llvm.ptr<1> loc(#loc6) -// CHECK-NEXT: %166 = llvm.load %165 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc6) -// CHECK-NEXT: %167 = arith.muli %162, %c8_i256 : i256 loc(#loc6) -// CHECK-NEXT: %168 = arith.subi %c256_i256, %167 : i256 loc(#loc6) -// CHECK-NEXT: %169 = arith.shli %c-1_i256, %168 : i256 loc(#loc6) -// CHECK-NEXT: %170 = arith.andi %166, %169 : i256 loc(#loc6) -// CHECK-NEXT: %171 = arith.addi %148, %163 : i256 loc(#loc6) -// CHECK-NEXT: %172 = llvm.inttoptr %171 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %170, %172 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb35 loc(#loc6) -// CHECK-NEXT: ^bb35: // 2 preds: ^bb33, ^bb34 -// CHECK-NEXT: %173 = arith.muli %102, %c2_i256 : i256 loc(#loc6) -// CHECK-NEXT: %174 = arith.ori %173, %c1_i256 : i256 loc(#loc6) -// CHECK-NEXT: %175 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: llvm.store %174, %175 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc6) -// CHECK-NEXT: cf.br ^bb36 loc(#loc6) -// CHECK-NEXT: ^bb36: // 3 preds: ^bb28, ^bb29, ^bb35 -// CHECK-NEXT: %176 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %177 = llvm.load %176 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %178 = arith.addi %177, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %179 = arith.cmpi ugt, %178, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %180 = arith.cmpi ult, %178, %177 : i256 loc(#loc7) -// CHECK-NEXT: %181 = arith.ori %179, %180 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %181, ^bb37, ^bb38 loc(#loc7) -// CHECK-NEXT: ^bb37: // pred: ^bb36 -// CHECK-NEXT: %182 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %182 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %183 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %183 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %184 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%184, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) +// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %33 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c65_i256, %33 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: "llvm.intrcall"(%34, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb38 loc(#loc7) -// CHECK-NEXT: ^bb38: // 2 preds: ^bb36, ^bb37 -// CHECK-NEXT: %185 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %178, %185 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %186 = llvm.inttoptr %177 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c4_i256, %186 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %187 = arith.addi %177, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %188 = llvm.inttoptr %187 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c29517411314469296944035832213410995203454146012831046463037677802962997477376_i256, %188 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %189 = llvm.inttoptr %177 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %190 = llvm.load %189 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %191 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %192 = llvm.load %191 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc8) -// CHECK-NEXT: %193 = arith.shrui %192, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %194 = arith.andi %192, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %195 = arith.cmpi eq, %194, %c0_i256 : i256 loc(#loc8) -// CHECK-NEXT: %196 = arith.andi %193, %c127_i256 : i256 loc(#loc8) -// CHECK-NEXT: %197 = arith.select %195, %196, %193 : i256 loc(#loc8) -// CHECK-NEXT: %198 = arith.cmpi ult, %197, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %199 = arith.extui %198 : i1 to i256 loc(#loc8) -// CHECK-NEXT: %200 = arith.cmpi eq, %194, %199 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %200, ^bb39, ^bb40 loc(#loc8) -// CHECK-NEXT: ^bb39: // pred: ^bb38 -// CHECK-NEXT: %201 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %201 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %202 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c34_i256, %202 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %203 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: "llvm.intrcall"(%203, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) -// CHECK-NEXT: cf.br ^bb40 loc(#loc8) -// CHECK-NEXT: ^bb40: // 2 preds: ^bb38, ^bb39 -// CHECK-NEXT: %204 = arith.cmpi ugt, %197, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %204, ^bb41, ^bb44 loc(#loc8) -// CHECK-NEXT: ^bb41: // pred: ^bb40 -// CHECK-NEXT: %205 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c1_i256, %205 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %206 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %207 = "llvm.intrcall"(%206, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) -// CHECK-NEXT: %208 = arith.addi %190, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %209 = arith.divui %208, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %210 = arith.addi %207, %209 : i256 loc(#loc8) -// CHECK-NEXT: %211 = arith.cmpi ult, %190, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %212 = arith.select %211, %207, %210 : i256 loc(#loc8) -// CHECK-NEXT: %213 = arith.addi %197, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %214 = arith.divui %213, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %215 = arith.addi %207, %214 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb42(%212 : i256) loc(#loc8) -// CHECK-NEXT: ^bb42(%216: i256 loc({{.*}}:9:8)): // 2 preds: ^bb41, ^bb43 -// CHECK-NEXT: %217 = arith.cmpi ult, %216, %215 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %217, ^bb43(%216 : i256), ^bb44 loc(#loc8) -// CHECK-NEXT: ^bb43(%218: i256 loc({{.*}}:9:8)): // pred: ^bb42 -// CHECK-NEXT: %219 = llvm.inttoptr %218 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %c0_i256, %219 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %220 = arith.addi %218, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb42(%220 : i256) loc(#loc8) -// CHECK-NEXT: ^bb44: // 2 preds: ^bb40, ^bb42 -// CHECK-NEXT: %221 = arith.cmpi ugt, %190, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %221, ^bb48, ^bb45 loc(#loc8) -// CHECK-NEXT: ^bb45: // pred: ^bb44 -// CHECK-NEXT: %222 = arith.cmpi ne, %190, %c0_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %222, ^bb47, ^bb46 loc(#loc8) -// CHECK-NEXT: ^bb46: // pred: ^bb45 -// CHECK-NEXT: %223 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %c0_i256, %223 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb54 loc(#loc8) -// CHECK-NEXT: ^bb47: // pred: ^bb45 -// CHECK-NEXT: %224 = arith.addi %177, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %225 = llvm.inttoptr %224 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %226 = llvm.load %225 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %227 = arith.muli %190, %c8_i256 : i256 loc(#loc8) -// CHECK-NEXT: %228 = arith.subi %c256_i256, %227 : i256 loc(#loc8) -// CHECK-NEXT: %229 = arith.shli %c-1_i256, %228 : i256 loc(#loc8) -// CHECK-NEXT: %230 = arith.andi %226, %229 : i256 loc(#loc8) -// CHECK-NEXT: %231 = arith.muli %190, %c2_i256 : i256 loc(#loc8) -// CHECK-NEXT: %232 = arith.ori %230, %231 : i256 loc(#loc8) -// CHECK-NEXT: %233 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %232, %233 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb54 loc(#loc8) -// CHECK-NEXT: ^bb48: // pred: ^bb44 -// CHECK-NEXT: %234 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: llvm.store %c1_i256, %234 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %235 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %236 = "llvm.intrcall"(%235, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc8) -// CHECK-NEXT: %237 = arith.addi %177, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %238 = arith.andi %190, %c-32_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb49(%c0_i256 : i256) loc(#loc8) -// CHECK-NEXT: ^bb49(%239: i256 loc({{.*}}:9:8)): // 2 preds: ^bb48, ^bb50 -// CHECK-NEXT: %240 = arith.cmpi ult, %239, %238 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %240, ^bb50(%239 : i256), ^bb51 loc(#loc8) -// CHECK-NEXT: ^bb50(%241: i256 loc({{.*}}:9:8)): // pred: ^bb49 -// CHECK-NEXT: %242 = arith.divui %241, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %243 = arith.addi %237, %241 : i256 loc(#loc8) -// CHECK-NEXT: %244 = llvm.inttoptr %243 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %245 = llvm.load %244 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %246 = arith.addi %236, %242 : i256 loc(#loc8) -// CHECK-NEXT: %247 = llvm.inttoptr %246 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %245, %247 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: %248 = arith.addi %241, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: cf.br ^bb49(%248 : i256) loc(#loc8) -// CHECK-NEXT: ^bb51: // pred: ^bb49 -// CHECK-NEXT: %249 = arith.cmpi ult, %238, %190 : i256 loc(#loc8) -// CHECK-NEXT: cf.cond_br %249, ^bb52, ^bb53 loc(#loc8) -// CHECK-NEXT: ^bb52: // pred: ^bb51 -// CHECK-NEXT: %250 = arith.andi %190, %c31_i256 : i256 loc(#loc8) -// CHECK-NEXT: %251 = arith.divui %238, %c32_i256 : i256 loc(#loc8) -// CHECK-NEXT: %252 = arith.addi %237, %238 : i256 loc(#loc8) -// CHECK-NEXT: %253 = llvm.inttoptr %252 : i256 to !llvm.ptr<1> loc(#loc8) -// CHECK-NEXT: %254 = llvm.load %253 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) -// CHECK-NEXT: %255 = arith.muli %250, %c8_i256 : i256 loc(#loc8) -// CHECK-NEXT: %256 = arith.subi %c256_i256, %255 : i256 loc(#loc8) -// CHECK-NEXT: %257 = arith.shli %c-1_i256, %256 : i256 loc(#loc8) -// CHECK-NEXT: %258 = arith.andi %254, %257 : i256 loc(#loc8) -// CHECK-NEXT: %259 = arith.addi %236, %251 : i256 loc(#loc8) -// CHECK-NEXT: %260 = llvm.inttoptr %259 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %258, %260 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb53 loc(#loc8) -// CHECK-NEXT: ^bb53: // 2 preds: ^bb51, ^bb52 -// CHECK-NEXT: %261 = arith.muli %190, %c2_i256 : i256 loc(#loc8) -// CHECK-NEXT: %262 = arith.ori %261, %c1_i256 : i256 loc(#loc8) -// CHECK-NEXT: %263 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: llvm.store %262, %263 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc8) -// CHECK-NEXT: cf.br ^bb54 loc(#loc8) -// CHECK-NEXT: ^bb54: // 3 preds: ^bb46, ^bb47, ^bb53 -// CHECK-NEXT: %264 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %265 = llvm.load %264 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc9) -// CHECK-NEXT: %266 = arith.addi %265, %c64_i256 : i256 loc(#loc9) -// CHECK-NEXT: %267 = arith.cmpi ugt, %266, %c18446744073709551615_i256 : i256 loc(#loc9) -// CHECK-NEXT: %268 = arith.cmpi ult, %266, %265 : i256 loc(#loc9) -// CHECK-NEXT: %269 = arith.ori %267, %268 : i1 loc(#loc9) -// CHECK-NEXT: cf.cond_br %269, ^bb55, ^bb56 loc(#loc9) -// CHECK-NEXT: ^bb55: // pred: ^bb54 -// CHECK-NEXT: %270 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %270 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %271 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c65_i256, %271 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %272 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: "llvm.intrcall"(%272, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) +// CHECK-NEXT: cf.br ^bb6 loc(#loc7) +// CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 +// CHECK-NEXT: %35 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %28, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %36 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c4_i256, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: %37 = arith.addi %27, %c32_i256 : i256 loc(#loc7) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: llvm.store %c29517411314469296944035832213410995203454146012831046463037677802962997477376_i256, %38 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%27, %c1_i256) : (i256, i256) -> () loc(#loc8) +// CHECK-NEXT: %39 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %40 = llvm.load %39 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc9) +// CHECK-NEXT: %41 = arith.addi %40, %c64_i256 : i256 loc(#loc9) +// CHECK-NEXT: %42 = arith.cmpi ugt, %41, %c18446744073709551615_i256 : i256 loc(#loc9) +// CHECK-NEXT: %43 = arith.cmpi ult, %41, %40 : i256 loc(#loc9) +// CHECK-NEXT: %44 = arith.ori %42, %43 : i1 loc(#loc9) +// CHECK-NEXT: cf.cond_br %44, ^bb7, ^bb8 loc(#loc9) +// CHECK-NEXT: ^bb7: // pred: ^bb6 +// CHECK-NEXT: %45 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %45 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %46 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c65_i256, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %47 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: "llvm.intrcall"(%47, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc9) // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc9) -// CHECK-NEXT: cf.br ^bb56 loc(#loc9) -// CHECK-NEXT: ^bb56: // 2 preds: ^bb54, ^bb55 -// CHECK-NEXT: %273 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %266, %273 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %274 = llvm.inttoptr %265 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c4_i256, %274 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %275 = arith.addi %265, %c32_i256 : i256 loc(#loc9) -// CHECK-NEXT: %276 = llvm.inttoptr %275 : i256 to !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: llvm.store %c-439061522557375173052089223601630338202760422010735733633791622124826263552_i256, %276 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) -// CHECK-NEXT: %277 = llvm.inttoptr %265 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %278 = llvm.load %277 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc10) -// CHECK-NEXT: %279 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: %280 = llvm.load %279 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc10) -// CHECK-NEXT: %281 = arith.shrui %280, %c1_i256 : i256 loc(#loc10) -// CHECK-NEXT: %282 = arith.andi %280, %c1_i256 : i256 loc(#loc10) -// CHECK-NEXT: %283 = arith.cmpi eq, %282, %c0_i256 : i256 loc(#loc10) -// CHECK-NEXT: %284 = arith.andi %281, %c127_i256 : i256 loc(#loc10) -// CHECK-NEXT: %285 = arith.select %283, %284, %281 : i256 loc(#loc10) -// CHECK-NEXT: %286 = arith.cmpi ult, %285, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %287 = arith.extui %286 : i1 to i256 loc(#loc10) -// CHECK-NEXT: %288 = arith.cmpi eq, %282, %287 : i256 loc(#loc10) -// CHECK-NEXT: cf.cond_br %288, ^bb57, ^bb58 loc(#loc10) -// CHECK-NEXT: ^bb57: // pred: ^bb56 -// CHECK-NEXT: %289 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %289 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %290 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %c34_i256, %290 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %291 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: "llvm.intrcall"(%291, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc10) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc10) -// CHECK-NEXT: cf.br ^bb58 loc(#loc10) -// CHECK-NEXT: ^bb58: // 2 preds: ^bb56, ^bb57 -// CHECK-NEXT: %292 = arith.cmpi ugt, %285, %c31_i256 : i256 loc(#loc10) -// CHECK-NEXT: cf.cond_br %292, ^bb59, ^bb62 loc(#loc10) -// CHECK-NEXT: ^bb59: // pred: ^bb58 -// CHECK-NEXT: %293 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %c2_i256, %293 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %294 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %295 = "llvm.intrcall"(%294, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc10) -// CHECK-NEXT: %296 = arith.addi %278, %c31_i256 : i256 loc(#loc10) -// CHECK-NEXT: %297 = arith.divui %296, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %298 = arith.addi %295, %297 : i256 loc(#loc10) -// CHECK-NEXT: %299 = arith.cmpi ult, %278, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %300 = arith.select %299, %295, %298 : i256 loc(#loc10) -// CHECK-NEXT: %301 = arith.addi %285, %c31_i256 : i256 loc(#loc10) -// CHECK-NEXT: %302 = arith.divui %301, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %303 = arith.addi %295, %302 : i256 loc(#loc10) -// CHECK-NEXT: cf.br ^bb60(%300 : i256) loc(#loc10) -// CHECK-NEXT: ^bb60(%304: i256 loc({{.*}}:10:8)): // 2 preds: ^bb59, ^bb61 -// CHECK-NEXT: %305 = arith.cmpi ult, %304, %303 : i256 loc(#loc10) -// CHECK-NEXT: cf.cond_br %305, ^bb61(%304 : i256), ^bb62 loc(#loc10) -// CHECK-NEXT: ^bb61(%306: i256 loc({{.*}}:10:8)): // pred: ^bb60 -// CHECK-NEXT: %307 = llvm.inttoptr %306 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: llvm.store %c0_i256, %307 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: %308 = arith.addi %306, %c1_i256 : i256 loc(#loc10) -// CHECK-NEXT: cf.br ^bb60(%308 : i256) loc(#loc10) -// CHECK-NEXT: ^bb62: // 2 preds: ^bb58, ^bb60 -// CHECK-NEXT: %309 = arith.cmpi ugt, %278, %c31_i256 : i256 loc(#loc10) -// CHECK-NEXT: cf.cond_br %309, ^bb66, ^bb63 loc(#loc10) -// CHECK-NEXT: ^bb63: // pred: ^bb62 -// CHECK-NEXT: %310 = arith.cmpi ne, %278, %c0_i256 : i256 loc(#loc10) -// CHECK-NEXT: cf.cond_br %310, ^bb65, ^bb64 loc(#loc10) -// CHECK-NEXT: ^bb64: // pred: ^bb63 -// CHECK-NEXT: %311 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: llvm.store %c0_i256, %311 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: cf.br ^bb72 loc(#loc10) -// CHECK-NEXT: ^bb65: // pred: ^bb63 -// CHECK-NEXT: %312 = arith.addi %265, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %313 = llvm.inttoptr %312 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %314 = llvm.load %313 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc10) -// CHECK-NEXT: %315 = arith.muli %278, %c8_i256 : i256 loc(#loc10) -// CHECK-NEXT: %316 = arith.subi %c256_i256, %315 : i256 loc(#loc10) -// CHECK-NEXT: %317 = arith.shli %c-1_i256, %316 : i256 loc(#loc10) -// CHECK-NEXT: %318 = arith.andi %314, %317 : i256 loc(#loc10) -// CHECK-NEXT: %319 = arith.muli %278, %c2_i256 : i256 loc(#loc10) -// CHECK-NEXT: %320 = arith.ori %318, %319 : i256 loc(#loc10) -// CHECK-NEXT: %321 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: llvm.store %320, %321 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: cf.br ^bb72 loc(#loc10) -// CHECK-NEXT: ^bb66: // pred: ^bb62 -// CHECK-NEXT: %322 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: llvm.store %c2_i256, %322 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %323 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %324 = "llvm.intrcall"(%323, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc10) -// CHECK-NEXT: %325 = arith.addi %265, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %326 = arith.andi %278, %c-32_i256 : i256 loc(#loc10) -// CHECK-NEXT: cf.br ^bb67(%c0_i256 : i256) loc(#loc10) -// CHECK-NEXT: ^bb67(%327: i256 loc({{.*}}:10:8)): // 2 preds: ^bb66, ^bb68 -// CHECK-NEXT: %328 = arith.cmpi ult, %327, %326 : i256 loc(#loc10) -// CHECK-NEXT: cf.cond_br %328, ^bb68(%327 : i256), ^bb69 loc(#loc10) -// CHECK-NEXT: ^bb68(%329: i256 loc({{.*}}:10:8)): // pred: ^bb67 -// CHECK-NEXT: %330 = arith.divui %329, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %331 = arith.addi %325, %329 : i256 loc(#loc10) -// CHECK-NEXT: %332 = llvm.inttoptr %331 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %333 = llvm.load %332 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc10) -// CHECK-NEXT: %334 = arith.addi %324, %330 : i256 loc(#loc10) -// CHECK-NEXT: %335 = llvm.inttoptr %334 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: llvm.store %333, %335 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: %336 = arith.addi %329, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: cf.br ^bb67(%336 : i256) loc(#loc10) -// CHECK-NEXT: ^bb69: // pred: ^bb67 -// CHECK-NEXT: %337 = arith.cmpi ult, %326, %278 : i256 loc(#loc10) -// CHECK-NEXT: cf.cond_br %337, ^bb70, ^bb71 loc(#loc10) -// CHECK-NEXT: ^bb70: // pred: ^bb69 -// CHECK-NEXT: %338 = arith.andi %278, %c31_i256 : i256 loc(#loc10) -// CHECK-NEXT: %339 = arith.divui %326, %c32_i256 : i256 loc(#loc10) -// CHECK-NEXT: %340 = arith.addi %325, %326 : i256 loc(#loc10) -// CHECK-NEXT: %341 = llvm.inttoptr %340 : i256 to !llvm.ptr<1> loc(#loc10) -// CHECK-NEXT: %342 = llvm.load %341 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc10) -// CHECK-NEXT: %343 = arith.muli %338, %c8_i256 : i256 loc(#loc10) -// CHECK-NEXT: %344 = arith.subi %c256_i256, %343 : i256 loc(#loc10) -// CHECK-NEXT: %345 = arith.shli %c-1_i256, %344 : i256 loc(#loc10) -// CHECK-NEXT: %346 = arith.andi %342, %345 : i256 loc(#loc10) -// CHECK-NEXT: %347 = arith.addi %324, %339 : i256 loc(#loc10) -// CHECK-NEXT: %348 = llvm.inttoptr %347 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: llvm.store %346, %348 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: cf.br ^bb71 loc(#loc10) -// CHECK-NEXT: ^bb71: // 2 preds: ^bb69, ^bb70 -// CHECK-NEXT: %349 = arith.muli %278, %c2_i256 : i256 loc(#loc10) -// CHECK-NEXT: %350 = arith.ori %349, %c1_i256 : i256 loc(#loc10) -// CHECK-NEXT: %351 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: llvm.store %350, %351 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc10) -// CHECK-NEXT: cf.br ^bb72 loc(#loc10) -// CHECK-NEXT: ^bb72: // 3 preds: ^bb64, ^bb65, ^bb71 +// CHECK-NEXT: cf.br ^bb8 loc(#loc9) +// CHECK-NEXT: ^bb8: // 2 preds: ^bb6, ^bb7 +// CHECK-NEXT: %48 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %41, %48 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %49 = llvm.inttoptr %40 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c4_i256, %49 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: %50 = arith.addi %40, %c32_i256 : i256 loc(#loc9) +// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: llvm.store %c-439061522557375173052089223601630338202760422010735733633791622124826263552_i256, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc9) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%40, %c2_i256) : (i256, i256) -> () loc(#loc10) // CHECK-NEXT: return loc(#loc2) // CHECK-NEXT: } loc(#loc2) // CHECK-NEXT: module @C_26_deployed attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { @@ -848,9 +380,43 @@ contract C { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:3:4), %arg1: i256 loc({{.*}}:3:4), %arg2: i256 loc({{.*}}:3:4), %arg3: i256 loc({{.*}}:3:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc11) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc11) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc11) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc11) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc11) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc11) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:3:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc11) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc11) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:3:4)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc11) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc11) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc11) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc11) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc11) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc11) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: cf.br ^bb5 loc(#loc11) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc11) +// CHECK-NEXT: } loc(#loc11) // CHECK-NEXT: func.func @get_d_9() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -914,135 +480,11 @@ contract C { // CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc3) // CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc3) // CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc3) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc3) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %c3_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc3) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:6:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc3) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc3) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:6:4)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc3) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc3) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc3) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc3) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc3) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc3) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) -// CHECK-NEXT: cf.br ^bb9 loc(#loc3) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c3_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc3) // CHECK-NEXT: return %16 : i256 loc(#loc3) // CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: func.func @get_c_6() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) -// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) -// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) -// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) -// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) -// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) -// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) -// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc11) -// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) -// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc11) -// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc11) -// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc11) -// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc11) -// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc11) -// CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// CHECK-NEXT: cf.br ^bb2 loc(#loc11) -// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc11) -// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) -// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc11) -// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc11) -// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc11) -// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc11) -// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc11) -// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc11) -// CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) -// CHECK-NEXT: cf.br ^bb4 loc(#loc11) -// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc11) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc11) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %c2_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc11) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc11) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:5:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc11) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc11) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:5:4)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc11) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc11) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc11) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc11) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc11) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc11) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) -// CHECK-NEXT: cf.br ^bb9 loc(#loc11) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: return %16 : i256 loc(#loc11) -// CHECK-NEXT: } loc(#loc11) -// CHECK-NEXT: func.func @get_b_4() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { -// CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -1056,7 +498,8 @@ contract C { // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc12) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc12) +// CHECK-NEXT: %0 = llvm.inttoptr %c2_i256 : i256 to !llvm.ptr<5> loc(#loc12) // CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) // CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc12) // CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc12) @@ -1105,39 +548,11 @@ contract C { // CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc12) // CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc12) // CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc12) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c1_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:4:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc12) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:4:4)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc12) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc12) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc12) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc12) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: cf.br ^bb9 loc(#loc12) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c2_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc12) // CHECK-NEXT: return %16 : i256 loc(#loc12) // CHECK-NEXT: } loc(#loc12) -// CHECK-NEXT: func.func @get_a_2() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: func.func @get_b_4() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) // CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) @@ -1149,9 +564,9 @@ contract C { // CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) // CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) -// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc13) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c1_i256 : i256 to !llvm.ptr<5> loc(#loc13) // CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) // CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc13) // CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc13) @@ -1200,43 +615,368 @@ contract C { // CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc13) // CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc13) // CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %30 = arith.andi %1, %c1_i256 : i256 loc(#loc13) -// CHECK-NEXT: %31 = arith.cmpi eq, %30, %c0_i256 : i256 loc(#loc13) -// CHECK-NEXT: cf.cond_br %31, ^bb8, ^bb5 loc(#loc13) -// CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %32 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %c0_i256, %32 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %33 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %34 = "llvm.intrcall"(%33, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc13) -// CHECK-NEXT: cf.br ^bb6(%c0_i256 : i256) loc(#loc13) -// CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:3:4)): // 2 preds: ^bb5, ^bb7 -// CHECK-NEXT: %36 = arith.cmpi ult, %35, %6 : i256 loc(#loc13) -// CHECK-NEXT: cf.cond_br %36, ^bb7(%35 : i256), ^bb9 loc(#loc13) -// CHECK-NEXT: ^bb7(%37: i256 loc({{.*}}:3:4)): // pred: ^bb6 -// CHECK-NEXT: %38 = arith.divui %37, %c32_i256 : i256 loc(#loc13) -// CHECK-NEXT: %39 = arith.addi %34, %38 : i256 loc(#loc13) -// CHECK-NEXT: %40 = llvm.inttoptr %39 : i256 to !llvm.ptr<5> loc(#loc13) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc13) -// CHECK-NEXT: %42 = arith.addi %28, %37 : i256 loc(#loc13) -// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %41, %43 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: %44 = arith.addi %37, %c32_i256 : i256 loc(#loc13) -// CHECK-NEXT: cf.br ^bb6(%44 : i256) loc(#loc13) -// CHECK-NEXT: ^bb8: // pred: ^bb4 -// CHECK-NEXT: %45 = arith.andi %1, %c-256_i256 : i256 loc(#loc13) -// CHECK-NEXT: %46 = llvm.inttoptr %28 : i256 to !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: llvm.store %45, %46 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc13) -// CHECK-NEXT: cf.br ^bb9 loc(#loc13) -// CHECK-NEXT: ^bb9: // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c1_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc13) // CHECK-NEXT: return %16 : i256 loc(#loc13) // CHECK-NEXT: } loc(#loc13) +// CHECK-NEXT: func.func @get_a_2() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c63_i256 = arith.constant 63 : i256 loc(#loc) +// CHECK-NEXT: %c65_i256 = arith.constant 65 : i256 loc(#loc) +// CHECK-NEXT: %c18446744073709551615_i256 = arith.constant 18446744073709551615 : i256 loc(#loc) +// CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc11) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc11) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc11) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc11) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc11) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc11) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc11) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc11) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc11) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc11) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) +// CHECK-NEXT: cf.br ^bb2 loc(#loc11) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %13 = arith.addi %6, %c31_i256 : i256 loc(#loc11) +// CHECK-NEXT: %14 = arith.andi %13, %c-32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %15 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %16 = llvm.load %15 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc11) +// CHECK-NEXT: %17 = arith.addi %14, %c63_i256 : i256 loc(#loc11) +// CHECK-NEXT: %18 = arith.andi %17, %c-32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %19 = arith.addi %16, %18 : i256 loc(#loc11) +// CHECK-NEXT: %20 = arith.cmpi ugt, %19, %c18446744073709551615_i256 : i256 loc(#loc11) +// CHECK-NEXT: %21 = arith.cmpi ult, %19, %16 : i256 loc(#loc11) +// CHECK-NEXT: %22 = arith.ori %20, %21 : i1 loc(#loc11) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc11) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %c65_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc11) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc11) +// CHECK-NEXT: cf.br ^bb4 loc(#loc11) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: %26 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %19, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %27 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %6, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: %28 = arith.addi %16, %c32_i256 : i256 loc(#loc11) +// CHECK-NEXT: %29 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: llvm.store %6, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc11) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c0_i256, %1, %6, %28) : (i256, i256, i256, i256) -> () loc(#loc11) +// CHECK-NEXT: return %16 : i256 loc(#loc11) +// CHECK-NEXT: } loc(#loc11) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:6:4), %arg1: i256 loc({{.*}}:6:4), %arg2: i256 loc({{.*}}:6:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:6:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:6:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:6:4), %arg1: i256 loc({{.*}}:6:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc3) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc3) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:6:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:6:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc3) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc3) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc3) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc3) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc3) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc3) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:6:4), %arg1: i256 loc({{.*}}:6:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc3) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc3) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:6:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:6:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc3) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc3) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc3) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc3) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc3) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc3) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:6:4), %arg1: i256 loc({{.*}}:6:4), %arg2: i256 loc({{.*}}:6:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc3) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:6:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:6:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc3) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) // CHECK-NEXT: #loc1 = loc({{.*}}:2:0) // CHECK-NEXT: #loc2 = loc({{.*}}:7:4) // CHECK-NEXT: #loc4 = loc({{.*}}:6:22) // CHECK-NEXT: #loc5 = loc({{.*}}:8:12) +// CHECK-NEXT: #loc6 = loc({{.*}}:8:8) // CHECK-NEXT: #loc7 = loc({{.*}}:9:12) +// CHECK-NEXT: #loc8 = loc({{.*}}:9:8) // CHECK-NEXT: #loc9 = loc({{.*}}:10:12) +// CHECK-NEXT: #loc10 = loc({{.*}}:10:8) +// CHECK-NEXT: #loc12 = loc({{.*}}:5:4) +// CHECK-NEXT: #loc13 = loc({{.*}}:4:4) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/EVM/struct-copy.sol b/test/lit/mlirCodegen/EVM/struct-copy.sol index b99c78353..ce835dd67 100644 --- a/test/lit/mlirCodegen/EVM/struct-copy.sol +++ b/test/lit/mlirCodegen/EVM/struct-copy.sol @@ -72,14 +72,14 @@ contract Test { // CHECK: #Default = #sol // CHECK-NEXT: #Osaka = #sol // CHECK-NEXT: #loc1 = loc({{.*}}:46:0) -// CHECK-NEXT: #loc3 = loc({{.*}}:66:14) -// CHECK-NEXT: #loc4 = loc({{.*}}:67:11) -// CHECK-NEXT: #loc7 = loc({{.*}}:47:2) -// CHECK-NEXT: #loc10 = loc({{.*}}:58:14) -// CHECK-NEXT: #loc12 = loc({{.*}}:59:4) -// CHECK-NEXT: #loc14 = loc({{.*}}:54:14) -// CHECK-NEXT: #loc16 = loc({{.*}}:55:4) -// CHECK-NEXT: #loc19 = loc({{.*}}:51:4) +// CHECK-NEXT: #loc2 = loc({{.*}}:47:2) +// CHECK-NEXT: #loc3 = loc({{.*}}:59:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:55:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:51:4) +// CHECK-NEXT: #loc7 = loc({{.*}}:66:14) +// CHECK-NEXT: #loc8 = loc({{.*}}:67:11) +// CHECK-NEXT: #loc13 = loc({{.*}}:58:14) +// CHECK-NEXT: #loc16 = loc({{.*}}:54:14) // CHECK-NEXT: #loop_unroll = #llvm.loop_unroll // CHECK-NEXT: #loop_annotation = #llvm.loop_annotation // CHECK-NEXT: module @Test_170 attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { @@ -4485,6 +4485,412 @@ contract Test { // CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc1) // CHECK-NEXT: llvm.unreachable loc(#loc1) // CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: func.func @__sol.copy_string_data.storage.memory(%arg0: i256 loc({{.*}}:47:2), %arg1: i256 loc({{.*}}:47:2), %arg2: i256 loc({{.*}}:47:2), %arg3: i256 loc({{.*}}:47:2)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc2) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.andi %arg1, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1 = arith.cmpi eq, %0, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1, ^bb4, ^bb1 loc(#loc2) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %arg0, %2 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %3 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %4 = "llvm.intrcall"(%3, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb2(%5: i256 loc({{.*}}:47:2)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %6 = arith.cmpi ult, %5, %arg2 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %6, ^bb3(%5 : i256), ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb3(%7: i256 loc({{.*}}:47:2)): // pred: ^bb2 +// CHECK-NEXT: %8 = arith.divui %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %9 = arith.addi %4, %8 : i256 loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %9 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.addi %arg3, %7 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %12 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %11, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %7, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb2(%14 : i256) loc(#loc2) +// CHECK-NEXT: ^bb4: // pred: ^bb0 +// CHECK-NEXT: %15 = arith.andi %arg1, %c-256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = llvm.inttoptr %arg3 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %15, %16 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5 loc(#loc2) +// CHECK-NEXT: ^bb5: // 2 preds: ^bb2, ^bb4 +// CHECK-NEXT: return loc(#loc2) +// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: func.func @__sol.copy.calldata.storage.string(%arg0: i256 loc({{.*}}:59:4), %arg1: i256 loc({{.*}}:59:4), %arg2: i256 loc({{.*}}:59:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc3) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc3) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg2, %6, %arg1) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %13 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %13, ^bb6, ^bb3 loc(#loc3) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %14 = arith.cmpi ne, %arg1, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %14, ^bb5, ^bb4 loc(#loc3) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %15 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %16 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %18 = arith.muli %arg1, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = arith.subi %c256_i256, %18 : i256 loc(#loc3) +// CHECK-NEXT: %20 = arith.shli %c-1_i256, %19 : i256 loc(#loc3) +// CHECK-NEXT: %21 = arith.andi %17, %20 : i256 loc(#loc3) +// CHECK-NEXT: %22 = arith.muli %arg1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %23 = arith.ori %21, %22 : i256 loc(#loc3) +// CHECK-NEXT: %24 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %23, %24 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %arg2, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %27 = "llvm.intrcall"(%26, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %28 = arith.andi %arg1, %c-32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb7(%29: i256 loc({{.*}}:59:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %30 = arith.cmpi ult, %29, %28 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %30, ^bb8(%29 : i256), ^bb9 loc(#loc3) +// CHECK-NEXT: ^bb8(%31: i256 loc({{.*}}:59:4)): // pred: ^bb7 +// CHECK-NEXT: %32 = arith.divui %31, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %33 = arith.addi %arg0, %31 : i256 loc(#loc3) +// CHECK-NEXT: %34 = llvm.inttoptr %33 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %36 = arith.addi %27, %32 : i256 loc(#loc3) +// CHECK-NEXT: %37 = llvm.inttoptr %36 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %35, %37 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %38 = arith.addi %31, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%38 : i256) loc(#loc3) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %39 = arith.cmpi ult, %28, %arg1 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %39, ^bb10, ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %40 = arith.andi %arg1, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %41 = arith.divui %28, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %42 = arith.addi %arg0, %28 : i256 loc(#loc3) +// CHECK-NEXT: %43 = llvm.inttoptr %42 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %44 = llvm.load %43 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %45 = arith.muli %40, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.subi %c256_i256, %45 : i256 loc(#loc3) +// CHECK-NEXT: %47 = arith.shli %c-1_i256, %46 : i256 loc(#loc3) +// CHECK-NEXT: %48 = arith.andi %44, %47 : i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.addi %27, %41 : i256 loc(#loc3) +// CHECK-NEXT: %50 = llvm.inttoptr %49 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %48, %50 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb11 loc(#loc3) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %51 = arith.muli %arg1, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %52 = arith.ori %51, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %53 = llvm.inttoptr %arg2 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %52, %53 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb12 loc(#loc3) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc3) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: func.func @__sol.copy.memory.storage.string(%arg0: i256 loc({{.*}}:55:4), %arg1: i256 loc({{.*}}:55:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %2 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %4 = arith.shrui %3, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %5 = arith.andi %3, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %6 = arith.cmpi eq, %5, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: %7 = arith.andi %4, %c127_i256 : i256 loc(#loc4) +// CHECK-NEXT: %8 = arith.select %6, %7, %4 : i256 loc(#loc4) +// CHECK-NEXT: %9 = arith.cmpi ult, %8, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %10 = arith.extui %9 : i1 to i256 loc(#loc4) +// CHECK-NEXT: %11 = arith.cmpi eq, %5, %10 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %11, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %12 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %13 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c34_i256, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %14 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%14, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %8, %1) : (i256, i256, i256) -> () loc(#loc4) +// CHECK-NEXT: %15 = arith.cmpi ugt, %1, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %15, ^bb6, ^bb3 loc(#loc4) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %16 = arith.cmpi ne, %1, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %16, ^bb5, ^bb4 loc(#loc4) +// CHECK-NEXT: ^bb4: // pred: ^bb3 +// CHECK-NEXT: %17 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %17 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb12 loc(#loc4) +// CHECK-NEXT: ^bb5: // pred: ^bb3 +// CHECK-NEXT: %18 = arith.addi %arg0, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %19 = llvm.inttoptr %18 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %20 = llvm.load %19 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %21 = arith.muli %1, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %22 = arith.subi %c256_i256, %21 : i256 loc(#loc4) +// CHECK-NEXT: %23 = arith.shli %c-1_i256, %22 : i256 loc(#loc4) +// CHECK-NEXT: %24 = arith.andi %20, %23 : i256 loc(#loc4) +// CHECK-NEXT: %25 = arith.muli %1, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: %26 = arith.ori %24, %25 : i256 loc(#loc4) +// CHECK-NEXT: %27 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %26, %27 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb12 loc(#loc4) +// CHECK-NEXT: ^bb6: // pred: ^bb2 +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %arg1, %28 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %29 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %30 = "llvm.intrcall"(%29, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %31 = arith.addi %arg0, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %32 = arith.andi %1, %c-32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb7(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb7(%33: i256 loc({{.*}}:55:4)): // 2 preds: ^bb6, ^bb8 +// CHECK-NEXT: %34 = arith.cmpi ult, %33, %32 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %34, ^bb8(%33 : i256), ^bb9 loc(#loc4) +// CHECK-NEXT: ^bb8(%35: i256 loc({{.*}}:55:4)): // pred: ^bb7 +// CHECK-NEXT: %36 = arith.divui %35, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %37 = arith.addi %31, %35 : i256 loc(#loc4) +// CHECK-NEXT: %38 = llvm.inttoptr %37 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %39 = llvm.load %38 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %40 = arith.addi %30, %36 : i256 loc(#loc4) +// CHECK-NEXT: %41 = llvm.inttoptr %40 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %39, %41 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %42 = arith.addi %35, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb7(%42 : i256) loc(#loc4) +// CHECK-NEXT: ^bb9: // pred: ^bb7 +// CHECK-NEXT: %43 = arith.cmpi ult, %32, %1 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %43, ^bb10, ^bb11 loc(#loc4) +// CHECK-NEXT: ^bb10: // pred: ^bb9 +// CHECK-NEXT: %44 = arith.andi %1, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %45 = arith.divui %32, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %46 = arith.addi %31, %32 : i256 loc(#loc4) +// CHECK-NEXT: %47 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %48 = llvm.load %47 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %49 = arith.muli %44, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %50 = arith.subi %c256_i256, %49 : i256 loc(#loc4) +// CHECK-NEXT: %51 = arith.shli %c-1_i256, %50 : i256 loc(#loc4) +// CHECK-NEXT: %52 = arith.andi %48, %51 : i256 loc(#loc4) +// CHECK-NEXT: %53 = arith.addi %30, %45 : i256 loc(#loc4) +// CHECK-NEXT: %54 = llvm.inttoptr %53 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %52, %54 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb11 loc(#loc4) +// CHECK-NEXT: ^bb11: // 2 preds: ^bb9, ^bb10 +// CHECK-NEXT: %55 = arith.muli %1, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: %56 = arith.ori %55, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %57 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %56, %57 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb12 loc(#loc4) +// CHECK-NEXT: ^bb12: // 3 preds: ^bb4, ^bb5, ^bb11 +// CHECK-NEXT: return loc(#loc4) +// CHECK-NEXT: } loc(#loc4) +// CHECK-NEXT: func.func @__sol.clear_string_tail(%arg0: i256 loc({{.*}}:51:4), %arg1: i256 loc({{.*}}:51:4), %arg2: i256 loc({{.*}}:51:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %0 = arith.cmpi ugt, %arg1, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %0, ^bb1, ^bb4 loc(#loc5) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %1 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %arg0, %1 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %2 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %3 = "llvm.intrcall"(%2, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %4 = arith.addi %arg2, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %5 = arith.divui %4, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.addi %3, %5 : i256 loc(#loc5) +// CHECK-NEXT: %7 = arith.cmpi ult, %arg2, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %8 = arith.select %7, %3, %6 : i256 loc(#loc5) +// CHECK-NEXT: %9 = arith.addi %arg1, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %10 = arith.divui %9, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %11 = arith.addi %3, %10 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb2(%8 : i256) loc(#loc5) +// CHECK-NEXT: ^bb2(%12: i256 loc({{.*}}:51:4)): // 2 preds: ^bb1, ^bb3 +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %11 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %13, ^bb3(%12 : i256), ^bb4 loc(#loc5) +// CHECK-NEXT: ^bb3(%14: i256 loc({{.*}}:51:4)): // pred: ^bb2 +// CHECK-NEXT: %15 = llvm.inttoptr %14 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb2(%16 : i256) loc(#loc5) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb0, ^bb2 +// CHECK-NEXT: return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: func.func @__sol.copy.storage.storage.string(%arg0: i256 loc({{.*}}:51:4), %arg1: i256 loc({{.*}}:51:4)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { +// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) +// CHECK-NEXT: %c2_i256 = arith.constant 2 : i256 loc(#loc) +// CHECK-NEXT: %c-1_i256 = arith.constant -1 : i256 loc(#loc) +// CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) +// CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) +// CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) +// CHECK-NEXT: %c36_i256 = arith.constant 36 : i256 loc(#loc) +// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) +// CHECK-NEXT: %c4_i256 = arith.constant 4 : i256 loc(#loc) +// CHECK-NEXT: %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256 = arith.constant 35408467139433450592217433187231851964531694900788300625387963629091585785856 : i256 loc(#loc) +// CHECK-NEXT: %c32_i256 = arith.constant 32 : i256 loc(#loc) +// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) +// CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) +// CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) +// CHECK-NEXT: %0 = llvm.inttoptr %arg0 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %2 = arith.shrui %1, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %3 = arith.andi %1, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %4 = arith.cmpi eq, %3, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: %5 = arith.andi %2, %c127_i256 : i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.select %4, %5, %2 : i256 loc(#loc5) +// CHECK-NEXT: %7 = arith.cmpi ult, %6, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %8 = arith.extui %7 : i1 to i256 loc(#loc5) +// CHECK-NEXT: %9 = arith.cmpi eq, %3, %8 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %9, ^bb1, ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb1: // pred: ^bb0 +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %10 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %11 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c34_i256, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%12, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb2 loc(#loc5) +// CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 +// CHECK-NEXT: %13 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %14 = llvm.load %13 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %15 = arith.shrui %14, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %16 = arith.andi %14, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %17 = arith.cmpi eq, %16, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: %18 = arith.andi %15, %c127_i256 : i256 loc(#loc5) +// CHECK-NEXT: %19 = arith.select %17, %18, %15 : i256 loc(#loc5) +// CHECK-NEXT: %20 = arith.cmpi ult, %19, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %21 = arith.extui %20 : i1 to i256 loc(#loc5) +// CHECK-NEXT: %22 = arith.cmpi eq, %16, %21 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %22, ^bb3, ^bb4 loc(#loc5) +// CHECK-NEXT: ^bb3: // pred: ^bb2 +// CHECK-NEXT: %23 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %23 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %24 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c34_i256, %24 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %25 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%25, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb4 loc(#loc5) +// CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 +// CHECK-NEXT: call @__sol.clear_string_tail(%arg1, %19, %6) : (i256, i256, i256) -> () loc(#loc5) +// CHECK-NEXT: %26 = arith.cmpi ugt, %6, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %26, ^bb8, ^bb5 loc(#loc5) +// CHECK-NEXT: ^bb5: // pred: ^bb4 +// CHECK-NEXT: %27 = arith.cmpi ne, %6, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %27, ^bb7, ^bb6 loc(#loc5) +// CHECK-NEXT: ^bb6: // pred: ^bb5 +// CHECK-NEXT: %28 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %28 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb14 loc(#loc5) +// CHECK-NEXT: ^bb7: // pred: ^bb5 +// CHECK-NEXT: %29 = arith.muli %6, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %30 = arith.subi %c256_i256, %29 : i256 loc(#loc5) +// CHECK-NEXT: %31 = arith.shli %c-1_i256, %30 : i256 loc(#loc5) +// CHECK-NEXT: %32 = arith.andi %1, %31 : i256 loc(#loc5) +// CHECK-NEXT: %33 = arith.muli %6, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: %34 = arith.ori %32, %33 : i256 loc(#loc5) +// CHECK-NEXT: %35 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %34, %35 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb14 loc(#loc5) +// CHECK-NEXT: ^bb8: // pred: ^bb4 +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %arg1, %36 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %37 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %38 = "llvm.intrcall"(%37, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %39 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %arg0, %39 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %40 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %41 = "llvm.intrcall"(%40, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %42 = arith.andi %6, %c-32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb9(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb9(%43: i256 loc({{.*}}:51:4)): // 2 preds: ^bb8, ^bb10 +// CHECK-NEXT: %44 = arith.cmpi ult, %43, %42 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %44, ^bb10(%43 : i256), ^bb11 loc(#loc5) +// CHECK-NEXT: ^bb10(%45: i256 loc({{.*}}:51:4)): // pred: ^bb9 +// CHECK-NEXT: %46 = arith.divui %45, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %47 = arith.addi %41, %46 : i256 loc(#loc5) +// CHECK-NEXT: %48 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %49 = llvm.load %48 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %50 = arith.addi %38, %46 : i256 loc(#loc5) +// CHECK-NEXT: %51 = llvm.inttoptr %50 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %49, %51 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %52 = arith.addi %45, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb9(%52 : i256) loc(#loc5) +// CHECK-NEXT: ^bb11: // pred: ^bb9 +// CHECK-NEXT: %53 = arith.cmpi ult, %42, %6 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %53, ^bb12, ^bb13 loc(#loc5) +// CHECK-NEXT: ^bb12: // pred: ^bb11 +// CHECK-NEXT: %54 = arith.andi %6, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %55 = arith.divui %42, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %56 = arith.addi %41, %55 : i256 loc(#loc5) +// CHECK-NEXT: %57 = llvm.inttoptr %56 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %58 = llvm.load %57 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %59 = arith.muli %54, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %60 = arith.subi %c256_i256, %59 : i256 loc(#loc5) +// CHECK-NEXT: %61 = arith.shli %c-1_i256, %60 : i256 loc(#loc5) +// CHECK-NEXT: %62 = arith.andi %58, %61 : i256 loc(#loc5) +// CHECK-NEXT: %63 = arith.addi %38, %55 : i256 loc(#loc5) +// CHECK-NEXT: %64 = llvm.inttoptr %63 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %62, %64 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb13 loc(#loc5) +// CHECK-NEXT: ^bb13: // 2 preds: ^bb11, ^bb12 +// CHECK-NEXT: %65 = arith.muli %6, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: %66 = arith.ori %65, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %67 = llvm.inttoptr %arg1 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %66, %67 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb14 loc(#loc5) +// CHECK-NEXT: ^bb14: // 3 preds: ^bb6, ^bb7, ^bb13 +// CHECK-NEXT: return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) // CHECK-NEXT: func.func @f5_169(%arg0: i256 loc({{.*}}:66:14)) -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c1056_i256 = arith.constant 1056 : i256 loc(#loc) // CHECK-NEXT: %c2144_i256 = arith.constant 2144 : i256 loc(#loc) @@ -4555,2117 +4961,2117 @@ contract Test { // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc3) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc3) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc4) -// CHECK-NEXT: %2 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %4 = arith.addi %3, %c864_i256 : i256 loc(#loc4) -// CHECK-NEXT: %5 = arith.cmpi ugt, %4, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %6 = arith.cmpi ult, %4, %3 : i256 loc(#loc4) -// CHECK-NEXT: %7 = arith.ori %5, %6 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %7, ^bb1, ^bb2 loc(#loc4) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc7) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc7) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc8) +// CHECK-NEXT: %2 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %4 = arith.addi %3, %c864_i256 : i256 loc(#loc8) +// CHECK-NEXT: %5 = arith.cmpi ugt, %4, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %6 = arith.cmpi ult, %4, %3 : i256 loc(#loc8) +// CHECK-NEXT: %7 = arith.ori %5, %6 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %7, ^bb1, ^bb2 loc(#loc8) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %9 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%10, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb2 loc(#loc4) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %8 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %9 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%10, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb2 loc(#loc8) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %11 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %4, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %12 = llvm.inttoptr %1 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %14 = arith.andi %13, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %15 = arith.cmpi ne, %13, %14 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %15, ^bb3, ^bb4 loc(#loc4) +// CHECK-NEXT: %11 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %4, %11 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %12 = llvm.inttoptr %1 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %13 = llvm.load %12 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %14 = arith.andi %13, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %15 = arith.cmpi ne, %13, %14 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %15, ^bb3, ^bb4 loc(#loc8) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%16, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb4 loc(#loc4) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%16, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb4 loc(#loc8) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %17 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %14, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %18 = arith.addi %1, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %19 = arith.addi %3, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %20 = llvm.inttoptr %18 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %22 = arith.andi %21, %c-20282409603651670423947251286016_i256 : i256 loc(#loc4) -// CHECK-NEXT: %23 = arith.cmpi ne, %21, %22 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %23, ^bb5, ^bb6 loc(#loc4) +// CHECK-NEXT: %17 = llvm.inttoptr %3 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %14, %17 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %18 = arith.addi %1, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %19 = arith.addi %3, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %20 = llvm.inttoptr %18 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %22 = arith.andi %21, %c-20282409603651670423947251286016_i256 : i256 loc(#loc8) +// CHECK-NEXT: %23 = arith.cmpi ne, %21, %22 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %23, ^bb5, ^bb6 loc(#loc8) // CHECK-NEXT: ^bb5: // pred: ^bb4 -// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%24, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb6 loc(#loc4) +// CHECK-NEXT: %24 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%24, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb6 loc(#loc8) // CHECK-NEXT: ^bb6: // 2 preds: ^bb4, ^bb5 -// CHECK-NEXT: %25 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %22, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %26 = arith.addi %1, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %27 = arith.addi %3, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %28 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %30 = arith.addi %29, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %31 = arith.cmpi ugt, %30, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %32 = arith.cmpi ult, %30, %29 : i256 loc(#loc4) -// CHECK-NEXT: %33 = arith.ori %31, %32 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %33, ^bb7, ^bb8 loc(#loc4) +// CHECK-NEXT: %25 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %22, %25 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %26 = arith.addi %1, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %27 = arith.addi %3, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %28 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %29 = llvm.load %28 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %30 = arith.addi %29, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %31 = arith.cmpi ugt, %30, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %32 = arith.cmpi ult, %30, %29 : i256 loc(#loc8) +// CHECK-NEXT: %33 = arith.ori %31, %32 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %33, ^bb7, ^bb8 loc(#loc8) // CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %35 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%36, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb8 loc(#loc4) +// CHECK-NEXT: %34 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %34 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %35 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %35 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %36 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%36, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb8 loc(#loc8) // CHECK-NEXT: ^bb8: // 2 preds: ^bb6, ^bb7 -// CHECK-NEXT: %37 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %30, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb9(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %37 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %30, %37 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb9(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb9(%38: i256 loc({{.*}}:67:11)): // 2 preds: ^bb8, ^bb12 -// CHECK-NEXT: %39 = arith.cmpi ult, %38, %c7_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %39, ^bb10(%38 : i256), ^bb13 loc(#loc4) +// CHECK-NEXT: %39 = arith.cmpi ult, %38, %c7_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %39, ^bb10(%38 : i256), ^bb13 loc(#loc8) // CHECK-NEXT: ^bb10(%40: i256 loc({{.*}}:67:11)): // pred: ^bb9 -// CHECK-NEXT: %41 = arith.muli %40, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %42 = arith.addi %26, %41 : i256 loc(#loc4) -// CHECK-NEXT: %43 = arith.muli %40, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %44 = arith.addi %29, %43 : i256 loc(#loc4) -// CHECK-NEXT: %45 = llvm.inttoptr %42 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %46 = llvm.load %45 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %47 = arith.andi %46, %c4722366482869645213695_i256 : i256 loc(#loc4) -// CHECK-NEXT: %48 = arith.cmpi ne, %46, %47 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %48, ^bb11, ^bb12 loc(#loc4) +// CHECK-NEXT: %41 = arith.muli %40, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %42 = arith.addi %26, %41 : i256 loc(#loc8) +// CHECK-NEXT: %43 = arith.muli %40, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %44 = arith.addi %29, %43 : i256 loc(#loc8) +// CHECK-NEXT: %45 = llvm.inttoptr %42 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %46 = llvm.load %45 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %47 = arith.andi %46, %c4722366482869645213695_i256 : i256 loc(#loc8) +// CHECK-NEXT: %48 = arith.cmpi ne, %46, %47 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %48, ^bb11, ^bb12 loc(#loc8) // CHECK-NEXT: ^bb11: // pred: ^bb10 -// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%49, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb12 loc(#loc4) +// CHECK-NEXT: %49 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%49, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb12 loc(#loc8) // CHECK-NEXT: ^bb12: // 2 preds: ^bb10, ^bb11 -// CHECK-NEXT: %50 = llvm.inttoptr %44 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %47, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %51 = arith.addi %40, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb9(%51 : i256) loc(#loc4) +// CHECK-NEXT: %50 = llvm.inttoptr %44 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %47, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %51 = arith.addi %40, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb9(%51 : i256) loc(#loc8) // CHECK-NEXT: ^bb13: // pred: ^bb9 -// CHECK-NEXT: %52 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %29, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %53 = arith.addi %1, %c288_i256 : i256 loc(#loc4) -// CHECK-NEXT: %54 = arith.addi %3, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %55 = llvm.inttoptr %53 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %56 = llvm.load %55 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %57 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %58 = arith.subi %57, %1 : i256 loc(#loc4) -// CHECK-NEXT: %59 = arith.subi %58, %c95_i256 : i256 loc(#loc4) -// CHECK-NEXT: %60 = arith.cmpi sge, %56, %59 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %60, ^bb14, ^bb15 loc(#loc4) +// CHECK-NEXT: %52 = llvm.inttoptr %27 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %29, %52 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %53 = arith.addi %1, %c288_i256 : i256 loc(#loc8) +// CHECK-NEXT: %54 = arith.addi %3, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %55 = llvm.inttoptr %53 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %56 = llvm.load %55 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %57 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %58 = arith.subi %57, %1 : i256 loc(#loc8) +// CHECK-NEXT: %59 = arith.subi %58, %c95_i256 : i256 loc(#loc8) +// CHECK-NEXT: %60 = arith.cmpi sge, %56, %59 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %60, ^bb14, ^bb15 loc(#loc8) // CHECK-NEXT: ^bb14: // pred: ^bb13 -// CHECK-NEXT: %61 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%61, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb15 loc(#loc4) +// CHECK-NEXT: %61 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%61, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb15 loc(#loc8) // CHECK-NEXT: ^bb15: // 2 preds: ^bb13, ^bb14 -// CHECK-NEXT: %62 = arith.addi %1, %56 : i256 loc(#loc4) -// CHECK-NEXT: %63 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %64 = llvm.load %63 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %65 = arith.addi %64, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %66 = arith.cmpi ugt, %65, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %67 = arith.cmpi ult, %65, %64 : i256 loc(#loc4) -// CHECK-NEXT: %68 = arith.ori %66, %67 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %68, ^bb16, ^bb17 loc(#loc4) +// CHECK-NEXT: %62 = arith.addi %1, %56 : i256 loc(#loc8) +// CHECK-NEXT: %63 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %64 = llvm.load %63 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %65 = arith.addi %64, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %66 = arith.cmpi ugt, %65, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %67 = arith.cmpi ult, %65, %64 : i256 loc(#loc8) +// CHECK-NEXT: %68 = arith.ori %66, %67 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %68, ^bb16, ^bb17 loc(#loc8) // CHECK-NEXT: ^bb16: // pred: ^bb15 -// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %70 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %71 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%71, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb17 loc(#loc4) +// CHECK-NEXT: %69 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %69 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %70 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %70 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %71 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%71, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb17 loc(#loc8) // CHECK-NEXT: ^bb17: // 2 preds: ^bb15, ^bb16 -// CHECK-NEXT: %72 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %65, %72 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb18(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %72 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %65, %72 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb18(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb18(%73: i256 loc({{.*}}:67:11)): // 2 preds: ^bb17, ^bb64 -// CHECK-NEXT: %74 = arith.cmpi ult, %73, %c3_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %74, ^bb19(%73 : i256), ^bb65 loc(#loc4) +// CHECK-NEXT: %74 = arith.cmpi ult, %73, %c3_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %74, ^bb19(%73 : i256), ^bb65 loc(#loc8) // CHECK-NEXT: ^bb19(%75: i256 loc({{.*}}:67:11)): // pred: ^bb18 -// CHECK-NEXT: %76 = arith.muli %75, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %77 = arith.addi %62, %76 : i256 loc(#loc4) -// CHECK-NEXT: %78 = arith.muli %75, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %79 = arith.addi %64, %78 : i256 loc(#loc4) -// CHECK-NEXT: %80 = llvm.inttoptr %77 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %81 = llvm.load %80 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %82 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %83 = arith.subi %82, %62 : i256 loc(#loc4) -// CHECK-NEXT: %84 = arith.subi %83, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %85 = arith.cmpi sge, %81, %84 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %85, ^bb20, ^bb21 loc(#loc4) +// CHECK-NEXT: %76 = arith.muli %75, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %77 = arith.addi %62, %76 : i256 loc(#loc8) +// CHECK-NEXT: %78 = arith.muli %75, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %79 = arith.addi %64, %78 : i256 loc(#loc8) +// CHECK-NEXT: %80 = llvm.inttoptr %77 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %81 = llvm.load %80 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %82 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %83 = arith.subi %82, %62 : i256 loc(#loc8) +// CHECK-NEXT: %84 = arith.subi %83, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %85 = arith.cmpi sge, %81, %84 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %85, ^bb20, ^bb21 loc(#loc8) // CHECK-NEXT: ^bb20: // pred: ^bb19 -// CHECK-NEXT: %86 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%86, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb21 loc(#loc4) +// CHECK-NEXT: %86 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%86, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb21 loc(#loc8) // CHECK-NEXT: ^bb21: // 2 preds: ^bb19, ^bb20 -// CHECK-NEXT: %87 = arith.addi %62, %81 : i256 loc(#loc4) -// CHECK-NEXT: %88 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %89 = llvm.load %88 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %90 = arith.addi %89, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %91 = arith.cmpi ugt, %90, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %92 = arith.cmpi ult, %90, %89 : i256 loc(#loc4) -// CHECK-NEXT: %93 = arith.ori %91, %92 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %93, ^bb22, ^bb23 loc(#loc4) +// CHECK-NEXT: %87 = arith.addi %62, %81 : i256 loc(#loc8) +// CHECK-NEXT: %88 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %89 = llvm.load %88 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %90 = arith.addi %89, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %91 = arith.cmpi ugt, %90, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %92 = arith.cmpi ult, %90, %89 : i256 loc(#loc8) +// CHECK-NEXT: %93 = arith.ori %91, %92 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %93, ^bb22, ^bb23 loc(#loc8) // CHECK-NEXT: ^bb22: // pred: ^bb21 -// CHECK-NEXT: %94 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %94 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %95 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %95 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %96 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%96, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb23 loc(#loc4) +// CHECK-NEXT: %94 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %94 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %95 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %95 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %96 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%96, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb23 loc(#loc8) // CHECK-NEXT: ^bb23: // 2 preds: ^bb21, ^bb22 -// CHECK-NEXT: %97 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %90, %97 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %98 = llvm.inttoptr %87 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %99 = llvm.load %98 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %100 = "llvm.intrcall"(%c8_i256, %99) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %101 = arith.cmpi ne, %99, %100 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %101, ^bb24, ^bb25 loc(#loc4) +// CHECK-NEXT: %97 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %90, %97 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %98 = llvm.inttoptr %87 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %99 = llvm.load %98 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %100 = "llvm.intrcall"(%c8_i256, %99) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %101 = arith.cmpi ne, %99, %100 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %101, ^bb24, ^bb25 loc(#loc8) // CHECK-NEXT: ^bb24: // pred: ^bb23 -// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%102, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb25 loc(#loc4) +// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%102, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb25 loc(#loc8) // CHECK-NEXT: ^bb25: // 2 preds: ^bb23, ^bb24 -// CHECK-NEXT: %103 = llvm.inttoptr %89 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %100, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %104 = arith.addi %87, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %105 = arith.addi %89, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %106 = llvm.inttoptr %104 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %107 = llvm.load %106 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %108 = arith.andi %107, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %109 = arith.cmpi ne, %107, %108 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %109, ^bb26, ^bb27 loc(#loc4) +// CHECK-NEXT: %103 = llvm.inttoptr %89 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %100, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %104 = arith.addi %87, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %105 = arith.addi %89, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %106 = llvm.inttoptr %104 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %107 = llvm.load %106 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %108 = arith.andi %107, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %109 = arith.cmpi ne, %107, %108 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %109, ^bb26, ^bb27 loc(#loc8) // CHECK-NEXT: ^bb26: // pred: ^bb25 -// CHECK-NEXT: %110 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%110, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb27 loc(#loc4) +// CHECK-NEXT: %110 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%110, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb27 loc(#loc8) // CHECK-NEXT: ^bb27: // 2 preds: ^bb25, ^bb26 -// CHECK-NEXT: %111 = llvm.inttoptr %105 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %108, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %112 = arith.addi %87, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %113 = arith.addi %89, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %114 = llvm.inttoptr %112 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %115 = llvm.load %114 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %116 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %117 = arith.subi %116, %87 : i256 loc(#loc4) -// CHECK-NEXT: %118 = arith.subi %117, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %119 = arith.cmpi sge, %115, %118 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %119, ^bb28, ^bb29 loc(#loc4) +// CHECK-NEXT: %111 = llvm.inttoptr %105 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %108, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %112 = arith.addi %87, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %113 = arith.addi %89, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %114 = llvm.inttoptr %112 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %115 = llvm.load %114 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %116 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %117 = arith.subi %116, %87 : i256 loc(#loc8) +// CHECK-NEXT: %118 = arith.subi %117, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %119 = arith.cmpi sge, %115, %118 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %119, ^bb28, ^bb29 loc(#loc8) // CHECK-NEXT: ^bb28: // pred: ^bb27 -// CHECK-NEXT: %120 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%120, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb29 loc(#loc4) +// CHECK-NEXT: %120 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%120, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb29 loc(#loc8) // CHECK-NEXT: ^bb29: // 2 preds: ^bb27, ^bb28 -// CHECK-NEXT: %121 = arith.addi %87, %115 : i256 loc(#loc4) -// CHECK-NEXT: %122 = llvm.inttoptr %121 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %123 = llvm.load %122 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %124 = arith.addi %121, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %125 = arith.cmpi ugt, %123, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %125, ^bb30, ^bb31 loc(#loc4) +// CHECK-NEXT: %121 = arith.addi %87, %115 : i256 loc(#loc8) +// CHECK-NEXT: %122 = llvm.inttoptr %121 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %123 = llvm.load %122 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %124 = arith.addi %121, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %125 = arith.cmpi ugt, %123, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %125, ^bb30, ^bb31 loc(#loc8) // CHECK-NEXT: ^bb30: // pred: ^bb29 -// CHECK-NEXT: %126 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%126, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb31 loc(#loc4) +// CHECK-NEXT: %126 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%126, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb31 loc(#loc8) // CHECK-NEXT: ^bb31: // 2 preds: ^bb29, ^bb30 -// CHECK-NEXT: %127 = arith.muli %123, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %128 = arith.subi %116, %127 : i256 loc(#loc4) -// CHECK-NEXT: %129 = arith.cmpi sgt, %124, %128 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %129, ^bb32, ^bb33 loc(#loc4) +// CHECK-NEXT: %127 = arith.muli %123, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %128 = arith.subi %116, %127 : i256 loc(#loc8) +// CHECK-NEXT: %129 = arith.cmpi sgt, %124, %128 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %129, ^bb32, ^bb33 loc(#loc8) // CHECK-NEXT: ^bb32: // pred: ^bb31 -// CHECK-NEXT: %130 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%130, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb33 loc(#loc4) +// CHECK-NEXT: %130 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%130, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb33 loc(#loc8) // CHECK-NEXT: ^bb33: // 2 preds: ^bb31, ^bb32 -// CHECK-NEXT: %131 = arith.muli %123, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %132 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %133 = llvm.load %132 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %134 = arith.addi %131, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %135 = arith.andi %134, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %136 = arith.addi %133, %135 : i256 loc(#loc4) -// CHECK-NEXT: %137 = arith.cmpi ugt, %136, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %138 = arith.cmpi ult, %136, %133 : i256 loc(#loc4) -// CHECK-NEXT: %139 = arith.ori %137, %138 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %139, ^bb34, ^bb35 loc(#loc4) +// CHECK-NEXT: %131 = arith.muli %123, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %132 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %133 = llvm.load %132 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %134 = arith.addi %131, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %135 = arith.andi %134, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %136 = arith.addi %133, %135 : i256 loc(#loc8) +// CHECK-NEXT: %137 = arith.cmpi ugt, %136, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %138 = arith.cmpi ult, %136, %133 : i256 loc(#loc8) +// CHECK-NEXT: %139 = arith.ori %137, %138 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %139, ^bb34, ^bb35 loc(#loc8) // CHECK-NEXT: ^bb34: // pred: ^bb33 -// CHECK-NEXT: %140 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %140 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %141 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %141 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %142 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%142, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb35 loc(#loc4) +// CHECK-NEXT: %140 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %140 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %141 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %141 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %142 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%142, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb35 loc(#loc8) // CHECK-NEXT: ^bb35: // 2 preds: ^bb33, ^bb34 -// CHECK-NEXT: %143 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %136, %143 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %144 = llvm.inttoptr %133 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %123, %144 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %145 = arith.addi %133, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb36(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %143 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %136, %143 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %144 = llvm.inttoptr %133 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %123, %144 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %145 = arith.addi %133, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb36(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb36(%146: i256 loc({{.*}}:67:11)): // 2 preds: ^bb35, ^bb50 -// CHECK-NEXT: %147 = arith.cmpi ult, %146, %123 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %147, ^bb37(%146 : i256), ^bb51 loc(#loc4) +// CHECK-NEXT: %147 = arith.cmpi ult, %146, %123 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %147, ^bb37(%146 : i256), ^bb51 loc(#loc8) // CHECK-NEXT: ^bb37(%148: i256 loc({{.*}}:67:11)): // pred: ^bb36 -// CHECK-NEXT: %149 = arith.muli %148, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %150 = arith.addi %124, %149 : i256 loc(#loc4) -// CHECK-NEXT: %151 = arith.muli %148, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %152 = arith.addi %145, %151 : i256 loc(#loc4) -// CHECK-NEXT: %153 = llvm.inttoptr %150 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %154 = llvm.load %153 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %155 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %156 = arith.subi %155, %124 : i256 loc(#loc4) -// CHECK-NEXT: %157 = arith.subi %156, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %158 = arith.cmpi sge, %154, %157 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %158, ^bb38, ^bb39 loc(#loc4) +// CHECK-NEXT: %149 = arith.muli %148, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %150 = arith.addi %124, %149 : i256 loc(#loc8) +// CHECK-NEXT: %151 = arith.muli %148, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %152 = arith.addi %145, %151 : i256 loc(#loc8) +// CHECK-NEXT: %153 = llvm.inttoptr %150 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %154 = llvm.load %153 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %155 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %156 = arith.subi %155, %124 : i256 loc(#loc8) +// CHECK-NEXT: %157 = arith.subi %156, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %158 = arith.cmpi sge, %154, %157 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %158, ^bb38, ^bb39 loc(#loc8) // CHECK-NEXT: ^bb38: // pred: ^bb37 -// CHECK-NEXT: %159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%159, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb39 loc(#loc4) +// CHECK-NEXT: %159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%159, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb39 loc(#loc8) // CHECK-NEXT: ^bb39: // 2 preds: ^bb37, ^bb38 -// CHECK-NEXT: %160 = arith.addi %124, %154 : i256 loc(#loc4) -// CHECK-NEXT: %161 = llvm.inttoptr %160 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %162 = llvm.load %161 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %163 = arith.addi %160, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %164 = arith.cmpi ugt, %162, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %164, ^bb40, ^bb41 loc(#loc4) +// CHECK-NEXT: %160 = arith.addi %124, %154 : i256 loc(#loc8) +// CHECK-NEXT: %161 = llvm.inttoptr %160 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %162 = llvm.load %161 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %163 = arith.addi %160, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %164 = arith.cmpi ugt, %162, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %164, ^bb40, ^bb41 loc(#loc8) // CHECK-NEXT: ^bb40: // pred: ^bb39 -// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%165, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb41 loc(#loc4) +// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%165, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb41 loc(#loc8) // CHECK-NEXT: ^bb41: // 2 preds: ^bb39, ^bb40 -// CHECK-NEXT: %166 = arith.muli %162, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %167 = arith.subi %155, %166 : i256 loc(#loc4) -// CHECK-NEXT: %168 = arith.cmpi sgt, %163, %167 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %168, ^bb42, ^bb43 loc(#loc4) +// CHECK-NEXT: %166 = arith.muli %162, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %167 = arith.subi %155, %166 : i256 loc(#loc8) +// CHECK-NEXT: %168 = arith.cmpi sgt, %163, %167 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %168, ^bb42, ^bb43 loc(#loc8) // CHECK-NEXT: ^bb42: // pred: ^bb41 -// CHECK-NEXT: %169 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%169, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb43 loc(#loc4) +// CHECK-NEXT: %169 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%169, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb43 loc(#loc8) // CHECK-NEXT: ^bb43: // 2 preds: ^bb41, ^bb42 -// CHECK-NEXT: %170 = arith.muli %162, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %171 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %172 = llvm.load %171 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %173 = arith.addi %170, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %174 = arith.andi %173, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %175 = arith.addi %172, %174 : i256 loc(#loc4) -// CHECK-NEXT: %176 = arith.cmpi ugt, %175, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %177 = arith.cmpi ult, %175, %172 : i256 loc(#loc4) -// CHECK-NEXT: %178 = arith.ori %176, %177 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %178, ^bb44, ^bb45 loc(#loc4) +// CHECK-NEXT: %170 = arith.muli %162, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %171 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %172 = llvm.load %171 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %173 = arith.addi %170, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %174 = arith.andi %173, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %175 = arith.addi %172, %174 : i256 loc(#loc8) +// CHECK-NEXT: %176 = arith.cmpi ugt, %175, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %177 = arith.cmpi ult, %175, %172 : i256 loc(#loc8) +// CHECK-NEXT: %178 = arith.ori %176, %177 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %178, ^bb44, ^bb45 loc(#loc8) // CHECK-NEXT: ^bb44: // pred: ^bb43 -// CHECK-NEXT: %179 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %179 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %180 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %180 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %181 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%181, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb45 loc(#loc4) +// CHECK-NEXT: %179 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %179 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %180 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %180 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %181 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%181, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb45 loc(#loc8) // CHECK-NEXT: ^bb45: // 2 preds: ^bb43, ^bb44 -// CHECK-NEXT: %182 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %175, %182 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %183 = llvm.inttoptr %172 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %162, %183 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %184 = arith.addi %172, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb46(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %182 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %175, %182 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %183 = llvm.inttoptr %172 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %162, %183 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %184 = arith.addi %172, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb46(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb46(%185: i256 loc({{.*}}:67:11)): // 2 preds: ^bb45, ^bb49 -// CHECK-NEXT: %186 = arith.cmpi ult, %185, %162 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %186, ^bb47(%185 : i256), ^bb50 loc(#loc4) +// CHECK-NEXT: %186 = arith.cmpi ult, %185, %162 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %186, ^bb47(%185 : i256), ^bb50 loc(#loc8) // CHECK-NEXT: ^bb47(%187: i256 loc({{.*}}:67:11)): // pred: ^bb46 -// CHECK-NEXT: %188 = arith.muli %187, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %189 = arith.addi %163, %188 : i256 loc(#loc4) -// CHECK-NEXT: %190 = arith.muli %187, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %191 = arith.addi %184, %190 : i256 loc(#loc4) -// CHECK-NEXT: %192 = llvm.inttoptr %189 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %193 = llvm.load %192 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %194 = arith.cmpi ne, %193, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %195 = arith.extui %194 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %196 = arith.cmpi ne, %193, %195 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %196, ^bb48, ^bb49 loc(#loc4) +// CHECK-NEXT: %188 = arith.muli %187, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %189 = arith.addi %163, %188 : i256 loc(#loc8) +// CHECK-NEXT: %190 = arith.muli %187, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %191 = arith.addi %184, %190 : i256 loc(#loc8) +// CHECK-NEXT: %192 = llvm.inttoptr %189 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %193 = llvm.load %192 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %194 = arith.cmpi ne, %193, %c0_i256 : i256 loc(#loc8) +// CHECK-NEXT: %195 = arith.extui %194 : i1 to i256 loc(#loc8) +// CHECK-NEXT: %196 = arith.cmpi ne, %193, %195 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %196, ^bb48, ^bb49 loc(#loc8) // CHECK-NEXT: ^bb48: // pred: ^bb47 -// CHECK-NEXT: %197 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%197, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb49 loc(#loc4) +// CHECK-NEXT: %197 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%197, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb49 loc(#loc8) // CHECK-NEXT: ^bb49: // 2 preds: ^bb47, ^bb48 -// CHECK-NEXT: %198 = llvm.inttoptr %191 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %195, %198 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %199 = arith.addi %187, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb46(%199 : i256) loc(#loc4) +// CHECK-NEXT: %198 = llvm.inttoptr %191 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %195, %198 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %199 = arith.addi %187, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb46(%199 : i256) loc(#loc8) // CHECK-NEXT: ^bb50: // pred: ^bb46 -// CHECK-NEXT: %200 = llvm.inttoptr %152 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %172, %200 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %201 = arith.addi %148, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb36(%201 : i256) loc(#loc4) +// CHECK-NEXT: %200 = llvm.inttoptr %152 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %172, %200 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %201 = arith.addi %148, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb36(%201 : i256) loc(#loc8) // CHECK-NEXT: ^bb51: // pred: ^bb36 -// CHECK-NEXT: %202 = llvm.inttoptr %113 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %133, %202 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %203 = arith.addi %87, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %204 = arith.addi %89, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %205 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %206 = llvm.load %205 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %207 = arith.addi %206, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %208 = arith.cmpi ugt, %207, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %209 = arith.cmpi ult, %207, %206 : i256 loc(#loc4) -// CHECK-NEXT: %210 = arith.ori %208, %209 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %210, ^bb52, ^bb53 loc(#loc4) +// CHECK-NEXT: %202 = llvm.inttoptr %113 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %133, %202 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %203 = arith.addi %87, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %204 = arith.addi %89, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %205 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %206 = llvm.load %205 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %207 = arith.addi %206, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %208 = arith.cmpi ugt, %207, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %209 = arith.cmpi ult, %207, %206 : i256 loc(#loc8) +// CHECK-NEXT: %210 = arith.ori %208, %209 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %210, ^bb52, ^bb53 loc(#loc8) // CHECK-NEXT: ^bb52: // pred: ^bb51 -// CHECK-NEXT: %211 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %211 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %212 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %212 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %213 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%213, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb53 loc(#loc4) +// CHECK-NEXT: %211 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %211 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %212 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %212 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %213 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%213, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb53 loc(#loc8) // CHECK-NEXT: ^bb53: // 2 preds: ^bb51, ^bb52 -// CHECK-NEXT: %214 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %207, %214 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb54(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %214 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %207, %214 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb54(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb54(%215: i256 loc({{.*}}:67:11)): // 2 preds: ^bb53, ^bb57 -// CHECK-NEXT: %216 = arith.cmpi ult, %215, %c2_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %216, ^bb55(%215 : i256), ^bb58 loc(#loc4) +// CHECK-NEXT: %216 = arith.cmpi ult, %215, %c2_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %216, ^bb55(%215 : i256), ^bb58 loc(#loc8) // CHECK-NEXT: ^bb55(%217: i256 loc({{.*}}:67:11)): // pred: ^bb54 -// CHECK-NEXT: %218 = arith.muli %217, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %219 = arith.addi %203, %218 : i256 loc(#loc4) -// CHECK-NEXT: %220 = arith.muli %217, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %221 = arith.addi %206, %220 : i256 loc(#loc4) -// CHECK-NEXT: %222 = llvm.inttoptr %219 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %223 = llvm.load %222 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %224 = arith.andi %223, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) -// CHECK-NEXT: %225 = arith.cmpi ne, %223, %224 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %225, ^bb56, ^bb57 loc(#loc4) +// CHECK-NEXT: %218 = arith.muli %217, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %219 = arith.addi %203, %218 : i256 loc(#loc8) +// CHECK-NEXT: %220 = arith.muli %217, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %221 = arith.addi %206, %220 : i256 loc(#loc8) +// CHECK-NEXT: %222 = llvm.inttoptr %219 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %223 = llvm.load %222 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %224 = arith.andi %223, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc8) +// CHECK-NEXT: %225 = arith.cmpi ne, %223, %224 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %225, ^bb56, ^bb57 loc(#loc8) // CHECK-NEXT: ^bb56: // pred: ^bb55 -// CHECK-NEXT: %226 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%226, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb57 loc(#loc4) +// CHECK-NEXT: %226 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%226, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb57 loc(#loc8) // CHECK-NEXT: ^bb57: // 2 preds: ^bb55, ^bb56 -// CHECK-NEXT: %227 = llvm.inttoptr %221 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %224, %227 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %228 = arith.addi %217, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb54(%228 : i256) loc(#loc4) +// CHECK-NEXT: %227 = llvm.inttoptr %221 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %224, %227 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %228 = arith.addi %217, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb54(%228 : i256) loc(#loc8) // CHECK-NEXT: ^bb58: // pred: ^bb54 -// CHECK-NEXT: %229 = llvm.inttoptr %204 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %206, %229 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %230 = arith.addi %87, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %231 = arith.addi %89, %c128_i256 : i256 loc(#loc4) -// CHECK-NEXT: %232 = llvm.inttoptr %230 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %233 = llvm.load %232 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %234 = "llvm.intrcall"(%c23_i256, %233) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %235 = arith.cmpi ne, %233, %234 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %235, ^bb59, ^bb60 loc(#loc4) +// CHECK-NEXT: %229 = llvm.inttoptr %204 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %206, %229 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %230 = arith.addi %87, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %231 = arith.addi %89, %c128_i256 : i256 loc(#loc8) +// CHECK-NEXT: %232 = llvm.inttoptr %230 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %233 = llvm.load %232 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %234 = "llvm.intrcall"(%c23_i256, %233) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %235 = arith.cmpi ne, %233, %234 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %235, ^bb59, ^bb60 loc(#loc8) // CHECK-NEXT: ^bb59: // pred: ^bb58 -// CHECK-NEXT: %236 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%236, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb60 loc(#loc4) +// CHECK-NEXT: %236 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%236, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb60 loc(#loc8) // CHECK-NEXT: ^bb60: // 2 preds: ^bb58, ^bb59 -// CHECK-NEXT: %237 = llvm.inttoptr %231 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %234, %237 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %238 = arith.addi %87, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %239 = arith.addi %89, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %240 = llvm.inttoptr %238 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %241 = llvm.load %240 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %242 = arith.andi %241, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %243 = arith.cmpi ne, %241, %242 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %243, ^bb61, ^bb62 loc(#loc4) +// CHECK-NEXT: %237 = llvm.inttoptr %231 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %234, %237 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %238 = arith.addi %87, %c192_i256 : i256 loc(#loc8) +// CHECK-NEXT: %239 = arith.addi %89, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %240 = llvm.inttoptr %238 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %241 = llvm.load %240 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %242 = arith.andi %241, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %243 = arith.cmpi ne, %241, %242 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %243, ^bb61, ^bb62 loc(#loc8) // CHECK-NEXT: ^bb61: // pred: ^bb60 -// CHECK-NEXT: %244 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%244, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb62 loc(#loc4) +// CHECK-NEXT: %244 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%244, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb62 loc(#loc8) // CHECK-NEXT: ^bb62: // 2 preds: ^bb60, ^bb61 -// CHECK-NEXT: %245 = llvm.inttoptr %239 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %242, %245 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %246 = arith.addi %87, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %247 = arith.addi %89, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %248 = llvm.inttoptr %246 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %249 = llvm.load %248 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %250 = arith.andi %249, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc4) -// CHECK-NEXT: %251 = arith.cmpi ne, %249, %250 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %251, ^bb63, ^bb64 loc(#loc4) +// CHECK-NEXT: %245 = llvm.inttoptr %239 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %242, %245 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %246 = arith.addi %87, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %247 = arith.addi %89, %c192_i256 : i256 loc(#loc8) +// CHECK-NEXT: %248 = llvm.inttoptr %246 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %249 = llvm.load %248 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %250 = arith.andi %249, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc8) +// CHECK-NEXT: %251 = arith.cmpi ne, %249, %250 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %251, ^bb63, ^bb64 loc(#loc8) // CHECK-NEXT: ^bb63: // pred: ^bb62 -// CHECK-NEXT: %252 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%252, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb64 loc(#loc4) +// CHECK-NEXT: %252 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%252, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb64 loc(#loc8) // CHECK-NEXT: ^bb64: // 2 preds: ^bb62, ^bb63 -// CHECK-NEXT: %253 = llvm.inttoptr %247 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %250, %253 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %254 = llvm.inttoptr %79 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %89, %254 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %255 = arith.addi %75, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb18(%255 : i256) loc(#loc4) +// CHECK-NEXT: %253 = llvm.inttoptr %247 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %250, %253 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %254 = llvm.inttoptr %79 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %89, %254 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %255 = arith.addi %75, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb18(%255 : i256) loc(#loc8) // CHECK-NEXT: ^bb65: // pred: ^bb18 -// CHECK-NEXT: %256 = llvm.inttoptr %54 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %64, %256 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %257 = arith.addi %1, %c320_i256 : i256 loc(#loc4) -// CHECK-NEXT: %258 = arith.addi %3, %c128_i256 : i256 loc(#loc4) -// CHECK-NEXT: %259 = llvm.inttoptr %257 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %260 = llvm.load %259 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %261 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %262 = arith.subi %261, %1 : i256 loc(#loc4) -// CHECK-NEXT: %263 = arith.subi %262, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %264 = arith.cmpi sge, %260, %263 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %264, ^bb66, ^bb67 loc(#loc4) +// CHECK-NEXT: %256 = llvm.inttoptr %54 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %64, %256 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %257 = arith.addi %1, %c320_i256 : i256 loc(#loc8) +// CHECK-NEXT: %258 = arith.addi %3, %c128_i256 : i256 loc(#loc8) +// CHECK-NEXT: %259 = llvm.inttoptr %257 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %260 = llvm.load %259 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %261 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %262 = arith.subi %261, %1 : i256 loc(#loc8) +// CHECK-NEXT: %263 = arith.subi %262, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %264 = arith.cmpi sge, %260, %263 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %264, ^bb66, ^bb67 loc(#loc8) // CHECK-NEXT: ^bb66: // pred: ^bb65 -// CHECK-NEXT: %265 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%265, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb67 loc(#loc4) +// CHECK-NEXT: %265 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%265, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb67 loc(#loc8) // CHECK-NEXT: ^bb67: // 2 preds: ^bb65, ^bb66 -// CHECK-NEXT: %266 = arith.addi %1, %260 : i256 loc(#loc4) -// CHECK-NEXT: %267 = llvm.inttoptr %266 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %268 = llvm.load %267 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %269 = arith.addi %266, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %270 = arith.cmpi ugt, %268, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %270, ^bb68, ^bb69 loc(#loc4) +// CHECK-NEXT: %266 = arith.addi %1, %260 : i256 loc(#loc8) +// CHECK-NEXT: %267 = llvm.inttoptr %266 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %268 = llvm.load %267 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %269 = arith.addi %266, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %270 = arith.cmpi ugt, %268, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %270, ^bb68, ^bb69 loc(#loc8) // CHECK-NEXT: ^bb68: // pred: ^bb67 -// CHECK-NEXT: %271 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%271, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb69 loc(#loc4) +// CHECK-NEXT: %271 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%271, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb69 loc(#loc8) // CHECK-NEXT: ^bb69: // 2 preds: ^bb67, ^bb68 -// CHECK-NEXT: %272 = arith.subi %261, %268 : i256 loc(#loc4) -// CHECK-NEXT: %273 = arith.cmpi sgt, %269, %272 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %273, ^bb70, ^bb71 loc(#loc4) +// CHECK-NEXT: %272 = arith.subi %261, %268 : i256 loc(#loc8) +// CHECK-NEXT: %273 = arith.cmpi sgt, %269, %272 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %273, ^bb70, ^bb71 loc(#loc8) // CHECK-NEXT: ^bb70: // pred: ^bb69 -// CHECK-NEXT: %274 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%274, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb71 loc(#loc4) +// CHECK-NEXT: %274 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%274, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb71 loc(#loc8) // CHECK-NEXT: ^bb71: // 2 preds: ^bb69, ^bb70 -// CHECK-NEXT: %275 = arith.addi %268, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %276 = arith.andi %275, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %277 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %278 = llvm.load %277 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %279 = arith.addi %276, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %280 = arith.andi %279, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %281 = arith.addi %278, %280 : i256 loc(#loc4) -// CHECK-NEXT: %282 = arith.cmpi ugt, %281, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %283 = arith.cmpi ult, %281, %278 : i256 loc(#loc4) -// CHECK-NEXT: %284 = arith.ori %282, %283 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %284, ^bb72, ^bb73 loc(#loc4) +// CHECK-NEXT: %275 = arith.addi %268, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %276 = arith.andi %275, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %277 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %278 = llvm.load %277 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %279 = arith.addi %276, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %280 = arith.andi %279, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %281 = arith.addi %278, %280 : i256 loc(#loc8) +// CHECK-NEXT: %282 = arith.cmpi ugt, %281, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %283 = arith.cmpi ult, %281, %278 : i256 loc(#loc8) +// CHECK-NEXT: %284 = arith.ori %282, %283 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %284, ^bb72, ^bb73 loc(#loc8) // CHECK-NEXT: ^bb72: // pred: ^bb71 -// CHECK-NEXT: %285 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %285 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %286 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %286 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %287 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%287, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb73 loc(#loc4) +// CHECK-NEXT: %285 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %285 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %286 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %286 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %287 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%287, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb73 loc(#loc8) // CHECK-NEXT: ^bb73: // 2 preds: ^bb71, ^bb72 -// CHECK-NEXT: %288 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %281, %288 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %289 = llvm.inttoptr %278 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %268, %289 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %290 = arith.addi %278, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %291 = llvm.inttoptr %290 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %292 = llvm.inttoptr %269 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memcpy"(%291, %292, %268) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc4) -// CHECK-NEXT: %293 = llvm.inttoptr %258 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %278, %293 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %294 = arith.addi %1, %c352_i256 : i256 loc(#loc4) -// CHECK-NEXT: %295 = arith.addi %3, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %296 = llvm.inttoptr %294 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %297 = llvm.load %296 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %298 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %299 = arith.subi %298, %1 : i256 loc(#loc4) -// CHECK-NEXT: %300 = arith.subi %299, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %301 = arith.cmpi sge, %297, %300 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %301, ^bb74, ^bb75 loc(#loc4) +// CHECK-NEXT: %288 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %281, %288 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %289 = llvm.inttoptr %278 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %268, %289 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %290 = arith.addi %278, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %291 = llvm.inttoptr %290 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %292 = llvm.inttoptr %269 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: "llvm.intr.memcpy"(%291, %292, %268) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc8) +// CHECK-NEXT: %293 = llvm.inttoptr %258 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %278, %293 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %294 = arith.addi %1, %c352_i256 : i256 loc(#loc8) +// CHECK-NEXT: %295 = arith.addi %3, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %296 = llvm.inttoptr %294 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %297 = llvm.load %296 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %298 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %299 = arith.subi %298, %1 : i256 loc(#loc8) +// CHECK-NEXT: %300 = arith.subi %299, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %301 = arith.cmpi sge, %297, %300 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %301, ^bb74, ^bb75 loc(#loc8) // CHECK-NEXT: ^bb74: // pred: ^bb73 -// CHECK-NEXT: %302 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%302, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb75 loc(#loc4) +// CHECK-NEXT: %302 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%302, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb75 loc(#loc8) // CHECK-NEXT: ^bb75: // 2 preds: ^bb73, ^bb74 -// CHECK-NEXT: %303 = arith.addi %1, %297 : i256 loc(#loc4) -// CHECK-NEXT: %304 = llvm.inttoptr %303 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %305 = llvm.load %304 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %306 = arith.addi %303, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %307 = arith.cmpi ugt, %305, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %307, ^bb76, ^bb77 loc(#loc4) +// CHECK-NEXT: %303 = arith.addi %1, %297 : i256 loc(#loc8) +// CHECK-NEXT: %304 = llvm.inttoptr %303 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %305 = llvm.load %304 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %306 = arith.addi %303, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %307 = arith.cmpi ugt, %305, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %307, ^bb76, ^bb77 loc(#loc8) // CHECK-NEXT: ^bb76: // pred: ^bb75 -// CHECK-NEXT: %308 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%308, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb77 loc(#loc4) +// CHECK-NEXT: %308 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%308, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb77 loc(#loc8) // CHECK-NEXT: ^bb77: // 2 preds: ^bb75, ^bb76 -// CHECK-NEXT: %309 = arith.muli %305, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %310 = arith.subi %298, %309 : i256 loc(#loc4) -// CHECK-NEXT: %311 = arith.cmpi sgt, %306, %310 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %311, ^bb78, ^bb79 loc(#loc4) +// CHECK-NEXT: %309 = arith.muli %305, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %310 = arith.subi %298, %309 : i256 loc(#loc8) +// CHECK-NEXT: %311 = arith.cmpi sgt, %306, %310 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %311, ^bb78, ^bb79 loc(#loc8) // CHECK-NEXT: ^bb78: // pred: ^bb77 -// CHECK-NEXT: %312 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%312, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb79 loc(#loc4) +// CHECK-NEXT: %312 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%312, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb79 loc(#loc8) // CHECK-NEXT: ^bb79: // 2 preds: ^bb77, ^bb78 -// CHECK-NEXT: %313 = arith.muli %305, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %314 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %315 = llvm.load %314 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %316 = arith.addi %313, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %317 = arith.andi %316, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %318 = arith.addi %315, %317 : i256 loc(#loc4) -// CHECK-NEXT: %319 = arith.cmpi ugt, %318, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %320 = arith.cmpi ult, %318, %315 : i256 loc(#loc4) -// CHECK-NEXT: %321 = arith.ori %319, %320 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %321, ^bb80, ^bb81 loc(#loc4) +// CHECK-NEXT: %313 = arith.muli %305, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %314 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %315 = llvm.load %314 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %316 = arith.addi %313, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %317 = arith.andi %316, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %318 = arith.addi %315, %317 : i256 loc(#loc8) +// CHECK-NEXT: %319 = arith.cmpi ugt, %318, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %320 = arith.cmpi ult, %318, %315 : i256 loc(#loc8) +// CHECK-NEXT: %321 = arith.ori %319, %320 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %321, ^bb80, ^bb81 loc(#loc8) // CHECK-NEXT: ^bb80: // pred: ^bb79 -// CHECK-NEXT: %322 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %322 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %323 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %323 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %324 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%324, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb81 loc(#loc4) +// CHECK-NEXT: %322 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %322 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %323 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %323 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %324 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%324, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb81 loc(#loc8) // CHECK-NEXT: ^bb81: // 2 preds: ^bb79, ^bb80 -// CHECK-NEXT: %325 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %318, %325 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %326 = llvm.inttoptr %315 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %305, %326 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %327 = arith.addi %315, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %328 = arith.muli %305, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %329 = llvm.inttoptr %327 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %330 = llvm.inttoptr %306 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memcpy"(%329, %330, %328) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc4) -// CHECK-NEXT: %331 = llvm.inttoptr %295 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %315, %331 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %332 = arith.addi %1, %c384_i256 : i256 loc(#loc4) -// CHECK-NEXT: %333 = arith.addi %3, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %334 = llvm.inttoptr %332 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %335 = llvm.load %334 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %336 = llvm.inttoptr %333 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %335, %336 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %337 = arith.addi %1, %c416_i256 : i256 loc(#loc4) -// CHECK-NEXT: %338 = arith.addi %3, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %339 = llvm.inttoptr %337 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %340 = llvm.load %339 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %341 = arith.andi %340, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc4) -// CHECK-NEXT: %342 = arith.cmpi ne, %340, %341 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %342, ^bb82, ^bb83 loc(#loc4) +// CHECK-NEXT: %325 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %318, %325 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %326 = llvm.inttoptr %315 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %305, %326 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %327 = arith.addi %315, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %328 = arith.muli %305, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %329 = llvm.inttoptr %327 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %330 = llvm.inttoptr %306 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: "llvm.intr.memcpy"(%329, %330, %328) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc8) +// CHECK-NEXT: %331 = llvm.inttoptr %295 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %315, %331 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %332 = arith.addi %1, %c384_i256 : i256 loc(#loc8) +// CHECK-NEXT: %333 = arith.addi %3, %c192_i256 : i256 loc(#loc8) +// CHECK-NEXT: %334 = llvm.inttoptr %332 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %335 = llvm.load %334 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %336 = llvm.inttoptr %333 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %335, %336 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %337 = arith.addi %1, %c416_i256 : i256 loc(#loc8) +// CHECK-NEXT: %338 = arith.addi %3, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %339 = llvm.inttoptr %337 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %340 = llvm.load %339 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %341 = arith.andi %340, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc8) +// CHECK-NEXT: %342 = arith.cmpi ne, %340, %341 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %342, ^bb82, ^bb83 loc(#loc8) // CHECK-NEXT: ^bb82: // pred: ^bb81 -// CHECK-NEXT: %343 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%343, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb83 loc(#loc4) +// CHECK-NEXT: %343 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%343, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb83 loc(#loc8) // CHECK-NEXT: ^bb83: // 2 preds: ^bb81, ^bb82 -// CHECK-NEXT: %344 = llvm.inttoptr %338 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %341, %344 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %345 = arith.addi %1, %c448_i256 : i256 loc(#loc4) -// CHECK-NEXT: %346 = arith.addi %3, %c256_i256 : i256 loc(#loc4) -// CHECK-NEXT: %347 = llvm.inttoptr %345 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %348 = llvm.load %347 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %349 = arith.cmpi ne, %348, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %350 = arith.extui %349 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %351 = arith.cmpi ne, %348, %350 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %351, ^bb84, ^bb85 loc(#loc4) +// CHECK-NEXT: %344 = llvm.inttoptr %338 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %341, %344 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %345 = arith.addi %1, %c448_i256 : i256 loc(#loc8) +// CHECK-NEXT: %346 = arith.addi %3, %c256_i256 : i256 loc(#loc8) +// CHECK-NEXT: %347 = llvm.inttoptr %345 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %348 = llvm.load %347 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %349 = arith.cmpi ne, %348, %c0_i256 : i256 loc(#loc8) +// CHECK-NEXT: %350 = arith.extui %349 : i1 to i256 loc(#loc8) +// CHECK-NEXT: %351 = arith.cmpi ne, %348, %350 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %351, ^bb84, ^bb85 loc(#loc8) // CHECK-NEXT: ^bb84: // pred: ^bb83 -// CHECK-NEXT: %352 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%352, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb85 loc(#loc4) +// CHECK-NEXT: %352 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%352, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb85 loc(#loc8) // CHECK-NEXT: ^bb85: // 2 preds: ^bb83, ^bb84 -// CHECK-NEXT: %353 = llvm.inttoptr %346 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %350, %353 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %354 = arith.addi %1, %c480_i256 : i256 loc(#loc4) -// CHECK-NEXT: %355 = arith.addi %3, %c288_i256 : i256 loc(#loc4) -// CHECK-NEXT: %356 = llvm.inttoptr %354 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %357 = llvm.load %356 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %358 = arith.cmpi ugt, %357, %c3_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %358, ^bb86, ^bb87 loc(#loc4) +// CHECK-NEXT: %353 = llvm.inttoptr %346 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %350, %353 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %354 = arith.addi %1, %c480_i256 : i256 loc(#loc8) +// CHECK-NEXT: %355 = arith.addi %3, %c288_i256 : i256 loc(#loc8) +// CHECK-NEXT: %356 = llvm.inttoptr %354 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %357 = llvm.load %356 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %358 = arith.cmpi ugt, %357, %c3_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %358, ^bb86, ^bb87 loc(#loc8) // CHECK-NEXT: ^bb86: // pred: ^bb85 -// CHECK-NEXT: %359 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%359, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb87 loc(#loc4) +// CHECK-NEXT: %359 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%359, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb87 loc(#loc8) // CHECK-NEXT: ^bb87: // 2 preds: ^bb85, ^bb86 -// CHECK-NEXT: %360 = llvm.inttoptr %355 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %357, %360 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %361 = arith.addi %1, %c512_i256 : i256 loc(#loc4) -// CHECK-NEXT: %362 = arith.addi %3, %c320_i256 : i256 loc(#loc4) -// CHECK-NEXT: %363 = llvm.inttoptr %361 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %364 = llvm.load %363 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %365 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %366 = arith.subi %365, %1 : i256 loc(#loc4) -// CHECK-NEXT: %367 = arith.subi %366, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %368 = arith.cmpi sge, %364, %367 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %368, ^bb88, ^bb89 loc(#loc4) +// CHECK-NEXT: %360 = llvm.inttoptr %355 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %357, %360 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %361 = arith.addi %1, %c512_i256 : i256 loc(#loc8) +// CHECK-NEXT: %362 = arith.addi %3, %c320_i256 : i256 loc(#loc8) +// CHECK-NEXT: %363 = llvm.inttoptr %361 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %364 = llvm.load %363 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %365 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %366 = arith.subi %365, %1 : i256 loc(#loc8) +// CHECK-NEXT: %367 = arith.subi %366, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %368 = arith.cmpi sge, %364, %367 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %368, ^bb88, ^bb89 loc(#loc8) // CHECK-NEXT: ^bb88: // pred: ^bb87 -// CHECK-NEXT: %369 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%369, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb89 loc(#loc4) +// CHECK-NEXT: %369 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%369, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb89 loc(#loc8) // CHECK-NEXT: ^bb89: // 2 preds: ^bb87, ^bb88 -// CHECK-NEXT: %370 = arith.addi %1, %364 : i256 loc(#loc4) -// CHECK-NEXT: %371 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %372 = llvm.load %371 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %373 = arith.addi %372, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %374 = arith.cmpi ugt, %373, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %375 = arith.cmpi ult, %373, %372 : i256 loc(#loc4) -// CHECK-NEXT: %376 = arith.ori %374, %375 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %376, ^bb90, ^bb91 loc(#loc4) +// CHECK-NEXT: %370 = arith.addi %1, %364 : i256 loc(#loc8) +// CHECK-NEXT: %371 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %372 = llvm.load %371 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %373 = arith.addi %372, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %374 = arith.cmpi ugt, %373, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %375 = arith.cmpi ult, %373, %372 : i256 loc(#loc8) +// CHECK-NEXT: %376 = arith.ori %374, %375 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %376, ^bb90, ^bb91 loc(#loc8) // CHECK-NEXT: ^bb90: // pred: ^bb89 -// CHECK-NEXT: %377 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %377 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %378 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %378 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %379 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%379, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb91 loc(#loc4) +// CHECK-NEXT: %377 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %377 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %378 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %378 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %379 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%379, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb91 loc(#loc8) // CHECK-NEXT: ^bb91: // 2 preds: ^bb89, ^bb90 -// CHECK-NEXT: %380 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %373, %380 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %381 = llvm.inttoptr %370 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %382 = llvm.load %381 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %383 = "llvm.intrcall"(%c8_i256, %382) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %384 = arith.cmpi ne, %382, %383 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %384, ^bb92, ^bb93 loc(#loc4) +// CHECK-NEXT: %380 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %373, %380 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %381 = llvm.inttoptr %370 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %382 = llvm.load %381 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %383 = "llvm.intrcall"(%c8_i256, %382) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %384 = arith.cmpi ne, %382, %383 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %384, ^bb92, ^bb93 loc(#loc8) // CHECK-NEXT: ^bb92: // pred: ^bb91 -// CHECK-NEXT: %385 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%385, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb93 loc(#loc4) +// CHECK-NEXT: %385 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%385, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb93 loc(#loc8) // CHECK-NEXT: ^bb93: // 2 preds: ^bb91, ^bb92 -// CHECK-NEXT: %386 = llvm.inttoptr %372 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %383, %386 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %387 = arith.addi %370, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %388 = arith.addi %372, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %389 = llvm.inttoptr %387 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %390 = llvm.load %389 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %391 = arith.andi %390, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %392 = arith.cmpi ne, %390, %391 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %392, ^bb94, ^bb95 loc(#loc4) +// CHECK-NEXT: %386 = llvm.inttoptr %372 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %383, %386 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %387 = arith.addi %370, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %388 = arith.addi %372, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %389 = llvm.inttoptr %387 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %390 = llvm.load %389 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %391 = arith.andi %390, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %392 = arith.cmpi ne, %390, %391 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %392, ^bb94, ^bb95 loc(#loc8) // CHECK-NEXT: ^bb94: // pred: ^bb93 -// CHECK-NEXT: %393 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%393, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb95 loc(#loc4) +// CHECK-NEXT: %393 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%393, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb95 loc(#loc8) // CHECK-NEXT: ^bb95: // 2 preds: ^bb93, ^bb94 -// CHECK-NEXT: %394 = llvm.inttoptr %388 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %391, %394 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %395 = arith.addi %370, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %396 = arith.addi %372, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %397 = llvm.inttoptr %395 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %398 = llvm.load %397 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %399 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %400 = arith.subi %399, %370 : i256 loc(#loc4) -// CHECK-NEXT: %401 = arith.subi %400, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %402 = arith.cmpi sge, %398, %401 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %402, ^bb96, ^bb97 loc(#loc4) +// CHECK-NEXT: %394 = llvm.inttoptr %388 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %391, %394 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %395 = arith.addi %370, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %396 = arith.addi %372, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %397 = llvm.inttoptr %395 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %398 = llvm.load %397 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %399 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %400 = arith.subi %399, %370 : i256 loc(#loc8) +// CHECK-NEXT: %401 = arith.subi %400, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %402 = arith.cmpi sge, %398, %401 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %402, ^bb96, ^bb97 loc(#loc8) // CHECK-NEXT: ^bb96: // pred: ^bb95 -// CHECK-NEXT: %403 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%403, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb97 loc(#loc4) +// CHECK-NEXT: %403 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%403, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb97 loc(#loc8) // CHECK-NEXT: ^bb97: // 2 preds: ^bb95, ^bb96 -// CHECK-NEXT: %404 = arith.addi %370, %398 : i256 loc(#loc4) -// CHECK-NEXT: %405 = llvm.inttoptr %404 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %406 = llvm.load %405 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %407 = arith.addi %404, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %408 = arith.cmpi ugt, %406, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %408, ^bb98, ^bb99 loc(#loc4) +// CHECK-NEXT: %404 = arith.addi %370, %398 : i256 loc(#loc8) +// CHECK-NEXT: %405 = llvm.inttoptr %404 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %406 = llvm.load %405 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %407 = arith.addi %404, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %408 = arith.cmpi ugt, %406, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %408, ^bb98, ^bb99 loc(#loc8) // CHECK-NEXT: ^bb98: // pred: ^bb97 -// CHECK-NEXT: %409 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%409, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb99 loc(#loc4) +// CHECK-NEXT: %409 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%409, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb99 loc(#loc8) // CHECK-NEXT: ^bb99: // 2 preds: ^bb97, ^bb98 -// CHECK-NEXT: %410 = arith.muli %406, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %411 = arith.subi %399, %410 : i256 loc(#loc4) -// CHECK-NEXT: %412 = arith.cmpi sgt, %407, %411 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %412, ^bb100, ^bb101 loc(#loc4) +// CHECK-NEXT: %410 = arith.muli %406, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %411 = arith.subi %399, %410 : i256 loc(#loc8) +// CHECK-NEXT: %412 = arith.cmpi sgt, %407, %411 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %412, ^bb100, ^bb101 loc(#loc8) // CHECK-NEXT: ^bb100: // pred: ^bb99 -// CHECK-NEXT: %413 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%413, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb101 loc(#loc4) +// CHECK-NEXT: %413 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%413, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb101 loc(#loc8) // CHECK-NEXT: ^bb101: // 2 preds: ^bb99, ^bb100 -// CHECK-NEXT: %414 = arith.muli %406, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %415 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %416 = llvm.load %415 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %417 = arith.addi %414, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %418 = arith.andi %417, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %419 = arith.addi %416, %418 : i256 loc(#loc4) -// CHECK-NEXT: %420 = arith.cmpi ugt, %419, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %421 = arith.cmpi ult, %419, %416 : i256 loc(#loc4) -// CHECK-NEXT: %422 = arith.ori %420, %421 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %422, ^bb102, ^bb103 loc(#loc4) +// CHECK-NEXT: %414 = arith.muli %406, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %415 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %416 = llvm.load %415 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %417 = arith.addi %414, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %418 = arith.andi %417, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %419 = arith.addi %416, %418 : i256 loc(#loc8) +// CHECK-NEXT: %420 = arith.cmpi ugt, %419, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %421 = arith.cmpi ult, %419, %416 : i256 loc(#loc8) +// CHECK-NEXT: %422 = arith.ori %420, %421 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %422, ^bb102, ^bb103 loc(#loc8) // CHECK-NEXT: ^bb102: // pred: ^bb101 -// CHECK-NEXT: %423 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %423 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %424 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %424 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %425 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%425, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb103 loc(#loc4) +// CHECK-NEXT: %423 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %423 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %424 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %424 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %425 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%425, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb103 loc(#loc8) // CHECK-NEXT: ^bb103: // 2 preds: ^bb101, ^bb102 -// CHECK-NEXT: %426 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %419, %426 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %427 = llvm.inttoptr %416 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %406, %427 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %428 = arith.addi %416, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb104(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %426 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %419, %426 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %427 = llvm.inttoptr %416 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %406, %427 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %428 = arith.addi %416, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb104(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb104(%429: i256 loc({{.*}}:67:11)): // 2 preds: ^bb103, ^bb118 -// CHECK-NEXT: %430 = arith.cmpi ult, %429, %406 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %430, ^bb105(%429 : i256), ^bb119 loc(#loc4) +// CHECK-NEXT: %430 = arith.cmpi ult, %429, %406 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %430, ^bb105(%429 : i256), ^bb119 loc(#loc8) // CHECK-NEXT: ^bb105(%431: i256 loc({{.*}}:67:11)): // pred: ^bb104 -// CHECK-NEXT: %432 = arith.muli %431, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %433 = arith.addi %407, %432 : i256 loc(#loc4) -// CHECK-NEXT: %434 = arith.muli %431, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %435 = arith.addi %428, %434 : i256 loc(#loc4) -// CHECK-NEXT: %436 = llvm.inttoptr %433 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %437 = llvm.load %436 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %438 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %439 = arith.subi %438, %407 : i256 loc(#loc4) -// CHECK-NEXT: %440 = arith.subi %439, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %441 = arith.cmpi sge, %437, %440 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %441, ^bb106, ^bb107 loc(#loc4) +// CHECK-NEXT: %432 = arith.muli %431, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %433 = arith.addi %407, %432 : i256 loc(#loc8) +// CHECK-NEXT: %434 = arith.muli %431, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %435 = arith.addi %428, %434 : i256 loc(#loc8) +// CHECK-NEXT: %436 = llvm.inttoptr %433 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %437 = llvm.load %436 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %438 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %439 = arith.subi %438, %407 : i256 loc(#loc8) +// CHECK-NEXT: %440 = arith.subi %439, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %441 = arith.cmpi sge, %437, %440 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %441, ^bb106, ^bb107 loc(#loc8) // CHECK-NEXT: ^bb106: // pred: ^bb105 -// CHECK-NEXT: %442 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%442, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb107 loc(#loc4) +// CHECK-NEXT: %442 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%442, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb107 loc(#loc8) // CHECK-NEXT: ^bb107: // 2 preds: ^bb105, ^bb106 -// CHECK-NEXT: %443 = arith.addi %407, %437 : i256 loc(#loc4) -// CHECK-NEXT: %444 = llvm.inttoptr %443 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %445 = llvm.load %444 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %446 = arith.addi %443, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %447 = arith.cmpi ugt, %445, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %447, ^bb108, ^bb109 loc(#loc4) +// CHECK-NEXT: %443 = arith.addi %407, %437 : i256 loc(#loc8) +// CHECK-NEXT: %444 = llvm.inttoptr %443 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %445 = llvm.load %444 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %446 = arith.addi %443, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %447 = arith.cmpi ugt, %445, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %447, ^bb108, ^bb109 loc(#loc8) // CHECK-NEXT: ^bb108: // pred: ^bb107 -// CHECK-NEXT: %448 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%448, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb109 loc(#loc4) +// CHECK-NEXT: %448 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%448, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb109 loc(#loc8) // CHECK-NEXT: ^bb109: // 2 preds: ^bb107, ^bb108 -// CHECK-NEXT: %449 = arith.muli %445, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %450 = arith.subi %438, %449 : i256 loc(#loc4) -// CHECK-NEXT: %451 = arith.cmpi sgt, %446, %450 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %451, ^bb110, ^bb111 loc(#loc4) +// CHECK-NEXT: %449 = arith.muli %445, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %450 = arith.subi %438, %449 : i256 loc(#loc8) +// CHECK-NEXT: %451 = arith.cmpi sgt, %446, %450 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %451, ^bb110, ^bb111 loc(#loc8) // CHECK-NEXT: ^bb110: // pred: ^bb109 -// CHECK-NEXT: %452 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%452, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb111 loc(#loc4) +// CHECK-NEXT: %452 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%452, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb111 loc(#loc8) // CHECK-NEXT: ^bb111: // 2 preds: ^bb109, ^bb110 -// CHECK-NEXT: %453 = arith.muli %445, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %454 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %455 = llvm.load %454 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %456 = arith.addi %453, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %457 = arith.andi %456, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %458 = arith.addi %455, %457 : i256 loc(#loc4) -// CHECK-NEXT: %459 = arith.cmpi ugt, %458, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %460 = arith.cmpi ult, %458, %455 : i256 loc(#loc4) -// CHECK-NEXT: %461 = arith.ori %459, %460 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %461, ^bb112, ^bb113 loc(#loc4) +// CHECK-NEXT: %453 = arith.muli %445, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %454 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %455 = llvm.load %454 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %456 = arith.addi %453, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %457 = arith.andi %456, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %458 = arith.addi %455, %457 : i256 loc(#loc8) +// CHECK-NEXT: %459 = arith.cmpi ugt, %458, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %460 = arith.cmpi ult, %458, %455 : i256 loc(#loc8) +// CHECK-NEXT: %461 = arith.ori %459, %460 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %461, ^bb112, ^bb113 loc(#loc8) // CHECK-NEXT: ^bb112: // pred: ^bb111 -// CHECK-NEXT: %462 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %462 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %463 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %463 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %464 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%464, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb113 loc(#loc4) +// CHECK-NEXT: %462 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %462 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %463 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %463 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %464 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%464, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb113 loc(#loc8) // CHECK-NEXT: ^bb113: // 2 preds: ^bb111, ^bb112 -// CHECK-NEXT: %465 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %458, %465 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %466 = llvm.inttoptr %455 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %445, %466 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %467 = arith.addi %455, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb114(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %465 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %458, %465 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %466 = llvm.inttoptr %455 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %445, %466 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %467 = arith.addi %455, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb114(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb114(%468: i256 loc({{.*}}:67:11)): // 2 preds: ^bb113, ^bb117 -// CHECK-NEXT: %469 = arith.cmpi ult, %468, %445 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %469, ^bb115(%468 : i256), ^bb118 loc(#loc4) +// CHECK-NEXT: %469 = arith.cmpi ult, %468, %445 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %469, ^bb115(%468 : i256), ^bb118 loc(#loc8) // CHECK-NEXT: ^bb115(%470: i256 loc({{.*}}:67:11)): // pred: ^bb114 -// CHECK-NEXT: %471 = arith.muli %470, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %472 = arith.addi %446, %471 : i256 loc(#loc4) -// CHECK-NEXT: %473 = arith.muli %470, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %474 = arith.addi %467, %473 : i256 loc(#loc4) -// CHECK-NEXT: %475 = llvm.inttoptr %472 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %476 = llvm.load %475 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %477 = arith.cmpi ne, %476, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %478 = arith.extui %477 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %479 = arith.cmpi ne, %476, %478 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %479, ^bb116, ^bb117 loc(#loc4) +// CHECK-NEXT: %471 = arith.muli %470, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %472 = arith.addi %446, %471 : i256 loc(#loc8) +// CHECK-NEXT: %473 = arith.muli %470, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %474 = arith.addi %467, %473 : i256 loc(#loc8) +// CHECK-NEXT: %475 = llvm.inttoptr %472 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %476 = llvm.load %475 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %477 = arith.cmpi ne, %476, %c0_i256 : i256 loc(#loc8) +// CHECK-NEXT: %478 = arith.extui %477 : i1 to i256 loc(#loc8) +// CHECK-NEXT: %479 = arith.cmpi ne, %476, %478 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %479, ^bb116, ^bb117 loc(#loc8) // CHECK-NEXT: ^bb116: // pred: ^bb115 -// CHECK-NEXT: %480 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%480, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb117 loc(#loc4) +// CHECK-NEXT: %480 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%480, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb117 loc(#loc8) // CHECK-NEXT: ^bb117: // 2 preds: ^bb115, ^bb116 -// CHECK-NEXT: %481 = llvm.inttoptr %474 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %478, %481 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %482 = arith.addi %470, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb114(%482 : i256) loc(#loc4) +// CHECK-NEXT: %481 = llvm.inttoptr %474 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %478, %481 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %482 = arith.addi %470, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb114(%482 : i256) loc(#loc8) // CHECK-NEXT: ^bb118: // pred: ^bb114 -// CHECK-NEXT: %483 = llvm.inttoptr %435 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %455, %483 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %484 = arith.addi %431, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb104(%484 : i256) loc(#loc4) +// CHECK-NEXT: %483 = llvm.inttoptr %435 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %455, %483 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %484 = arith.addi %431, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb104(%484 : i256) loc(#loc8) // CHECK-NEXT: ^bb119: // pred: ^bb104 -// CHECK-NEXT: %485 = llvm.inttoptr %396 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %416, %485 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %486 = arith.addi %370, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %487 = arith.addi %372, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %488 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %489 = llvm.load %488 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %490 = arith.addi %489, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %491 = arith.cmpi ugt, %490, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %492 = arith.cmpi ult, %490, %489 : i256 loc(#loc4) -// CHECK-NEXT: %493 = arith.ori %491, %492 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %493, ^bb120, ^bb121 loc(#loc4) +// CHECK-NEXT: %485 = llvm.inttoptr %396 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %416, %485 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %486 = arith.addi %370, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %487 = arith.addi %372, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %488 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %489 = llvm.load %488 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %490 = arith.addi %489, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %491 = arith.cmpi ugt, %490, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %492 = arith.cmpi ult, %490, %489 : i256 loc(#loc8) +// CHECK-NEXT: %493 = arith.ori %491, %492 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %493, ^bb120, ^bb121 loc(#loc8) // CHECK-NEXT: ^bb120: // pred: ^bb119 -// CHECK-NEXT: %494 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %494 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %495 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %495 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %496 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%496, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb121 loc(#loc4) +// CHECK-NEXT: %494 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %494 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %495 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %495 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %496 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%496, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb121 loc(#loc8) // CHECK-NEXT: ^bb121: // 2 preds: ^bb119, ^bb120 -// CHECK-NEXT: %497 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %490, %497 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb122(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %497 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %490, %497 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb122(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb122(%498: i256 loc({{.*}}:67:11)): // 2 preds: ^bb121, ^bb125 -// CHECK-NEXT: %499 = arith.cmpi ult, %498, %c2_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %499, ^bb123(%498 : i256), ^bb126 loc(#loc4) +// CHECK-NEXT: %499 = arith.cmpi ult, %498, %c2_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %499, ^bb123(%498 : i256), ^bb126 loc(#loc8) // CHECK-NEXT: ^bb123(%500: i256 loc({{.*}}:67:11)): // pred: ^bb122 -// CHECK-NEXT: %501 = arith.muli %500, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %502 = arith.addi %486, %501 : i256 loc(#loc4) -// CHECK-NEXT: %503 = arith.muli %500, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %504 = arith.addi %489, %503 : i256 loc(#loc4) -// CHECK-NEXT: %505 = llvm.inttoptr %502 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %506 = llvm.load %505 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %507 = arith.andi %506, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) -// CHECK-NEXT: %508 = arith.cmpi ne, %506, %507 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %508, ^bb124, ^bb125 loc(#loc4) +// CHECK-NEXT: %501 = arith.muli %500, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %502 = arith.addi %486, %501 : i256 loc(#loc8) +// CHECK-NEXT: %503 = arith.muli %500, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %504 = arith.addi %489, %503 : i256 loc(#loc8) +// CHECK-NEXT: %505 = llvm.inttoptr %502 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %506 = llvm.load %505 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %507 = arith.andi %506, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc8) +// CHECK-NEXT: %508 = arith.cmpi ne, %506, %507 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %508, ^bb124, ^bb125 loc(#loc8) // CHECK-NEXT: ^bb124: // pred: ^bb123 -// CHECK-NEXT: %509 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%509, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb125 loc(#loc4) +// CHECK-NEXT: %509 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%509, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb125 loc(#loc8) // CHECK-NEXT: ^bb125: // 2 preds: ^bb123, ^bb124 -// CHECK-NEXT: %510 = llvm.inttoptr %504 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %507, %510 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %511 = arith.addi %500, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb122(%511 : i256) loc(#loc4) +// CHECK-NEXT: %510 = llvm.inttoptr %504 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %507, %510 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %511 = arith.addi %500, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb122(%511 : i256) loc(#loc8) // CHECK-NEXT: ^bb126: // pred: ^bb122 -// CHECK-NEXT: %512 = llvm.inttoptr %487 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %489, %512 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %513 = arith.addi %370, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %514 = arith.addi %372, %c128_i256 : i256 loc(#loc4) -// CHECK-NEXT: %515 = llvm.inttoptr %513 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %516 = llvm.load %515 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %517 = "llvm.intrcall"(%c23_i256, %516) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %518 = arith.cmpi ne, %516, %517 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %518, ^bb127, ^bb128 loc(#loc4) +// CHECK-NEXT: %512 = llvm.inttoptr %487 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %489, %512 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %513 = arith.addi %370, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %514 = arith.addi %372, %c128_i256 : i256 loc(#loc8) +// CHECK-NEXT: %515 = llvm.inttoptr %513 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %516 = llvm.load %515 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %517 = "llvm.intrcall"(%c23_i256, %516) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %518 = arith.cmpi ne, %516, %517 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %518, ^bb127, ^bb128 loc(#loc8) // CHECK-NEXT: ^bb127: // pred: ^bb126 -// CHECK-NEXT: %519 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%519, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb128 loc(#loc4) +// CHECK-NEXT: %519 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%519, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb128 loc(#loc8) // CHECK-NEXT: ^bb128: // 2 preds: ^bb126, ^bb127 -// CHECK-NEXT: %520 = llvm.inttoptr %514 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %517, %520 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %521 = arith.addi %370, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %522 = arith.addi %372, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %523 = llvm.inttoptr %521 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %524 = llvm.load %523 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %525 = arith.andi %524, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %526 = arith.cmpi ne, %524, %525 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %526, ^bb129, ^bb130 loc(#loc4) +// CHECK-NEXT: %520 = llvm.inttoptr %514 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %517, %520 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %521 = arith.addi %370, %c192_i256 : i256 loc(#loc8) +// CHECK-NEXT: %522 = arith.addi %372, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %523 = llvm.inttoptr %521 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %524 = llvm.load %523 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %525 = arith.andi %524, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %526 = arith.cmpi ne, %524, %525 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %526, ^bb129, ^bb130 loc(#loc8) // CHECK-NEXT: ^bb129: // pred: ^bb128 -// CHECK-NEXT: %527 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%527, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb130 loc(#loc4) +// CHECK-NEXT: %527 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%527, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb130 loc(#loc8) // CHECK-NEXT: ^bb130: // 2 preds: ^bb128, ^bb129 -// CHECK-NEXT: %528 = llvm.inttoptr %522 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %525, %528 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %529 = arith.addi %370, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %530 = arith.addi %372, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %531 = llvm.inttoptr %529 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %532 = llvm.load %531 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %533 = arith.andi %532, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc4) -// CHECK-NEXT: %534 = arith.cmpi ne, %532, %533 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %534, ^bb131, ^bb132 loc(#loc4) +// CHECK-NEXT: %528 = llvm.inttoptr %522 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %525, %528 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %529 = arith.addi %370, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %530 = arith.addi %372, %c192_i256 : i256 loc(#loc8) +// CHECK-NEXT: %531 = llvm.inttoptr %529 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %532 = llvm.load %531 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %533 = arith.andi %532, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc8) +// CHECK-NEXT: %534 = arith.cmpi ne, %532, %533 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %534, ^bb131, ^bb132 loc(#loc8) // CHECK-NEXT: ^bb131: // pred: ^bb130 -// CHECK-NEXT: %535 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%535, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb132 loc(#loc4) +// CHECK-NEXT: %535 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%535, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb132 loc(#loc8) // CHECK-NEXT: ^bb132: // 2 preds: ^bb130, ^bb131 -// CHECK-NEXT: %536 = llvm.inttoptr %530 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %533, %536 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %537 = llvm.inttoptr %362 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %372, %537 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %538 = arith.addi %1, %c544_i256 : i256 loc(#loc4) -// CHECK-NEXT: %539 = arith.addi %3, %c352_i256 : i256 loc(#loc4) -// CHECK-NEXT: %540 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %541 = llvm.load %540 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %542 = arith.addi %541, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %543 = arith.cmpi ugt, %542, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %544 = arith.cmpi ult, %542, %541 : i256 loc(#loc4) -// CHECK-NEXT: %545 = arith.ori %543, %544 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %545, ^bb133, ^bb134 loc(#loc4) +// CHECK-NEXT: %536 = llvm.inttoptr %530 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %533, %536 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %537 = llvm.inttoptr %362 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %372, %537 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %538 = arith.addi %1, %c544_i256 : i256 loc(#loc8) +// CHECK-NEXT: %539 = arith.addi %3, %c352_i256 : i256 loc(#loc8) +// CHECK-NEXT: %540 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %541 = llvm.load %540 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %542 = arith.addi %541, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %543 = arith.cmpi ugt, %542, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %544 = arith.cmpi ult, %542, %541 : i256 loc(#loc8) +// CHECK-NEXT: %545 = arith.ori %543, %544 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %545, ^bb133, ^bb134 loc(#loc8) // CHECK-NEXT: ^bb133: // pred: ^bb132 -// CHECK-NEXT: %546 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %546 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %547 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %547 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %548 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%548, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb134 loc(#loc4) +// CHECK-NEXT: %546 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %546 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %547 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %547 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %548 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%548, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb134 loc(#loc8) // CHECK-NEXT: ^bb134: // 2 preds: ^bb132, ^bb133 -// CHECK-NEXT: %549 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %542, %549 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb135(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %549 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %542, %549 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb135(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb135(%550: i256 loc({{.*}}:67:11)): // 2 preds: ^bb134, ^bb138 -// CHECK-NEXT: %551 = arith.cmpi ult, %550, %c2_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %551, ^bb136(%550 : i256), ^bb139 loc(#loc4) +// CHECK-NEXT: %551 = arith.cmpi ult, %550, %c2_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %551, ^bb136(%550 : i256), ^bb139 loc(#loc8) // CHECK-NEXT: ^bb136(%552: i256 loc({{.*}}:67:11)): // pred: ^bb135 -// CHECK-NEXT: %553 = arith.muli %552, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %554 = arith.addi %538, %553 : i256 loc(#loc4) -// CHECK-NEXT: %555 = arith.muli %552, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %556 = arith.addi %541, %555 : i256 loc(#loc4) -// CHECK-NEXT: %557 = llvm.inttoptr %554 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %558 = llvm.load %557 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %559 = arith.andi %558, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) -// CHECK-NEXT: %560 = arith.cmpi ne, %558, %559 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %560, ^bb137, ^bb138 loc(#loc4) +// CHECK-NEXT: %553 = arith.muli %552, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %554 = arith.addi %538, %553 : i256 loc(#loc8) +// CHECK-NEXT: %555 = arith.muli %552, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %556 = arith.addi %541, %555 : i256 loc(#loc8) +// CHECK-NEXT: %557 = llvm.inttoptr %554 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %558 = llvm.load %557 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %559 = arith.andi %558, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc8) +// CHECK-NEXT: %560 = arith.cmpi ne, %558, %559 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %560, ^bb137, ^bb138 loc(#loc8) // CHECK-NEXT: ^bb137: // pred: ^bb136 -// CHECK-NEXT: %561 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%561, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb138 loc(#loc4) +// CHECK-NEXT: %561 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%561, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb138 loc(#loc8) // CHECK-NEXT: ^bb138: // 2 preds: ^bb136, ^bb137 -// CHECK-NEXT: %562 = llvm.inttoptr %556 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %559, %562 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %563 = arith.addi %552, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb135(%563 : i256) loc(#loc4) +// CHECK-NEXT: %562 = llvm.inttoptr %556 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %559, %562 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %563 = arith.addi %552, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb135(%563 : i256) loc(#loc8) // CHECK-NEXT: ^bb139: // pred: ^bb135 -// CHECK-NEXT: %564 = llvm.inttoptr %539 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %541, %564 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %565 = arith.addi %1, %c608_i256 : i256 loc(#loc4) -// CHECK-NEXT: %566 = arith.addi %3, %c384_i256 : i256 loc(#loc4) -// CHECK-NEXT: %567 = llvm.inttoptr %565 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %568 = llvm.load %567 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %569 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %570 = arith.subi %569, %1 : i256 loc(#loc4) -// CHECK-NEXT: %571 = arith.subi %570, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %572 = arith.cmpi sge, %568, %571 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %572, ^bb140, ^bb141 loc(#loc4) +// CHECK-NEXT: %564 = llvm.inttoptr %539 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %541, %564 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %565 = arith.addi %1, %c608_i256 : i256 loc(#loc8) +// CHECK-NEXT: %566 = arith.addi %3, %c384_i256 : i256 loc(#loc8) +// CHECK-NEXT: %567 = llvm.inttoptr %565 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %568 = llvm.load %567 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %569 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %570 = arith.subi %569, %1 : i256 loc(#loc8) +// CHECK-NEXT: %571 = arith.subi %570, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %572 = arith.cmpi sge, %568, %571 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %572, ^bb140, ^bb141 loc(#loc8) // CHECK-NEXT: ^bb140: // pred: ^bb139 -// CHECK-NEXT: %573 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%573, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb141 loc(#loc4) +// CHECK-NEXT: %573 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%573, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb141 loc(#loc8) // CHECK-NEXT: ^bb141: // 2 preds: ^bb139, ^bb140 -// CHECK-NEXT: %574 = arith.addi %1, %568 : i256 loc(#loc4) -// CHECK-NEXT: %575 = llvm.inttoptr %574 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %576 = llvm.load %575 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %577 = arith.addi %574, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %578 = arith.cmpi ugt, %576, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %578, ^bb142, ^bb143 loc(#loc4) +// CHECK-NEXT: %574 = arith.addi %1, %568 : i256 loc(#loc8) +// CHECK-NEXT: %575 = llvm.inttoptr %574 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %576 = llvm.load %575 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %577 = arith.addi %574, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %578 = arith.cmpi ugt, %576, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %578, ^bb142, ^bb143 loc(#loc8) // CHECK-NEXT: ^bb142: // pred: ^bb141 -// CHECK-NEXT: %579 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%579, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb143 loc(#loc4) +// CHECK-NEXT: %579 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%579, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb143 loc(#loc8) // CHECK-NEXT: ^bb143: // 2 preds: ^bb141, ^bb142 -// CHECK-NEXT: %580 = arith.muli %576, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %581 = arith.subi %569, %580 : i256 loc(#loc4) -// CHECK-NEXT: %582 = arith.cmpi sgt, %577, %581 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %582, ^bb144, ^bb145 loc(#loc4) +// CHECK-NEXT: %580 = arith.muli %576, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %581 = arith.subi %569, %580 : i256 loc(#loc8) +// CHECK-NEXT: %582 = arith.cmpi sgt, %577, %581 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %582, ^bb144, ^bb145 loc(#loc8) // CHECK-NEXT: ^bb144: // pred: ^bb143 -// CHECK-NEXT: %583 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%583, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb145 loc(#loc4) +// CHECK-NEXT: %583 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%583, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb145 loc(#loc8) // CHECK-NEXT: ^bb145: // 2 preds: ^bb143, ^bb144 -// CHECK-NEXT: %584 = arith.muli %576, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %585 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %586 = llvm.load %585 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %587 = arith.addi %584, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %588 = arith.andi %587, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %589 = arith.addi %586, %588 : i256 loc(#loc4) -// CHECK-NEXT: %590 = arith.cmpi ugt, %589, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %591 = arith.cmpi ult, %589, %586 : i256 loc(#loc4) -// CHECK-NEXT: %592 = arith.ori %590, %591 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %592, ^bb146, ^bb147 loc(#loc4) +// CHECK-NEXT: %584 = arith.muli %576, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %585 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %586 = llvm.load %585 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %587 = arith.addi %584, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %588 = arith.andi %587, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %589 = arith.addi %586, %588 : i256 loc(#loc8) +// CHECK-NEXT: %590 = arith.cmpi ugt, %589, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %591 = arith.cmpi ult, %589, %586 : i256 loc(#loc8) +// CHECK-NEXT: %592 = arith.ori %590, %591 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %592, ^bb146, ^bb147 loc(#loc8) // CHECK-NEXT: ^bb146: // pred: ^bb145 -// CHECK-NEXT: %593 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %593 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %594 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %594 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %595 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%595, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb147 loc(#loc4) +// CHECK-NEXT: %593 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %593 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %594 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %594 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %595 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%595, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb147 loc(#loc8) // CHECK-NEXT: ^bb147: // 2 preds: ^bb145, ^bb146 -// CHECK-NEXT: %596 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %589, %596 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %597 = llvm.inttoptr %586 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %576, %597 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %598 = arith.addi %586, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb148(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %596 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %589, %596 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %597 = llvm.inttoptr %586 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %576, %597 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %598 = arith.addi %586, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb148(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb148(%599: i256 loc({{.*}}:67:11)): // 2 preds: ^bb147, ^bb205 -// CHECK-NEXT: %600 = arith.cmpi ult, %599, %576 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %600, ^bb149(%599 : i256), ^bb206 loc(#loc4) +// CHECK-NEXT: %600 = arith.cmpi ult, %599, %576 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %600, ^bb149(%599 : i256), ^bb206 loc(#loc8) // CHECK-NEXT: ^bb149(%601: i256 loc({{.*}}:67:11)): // pred: ^bb148 -// CHECK-NEXT: %602 = arith.muli %601, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %603 = arith.addi %577, %602 : i256 loc(#loc4) -// CHECK-NEXT: %604 = arith.muli %601, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %605 = arith.addi %598, %604 : i256 loc(#loc4) -// CHECK-NEXT: %606 = llvm.inttoptr %603 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %607 = llvm.load %606 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %608 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %609 = arith.subi %608, %577 : i256 loc(#loc4) -// CHECK-NEXT: %610 = arith.subi %609, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %611 = arith.cmpi sge, %607, %610 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %611, ^bb150, ^bb151 loc(#loc4) +// CHECK-NEXT: %602 = arith.muli %601, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %603 = arith.addi %577, %602 : i256 loc(#loc8) +// CHECK-NEXT: %604 = arith.muli %601, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %605 = arith.addi %598, %604 : i256 loc(#loc8) +// CHECK-NEXT: %606 = llvm.inttoptr %603 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %607 = llvm.load %606 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %608 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %609 = arith.subi %608, %577 : i256 loc(#loc8) +// CHECK-NEXT: %610 = arith.subi %609, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %611 = arith.cmpi sge, %607, %610 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %611, ^bb150, ^bb151 loc(#loc8) // CHECK-NEXT: ^bb150: // pred: ^bb149 -// CHECK-NEXT: %612 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%612, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb151 loc(#loc4) +// CHECK-NEXT: %612 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%612, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb151 loc(#loc8) // CHECK-NEXT: ^bb151: // 2 preds: ^bb149, ^bb150 -// CHECK-NEXT: %613 = arith.addi %577, %607 : i256 loc(#loc4) -// CHECK-NEXT: %614 = llvm.inttoptr %613 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %615 = llvm.load %614 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %616 = arith.addi %613, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %617 = arith.cmpi ugt, %615, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %617, ^bb152, ^bb153 loc(#loc4) +// CHECK-NEXT: %613 = arith.addi %577, %607 : i256 loc(#loc8) +// CHECK-NEXT: %614 = llvm.inttoptr %613 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %615 = llvm.load %614 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %616 = arith.addi %613, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %617 = arith.cmpi ugt, %615, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %617, ^bb152, ^bb153 loc(#loc8) // CHECK-NEXT: ^bb152: // pred: ^bb151 -// CHECK-NEXT: %618 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%618, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb153 loc(#loc4) +// CHECK-NEXT: %618 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%618, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb153 loc(#loc8) // CHECK-NEXT: ^bb153: // 2 preds: ^bb151, ^bb152 -// CHECK-NEXT: %619 = arith.muli %615, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %620 = arith.subi %608, %619 : i256 loc(#loc4) -// CHECK-NEXT: %621 = arith.cmpi sgt, %616, %620 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %621, ^bb154, ^bb155 loc(#loc4) +// CHECK-NEXT: %619 = arith.muli %615, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %620 = arith.subi %608, %619 : i256 loc(#loc8) +// CHECK-NEXT: %621 = arith.cmpi sgt, %616, %620 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %621, ^bb154, ^bb155 loc(#loc8) // CHECK-NEXT: ^bb154: // pred: ^bb153 -// CHECK-NEXT: %622 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%622, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb155 loc(#loc4) +// CHECK-NEXT: %622 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%622, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb155 loc(#loc8) // CHECK-NEXT: ^bb155: // 2 preds: ^bb153, ^bb154 -// CHECK-NEXT: %623 = arith.muli %615, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %624 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %625 = llvm.load %624 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %626 = arith.addi %623, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %627 = arith.andi %626, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %628 = arith.addi %625, %627 : i256 loc(#loc4) -// CHECK-NEXT: %629 = arith.cmpi ugt, %628, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %630 = arith.cmpi ult, %628, %625 : i256 loc(#loc4) -// CHECK-NEXT: %631 = arith.ori %629, %630 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %631, ^bb156, ^bb157 loc(#loc4) +// CHECK-NEXT: %623 = arith.muli %615, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %624 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %625 = llvm.load %624 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %626 = arith.addi %623, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %627 = arith.andi %626, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %628 = arith.addi %625, %627 : i256 loc(#loc8) +// CHECK-NEXT: %629 = arith.cmpi ugt, %628, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %630 = arith.cmpi ult, %628, %625 : i256 loc(#loc8) +// CHECK-NEXT: %631 = arith.ori %629, %630 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %631, ^bb156, ^bb157 loc(#loc8) // CHECK-NEXT: ^bb156: // pred: ^bb155 -// CHECK-NEXT: %632 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %632 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %633 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %633 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %634 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%634, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb157 loc(#loc4) +// CHECK-NEXT: %632 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %632 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %633 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %633 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %634 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%634, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb157 loc(#loc8) // CHECK-NEXT: ^bb157: // 2 preds: ^bb155, ^bb156 -// CHECK-NEXT: %635 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %628, %635 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %636 = llvm.inttoptr %625 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %615, %636 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %637 = arith.addi %625, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb158(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %635 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %628, %635 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %636 = llvm.inttoptr %625 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %615, %636 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %637 = arith.addi %625, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb158(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb158(%638: i256 loc({{.*}}:67:11)): // 2 preds: ^bb157, ^bb204 -// CHECK-NEXT: %639 = arith.cmpi ult, %638, %615 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %639, ^bb159(%638 : i256), ^bb205 loc(#loc4) +// CHECK-NEXT: %639 = arith.cmpi ult, %638, %615 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %639, ^bb159(%638 : i256), ^bb205 loc(#loc8) // CHECK-NEXT: ^bb159(%640: i256 loc({{.*}}:67:11)): // pred: ^bb158 -// CHECK-NEXT: %641 = arith.muli %640, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %642 = arith.addi %616, %641 : i256 loc(#loc4) -// CHECK-NEXT: %643 = arith.muli %640, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %644 = arith.addi %637, %643 : i256 loc(#loc4) -// CHECK-NEXT: %645 = llvm.inttoptr %642 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %646 = llvm.load %645 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %647 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %648 = arith.subi %647, %616 : i256 loc(#loc4) -// CHECK-NEXT: %649 = arith.subi %648, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %650 = arith.cmpi sge, %646, %649 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %650, ^bb160, ^bb161 loc(#loc4) +// CHECK-NEXT: %641 = arith.muli %640, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %642 = arith.addi %616, %641 : i256 loc(#loc8) +// CHECK-NEXT: %643 = arith.muli %640, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %644 = arith.addi %637, %643 : i256 loc(#loc8) +// CHECK-NEXT: %645 = llvm.inttoptr %642 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %646 = llvm.load %645 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %647 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %648 = arith.subi %647, %616 : i256 loc(#loc8) +// CHECK-NEXT: %649 = arith.subi %648, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %650 = arith.cmpi sge, %646, %649 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %650, ^bb160, ^bb161 loc(#loc8) // CHECK-NEXT: ^bb160: // pred: ^bb159 -// CHECK-NEXT: %651 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%651, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb161 loc(#loc4) +// CHECK-NEXT: %651 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%651, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb161 loc(#loc8) // CHECK-NEXT: ^bb161: // 2 preds: ^bb159, ^bb160 -// CHECK-NEXT: %652 = arith.addi %616, %646 : i256 loc(#loc4) -// CHECK-NEXT: %653 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %654 = llvm.load %653 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %655 = arith.addi %654, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %656 = arith.cmpi ugt, %655, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %657 = arith.cmpi ult, %655, %654 : i256 loc(#loc4) -// CHECK-NEXT: %658 = arith.ori %656, %657 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %658, ^bb162, ^bb163 loc(#loc4) +// CHECK-NEXT: %652 = arith.addi %616, %646 : i256 loc(#loc8) +// CHECK-NEXT: %653 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %654 = llvm.load %653 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %655 = arith.addi %654, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %656 = arith.cmpi ugt, %655, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %657 = arith.cmpi ult, %655, %654 : i256 loc(#loc8) +// CHECK-NEXT: %658 = arith.ori %656, %657 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %658, ^bb162, ^bb163 loc(#loc8) // CHECK-NEXT: ^bb162: // pred: ^bb161 -// CHECK-NEXT: %659 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %659 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %660 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %660 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %661 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%661, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb163 loc(#loc4) +// CHECK-NEXT: %659 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %659 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %660 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %660 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %661 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%661, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb163 loc(#loc8) // CHECK-NEXT: ^bb163: // 2 preds: ^bb161, ^bb162 -// CHECK-NEXT: %662 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %655, %662 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %663 = llvm.inttoptr %652 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %664 = llvm.load %663 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %665 = "llvm.intrcall"(%c8_i256, %664) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %666 = arith.cmpi ne, %664, %665 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %666, ^bb164, ^bb165 loc(#loc4) +// CHECK-NEXT: %662 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %655, %662 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %663 = llvm.inttoptr %652 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %664 = llvm.load %663 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %665 = "llvm.intrcall"(%c8_i256, %664) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %666 = arith.cmpi ne, %664, %665 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %666, ^bb164, ^bb165 loc(#loc8) // CHECK-NEXT: ^bb164: // pred: ^bb163 -// CHECK-NEXT: %667 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%667, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb165 loc(#loc4) +// CHECK-NEXT: %667 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%667, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb165 loc(#loc8) // CHECK-NEXT: ^bb165: // 2 preds: ^bb163, ^bb164 -// CHECK-NEXT: %668 = llvm.inttoptr %654 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %665, %668 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %669 = arith.addi %652, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %670 = arith.addi %654, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %671 = llvm.inttoptr %669 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %672 = llvm.load %671 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %673 = arith.andi %672, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %674 = arith.cmpi ne, %672, %673 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %674, ^bb166, ^bb167 loc(#loc4) +// CHECK-NEXT: %668 = llvm.inttoptr %654 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %665, %668 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %669 = arith.addi %652, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %670 = arith.addi %654, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %671 = llvm.inttoptr %669 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %672 = llvm.load %671 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %673 = arith.andi %672, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %674 = arith.cmpi ne, %672, %673 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %674, ^bb166, ^bb167 loc(#loc8) // CHECK-NEXT: ^bb166: // pred: ^bb165 -// CHECK-NEXT: %675 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%675, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb167 loc(#loc4) +// CHECK-NEXT: %675 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%675, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb167 loc(#loc8) // CHECK-NEXT: ^bb167: // 2 preds: ^bb165, ^bb166 -// CHECK-NEXT: %676 = llvm.inttoptr %670 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %673, %676 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %677 = arith.addi %652, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %678 = arith.addi %654, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %679 = llvm.inttoptr %677 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %680 = llvm.load %679 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %681 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %682 = arith.subi %681, %652 : i256 loc(#loc4) -// CHECK-NEXT: %683 = arith.subi %682, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %684 = arith.cmpi sge, %680, %683 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %684, ^bb168, ^bb169 loc(#loc4) +// CHECK-NEXT: %676 = llvm.inttoptr %670 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %673, %676 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %677 = arith.addi %652, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %678 = arith.addi %654, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %679 = llvm.inttoptr %677 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %680 = llvm.load %679 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %681 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %682 = arith.subi %681, %652 : i256 loc(#loc8) +// CHECK-NEXT: %683 = arith.subi %682, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %684 = arith.cmpi sge, %680, %683 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %684, ^bb168, ^bb169 loc(#loc8) // CHECK-NEXT: ^bb168: // pred: ^bb167 -// CHECK-NEXT: %685 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%685, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb169 loc(#loc4) +// CHECK-NEXT: %685 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%685, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb169 loc(#loc8) // CHECK-NEXT: ^bb169: // 2 preds: ^bb167, ^bb168 -// CHECK-NEXT: %686 = arith.addi %652, %680 : i256 loc(#loc4) -// CHECK-NEXT: %687 = llvm.inttoptr %686 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %688 = llvm.load %687 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %689 = arith.addi %686, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %690 = arith.cmpi ugt, %688, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %690, ^bb170, ^bb171 loc(#loc4) +// CHECK-NEXT: %686 = arith.addi %652, %680 : i256 loc(#loc8) +// CHECK-NEXT: %687 = llvm.inttoptr %686 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %688 = llvm.load %687 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %689 = arith.addi %686, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %690 = arith.cmpi ugt, %688, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %690, ^bb170, ^bb171 loc(#loc8) // CHECK-NEXT: ^bb170: // pred: ^bb169 -// CHECK-NEXT: %691 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%691, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb171 loc(#loc4) +// CHECK-NEXT: %691 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%691, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb171 loc(#loc8) // CHECK-NEXT: ^bb171: // 2 preds: ^bb169, ^bb170 -// CHECK-NEXT: %692 = arith.muli %688, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %693 = arith.subi %681, %692 : i256 loc(#loc4) -// CHECK-NEXT: %694 = arith.cmpi sgt, %689, %693 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %694, ^bb172, ^bb173 loc(#loc4) +// CHECK-NEXT: %692 = arith.muli %688, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %693 = arith.subi %681, %692 : i256 loc(#loc8) +// CHECK-NEXT: %694 = arith.cmpi sgt, %689, %693 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %694, ^bb172, ^bb173 loc(#loc8) // CHECK-NEXT: ^bb172: // pred: ^bb171 -// CHECK-NEXT: %695 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%695, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb173 loc(#loc4) +// CHECK-NEXT: %695 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%695, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb173 loc(#loc8) // CHECK-NEXT: ^bb173: // 2 preds: ^bb171, ^bb172 -// CHECK-NEXT: %696 = arith.muli %688, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %697 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %698 = llvm.load %697 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %699 = arith.addi %696, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %700 = arith.andi %699, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %701 = arith.addi %698, %700 : i256 loc(#loc4) -// CHECK-NEXT: %702 = arith.cmpi ugt, %701, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %703 = arith.cmpi ult, %701, %698 : i256 loc(#loc4) -// CHECK-NEXT: %704 = arith.ori %702, %703 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %704, ^bb174, ^bb175 loc(#loc4) +// CHECK-NEXT: %696 = arith.muli %688, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %697 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %698 = llvm.load %697 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %699 = arith.addi %696, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %700 = arith.andi %699, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %701 = arith.addi %698, %700 : i256 loc(#loc8) +// CHECK-NEXT: %702 = arith.cmpi ugt, %701, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %703 = arith.cmpi ult, %701, %698 : i256 loc(#loc8) +// CHECK-NEXT: %704 = arith.ori %702, %703 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %704, ^bb174, ^bb175 loc(#loc8) // CHECK-NEXT: ^bb174: // pred: ^bb173 -// CHECK-NEXT: %705 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %705 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %706 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %706 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %707 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%707, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb175 loc(#loc4) +// CHECK-NEXT: %705 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %705 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %706 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %706 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %707 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%707, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb175 loc(#loc8) // CHECK-NEXT: ^bb175: // 2 preds: ^bb173, ^bb174 -// CHECK-NEXT: %708 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %701, %708 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %709 = llvm.inttoptr %698 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %688, %709 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %710 = arith.addi %698, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb176(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %708 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %701, %708 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %709 = llvm.inttoptr %698 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %688, %709 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %710 = arith.addi %698, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb176(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb176(%711: i256 loc({{.*}}:67:11)): // 2 preds: ^bb175, ^bb190 -// CHECK-NEXT: %712 = arith.cmpi ult, %711, %688 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %712, ^bb177(%711 : i256), ^bb191 loc(#loc4) +// CHECK-NEXT: %712 = arith.cmpi ult, %711, %688 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %712, ^bb177(%711 : i256), ^bb191 loc(#loc8) // CHECK-NEXT: ^bb177(%713: i256 loc({{.*}}:67:11)): // pred: ^bb176 -// CHECK-NEXT: %714 = arith.muli %713, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %715 = arith.addi %689, %714 : i256 loc(#loc4) -// CHECK-NEXT: %716 = arith.muli %713, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %717 = arith.addi %710, %716 : i256 loc(#loc4) -// CHECK-NEXT: %718 = llvm.inttoptr %715 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %719 = llvm.load %718 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %720 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %721 = arith.subi %720, %689 : i256 loc(#loc4) -// CHECK-NEXT: %722 = arith.subi %721, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %723 = arith.cmpi sge, %719, %722 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %723, ^bb178, ^bb179 loc(#loc4) +// CHECK-NEXT: %714 = arith.muli %713, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %715 = arith.addi %689, %714 : i256 loc(#loc8) +// CHECK-NEXT: %716 = arith.muli %713, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %717 = arith.addi %710, %716 : i256 loc(#loc8) +// CHECK-NEXT: %718 = llvm.inttoptr %715 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %719 = llvm.load %718 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %720 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %721 = arith.subi %720, %689 : i256 loc(#loc8) +// CHECK-NEXT: %722 = arith.subi %721, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %723 = arith.cmpi sge, %719, %722 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %723, ^bb178, ^bb179 loc(#loc8) // CHECK-NEXT: ^bb178: // pred: ^bb177 -// CHECK-NEXT: %724 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%724, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb179 loc(#loc4) +// CHECK-NEXT: %724 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%724, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb179 loc(#loc8) // CHECK-NEXT: ^bb179: // 2 preds: ^bb177, ^bb178 -// CHECK-NEXT: %725 = arith.addi %689, %719 : i256 loc(#loc4) -// CHECK-NEXT: %726 = llvm.inttoptr %725 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %727 = llvm.load %726 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %728 = arith.addi %725, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %729 = arith.cmpi ugt, %727, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %729, ^bb180, ^bb181 loc(#loc4) +// CHECK-NEXT: %725 = arith.addi %689, %719 : i256 loc(#loc8) +// CHECK-NEXT: %726 = llvm.inttoptr %725 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %727 = llvm.load %726 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %728 = arith.addi %725, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %729 = arith.cmpi ugt, %727, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %729, ^bb180, ^bb181 loc(#loc8) // CHECK-NEXT: ^bb180: // pred: ^bb179 -// CHECK-NEXT: %730 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%730, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb181 loc(#loc4) +// CHECK-NEXT: %730 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%730, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb181 loc(#loc8) // CHECK-NEXT: ^bb181: // 2 preds: ^bb179, ^bb180 -// CHECK-NEXT: %731 = arith.muli %727, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %732 = arith.subi %720, %731 : i256 loc(#loc4) -// CHECK-NEXT: %733 = arith.cmpi sgt, %728, %732 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %733, ^bb182, ^bb183 loc(#loc4) +// CHECK-NEXT: %731 = arith.muli %727, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %732 = arith.subi %720, %731 : i256 loc(#loc8) +// CHECK-NEXT: %733 = arith.cmpi sgt, %728, %732 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %733, ^bb182, ^bb183 loc(#loc8) // CHECK-NEXT: ^bb182: // pred: ^bb181 -// CHECK-NEXT: %734 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%734, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb183 loc(#loc4) +// CHECK-NEXT: %734 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%734, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb183 loc(#loc8) // CHECK-NEXT: ^bb183: // 2 preds: ^bb181, ^bb182 -// CHECK-NEXT: %735 = arith.muli %727, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %736 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %737 = llvm.load %736 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %738 = arith.addi %735, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %739 = arith.andi %738, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %740 = arith.addi %737, %739 : i256 loc(#loc4) -// CHECK-NEXT: %741 = arith.cmpi ugt, %740, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %742 = arith.cmpi ult, %740, %737 : i256 loc(#loc4) -// CHECK-NEXT: %743 = arith.ori %741, %742 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %743, ^bb184, ^bb185 loc(#loc4) +// CHECK-NEXT: %735 = arith.muli %727, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %736 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %737 = llvm.load %736 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %738 = arith.addi %735, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %739 = arith.andi %738, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %740 = arith.addi %737, %739 : i256 loc(#loc8) +// CHECK-NEXT: %741 = arith.cmpi ugt, %740, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %742 = arith.cmpi ult, %740, %737 : i256 loc(#loc8) +// CHECK-NEXT: %743 = arith.ori %741, %742 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %743, ^bb184, ^bb185 loc(#loc8) // CHECK-NEXT: ^bb184: // pred: ^bb183 -// CHECK-NEXT: %744 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %744 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %745 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %745 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %746 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%746, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb185 loc(#loc4) +// CHECK-NEXT: %744 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %744 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %745 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %745 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %746 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%746, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb185 loc(#loc8) // CHECK-NEXT: ^bb185: // 2 preds: ^bb183, ^bb184 -// CHECK-NEXT: %747 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %740, %747 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %748 = llvm.inttoptr %737 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %727, %748 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %749 = arith.addi %737, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb186(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %747 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %740, %747 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %748 = llvm.inttoptr %737 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %727, %748 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %749 = arith.addi %737, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb186(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb186(%750: i256 loc({{.*}}:67:11)): // 2 preds: ^bb185, ^bb189 -// CHECK-NEXT: %751 = arith.cmpi ult, %750, %727 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %751, ^bb187(%750 : i256), ^bb190 loc(#loc4) +// CHECK-NEXT: %751 = arith.cmpi ult, %750, %727 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %751, ^bb187(%750 : i256), ^bb190 loc(#loc8) // CHECK-NEXT: ^bb187(%752: i256 loc({{.*}}:67:11)): // pred: ^bb186 -// CHECK-NEXT: %753 = arith.muli %752, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %754 = arith.addi %728, %753 : i256 loc(#loc4) -// CHECK-NEXT: %755 = arith.muli %752, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %756 = arith.addi %749, %755 : i256 loc(#loc4) -// CHECK-NEXT: %757 = llvm.inttoptr %754 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %758 = llvm.load %757 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %759 = arith.cmpi ne, %758, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %760 = arith.extui %759 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %761 = arith.cmpi ne, %758, %760 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %761, ^bb188, ^bb189 loc(#loc4) +// CHECK-NEXT: %753 = arith.muli %752, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %754 = arith.addi %728, %753 : i256 loc(#loc8) +// CHECK-NEXT: %755 = arith.muli %752, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %756 = arith.addi %749, %755 : i256 loc(#loc8) +// CHECK-NEXT: %757 = llvm.inttoptr %754 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %758 = llvm.load %757 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %759 = arith.cmpi ne, %758, %c0_i256 : i256 loc(#loc8) +// CHECK-NEXT: %760 = arith.extui %759 : i1 to i256 loc(#loc8) +// CHECK-NEXT: %761 = arith.cmpi ne, %758, %760 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %761, ^bb188, ^bb189 loc(#loc8) // CHECK-NEXT: ^bb188: // pred: ^bb187 -// CHECK-NEXT: %762 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%762, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb189 loc(#loc4) +// CHECK-NEXT: %762 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%762, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb189 loc(#loc8) // CHECK-NEXT: ^bb189: // 2 preds: ^bb187, ^bb188 -// CHECK-NEXT: %763 = llvm.inttoptr %756 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %760, %763 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %764 = arith.addi %752, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb186(%764 : i256) loc(#loc4) +// CHECK-NEXT: %763 = llvm.inttoptr %756 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %760, %763 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %764 = arith.addi %752, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb186(%764 : i256) loc(#loc8) // CHECK-NEXT: ^bb190: // pred: ^bb186 -// CHECK-NEXT: %765 = llvm.inttoptr %717 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %737, %765 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %766 = arith.addi %713, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb176(%766 : i256) loc(#loc4) +// CHECK-NEXT: %765 = llvm.inttoptr %717 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %737, %765 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %766 = arith.addi %713, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb176(%766 : i256) loc(#loc8) // CHECK-NEXT: ^bb191: // pred: ^bb176 -// CHECK-NEXT: %767 = llvm.inttoptr %678 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %698, %767 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %768 = arith.addi %652, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %769 = arith.addi %654, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %770 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %771 = llvm.load %770 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %772 = arith.addi %771, %c64_i256 : i256 loc(#loc4) -// CHECK-NEXT: %773 = arith.cmpi ugt, %772, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %774 = arith.cmpi ult, %772, %771 : i256 loc(#loc4) -// CHECK-NEXT: %775 = arith.ori %773, %774 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %775, ^bb192, ^bb193 loc(#loc4) +// CHECK-NEXT: %767 = llvm.inttoptr %678 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %698, %767 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %768 = arith.addi %652, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %769 = arith.addi %654, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %770 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %771 = llvm.load %770 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %772 = arith.addi %771, %c64_i256 : i256 loc(#loc8) +// CHECK-NEXT: %773 = arith.cmpi ugt, %772, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %774 = arith.cmpi ult, %772, %771 : i256 loc(#loc8) +// CHECK-NEXT: %775 = arith.ori %773, %774 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %775, ^bb192, ^bb193 loc(#loc8) // CHECK-NEXT: ^bb192: // pred: ^bb191 -// CHECK-NEXT: %776 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %776 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %777 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %777 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %778 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%778, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb193 loc(#loc4) +// CHECK-NEXT: %776 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %776 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %777 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %777 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %778 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%778, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb193 loc(#loc8) // CHECK-NEXT: ^bb193: // 2 preds: ^bb191, ^bb192 -// CHECK-NEXT: %779 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %772, %779 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb194(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %779 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %772, %779 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb194(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb194(%780: i256 loc({{.*}}:67:11)): // 2 preds: ^bb193, ^bb197 -// CHECK-NEXT: %781 = arith.cmpi ult, %780, %c2_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %781, ^bb195(%780 : i256), ^bb198 loc(#loc4) +// CHECK-NEXT: %781 = arith.cmpi ult, %780, %c2_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %781, ^bb195(%780 : i256), ^bb198 loc(#loc8) // CHECK-NEXT: ^bb195(%782: i256 loc({{.*}}:67:11)): // pred: ^bb194 -// CHECK-NEXT: %783 = arith.muli %782, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %784 = arith.addi %768, %783 : i256 loc(#loc4) -// CHECK-NEXT: %785 = arith.muli %782, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %786 = arith.addi %771, %785 : i256 loc(#loc4) -// CHECK-NEXT: %787 = llvm.inttoptr %784 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %788 = llvm.load %787 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %789 = arith.andi %788, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) -// CHECK-NEXT: %790 = arith.cmpi ne, %788, %789 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %790, ^bb196, ^bb197 loc(#loc4) +// CHECK-NEXT: %783 = arith.muli %782, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %784 = arith.addi %768, %783 : i256 loc(#loc8) +// CHECK-NEXT: %785 = arith.muli %782, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %786 = arith.addi %771, %785 : i256 loc(#loc8) +// CHECK-NEXT: %787 = llvm.inttoptr %784 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %788 = llvm.load %787 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %789 = arith.andi %788, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc8) +// CHECK-NEXT: %790 = arith.cmpi ne, %788, %789 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %790, ^bb196, ^bb197 loc(#loc8) // CHECK-NEXT: ^bb196: // pred: ^bb195 -// CHECK-NEXT: %791 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%791, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb197 loc(#loc4) +// CHECK-NEXT: %791 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%791, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb197 loc(#loc8) // CHECK-NEXT: ^bb197: // 2 preds: ^bb195, ^bb196 -// CHECK-NEXT: %792 = llvm.inttoptr %786 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %789, %792 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %793 = arith.addi %782, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb194(%793 : i256) loc(#loc4) +// CHECK-NEXT: %792 = llvm.inttoptr %786 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %789, %792 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %793 = arith.addi %782, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb194(%793 : i256) loc(#loc8) // CHECK-NEXT: ^bb198: // pred: ^bb194 -// CHECK-NEXT: %794 = llvm.inttoptr %769 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %771, %794 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %795 = arith.addi %652, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %796 = arith.addi %654, %c128_i256 : i256 loc(#loc4) -// CHECK-NEXT: %797 = llvm.inttoptr %795 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %798 = llvm.load %797 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %799 = "llvm.intrcall"(%c23_i256, %798) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %800 = arith.cmpi ne, %798, %799 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %800, ^bb199, ^bb200 loc(#loc4) +// CHECK-NEXT: %794 = llvm.inttoptr %769 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %771, %794 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %795 = arith.addi %652, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %796 = arith.addi %654, %c128_i256 : i256 loc(#loc8) +// CHECK-NEXT: %797 = llvm.inttoptr %795 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %798 = llvm.load %797 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %799 = "llvm.intrcall"(%c23_i256, %798) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %800 = arith.cmpi ne, %798, %799 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %800, ^bb199, ^bb200 loc(#loc8) // CHECK-NEXT: ^bb199: // pred: ^bb198 -// CHECK-NEXT: %801 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%801, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb200 loc(#loc4) +// CHECK-NEXT: %801 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%801, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb200 loc(#loc8) // CHECK-NEXT: ^bb200: // 2 preds: ^bb198, ^bb199 -// CHECK-NEXT: %802 = llvm.inttoptr %796 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %799, %802 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %803 = arith.addi %652, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %804 = arith.addi %654, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %805 = llvm.inttoptr %803 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %806 = llvm.load %805 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %807 = arith.andi %806, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %808 = arith.cmpi ne, %806, %807 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %808, ^bb201, ^bb202 loc(#loc4) +// CHECK-NEXT: %802 = llvm.inttoptr %796 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %799, %802 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %803 = arith.addi %652, %c192_i256 : i256 loc(#loc8) +// CHECK-NEXT: %804 = arith.addi %654, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %805 = llvm.inttoptr %803 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %806 = llvm.load %805 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %807 = arith.andi %806, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %808 = arith.cmpi ne, %806, %807 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %808, ^bb201, ^bb202 loc(#loc8) // CHECK-NEXT: ^bb201: // pred: ^bb200 -// CHECK-NEXT: %809 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%809, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb202 loc(#loc4) +// CHECK-NEXT: %809 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%809, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb202 loc(#loc8) // CHECK-NEXT: ^bb202: // 2 preds: ^bb200, ^bb201 -// CHECK-NEXT: %810 = llvm.inttoptr %804 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %807, %810 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %811 = arith.addi %652, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %812 = arith.addi %654, %c192_i256 : i256 loc(#loc4) -// CHECK-NEXT: %813 = llvm.inttoptr %811 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %814 = llvm.load %813 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %815 = arith.andi %814, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc4) -// CHECK-NEXT: %816 = arith.cmpi ne, %814, %815 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %816, ^bb203, ^bb204 loc(#loc4) +// CHECK-NEXT: %810 = llvm.inttoptr %804 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %807, %810 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %811 = arith.addi %652, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %812 = arith.addi %654, %c192_i256 : i256 loc(#loc8) +// CHECK-NEXT: %813 = llvm.inttoptr %811 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %814 = llvm.load %813 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %815 = arith.andi %814, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc8) +// CHECK-NEXT: %816 = arith.cmpi ne, %814, %815 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %816, ^bb203, ^bb204 loc(#loc8) // CHECK-NEXT: ^bb203: // pred: ^bb202 -// CHECK-NEXT: %817 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%817, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb204 loc(#loc4) +// CHECK-NEXT: %817 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%817, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb204 loc(#loc8) // CHECK-NEXT: ^bb204: // 2 preds: ^bb202, ^bb203 -// CHECK-NEXT: %818 = llvm.inttoptr %812 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %815, %818 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %819 = llvm.inttoptr %644 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %654, %819 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %820 = arith.addi %640, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb158(%820 : i256) loc(#loc4) +// CHECK-NEXT: %818 = llvm.inttoptr %812 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %815, %818 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %819 = llvm.inttoptr %644 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %654, %819 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %820 = arith.addi %640, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb158(%820 : i256) loc(#loc8) // CHECK-NEXT: ^bb205: // pred: ^bb158 -// CHECK-NEXT: %821 = llvm.inttoptr %605 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %625, %821 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %822 = arith.addi %601, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb148(%822 : i256) loc(#loc4) +// CHECK-NEXT: %821 = llvm.inttoptr %605 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %625, %821 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %822 = arith.addi %601, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb148(%822 : i256) loc(#loc8) // CHECK-NEXT: ^bb206: // pred: ^bb148 -// CHECK-NEXT: %823 = llvm.inttoptr %566 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %586, %823 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %824 = arith.addi %1, %c640_i256 : i256 loc(#loc4) -// CHECK-NEXT: %825 = arith.addi %3, %c416_i256 : i256 loc(#loc4) -// CHECK-NEXT: %826 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %827 = llvm.load %826 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %828 = arith.addi %827, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %829 = arith.cmpi ugt, %828, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %830 = arith.cmpi ult, %828, %827 : i256 loc(#loc4) -// CHECK-NEXT: %831 = arith.ori %829, %830 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %831, ^bb207, ^bb208 loc(#loc4) +// CHECK-NEXT: %823 = llvm.inttoptr %566 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %586, %823 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %824 = arith.addi %1, %c640_i256 : i256 loc(#loc8) +// CHECK-NEXT: %825 = arith.addi %3, %c416_i256 : i256 loc(#loc8) +// CHECK-NEXT: %826 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %827 = llvm.load %826 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %828 = arith.addi %827, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %829 = arith.cmpi ugt, %828, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %830 = arith.cmpi ult, %828, %827 : i256 loc(#loc8) +// CHECK-NEXT: %831 = arith.ori %829, %830 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %831, ^bb207, ^bb208 loc(#loc8) // CHECK-NEXT: ^bb207: // pred: ^bb206 -// CHECK-NEXT: %832 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %832 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %833 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %833 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %834 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%834, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb208 loc(#loc4) +// CHECK-NEXT: %832 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %832 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %833 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %833 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %834 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%834, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb208 loc(#loc8) // CHECK-NEXT: ^bb208: // 2 preds: ^bb206, ^bb207 -// CHECK-NEXT: %835 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %828, %835 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb209(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %835 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %828, %835 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb209(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb209(%836: i256 loc({{.*}}:67:11)): // 2 preds: ^bb208, ^bb212 -// CHECK-NEXT: %837 = arith.cmpi ult, %836, %c5_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %837, ^bb210(%836 : i256), ^bb213 loc(#loc4) +// CHECK-NEXT: %837 = arith.cmpi ult, %836, %c5_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %837, ^bb210(%836 : i256), ^bb213 loc(#loc8) // CHECK-NEXT: ^bb210(%838: i256 loc({{.*}}:67:11)): // pred: ^bb209 -// CHECK-NEXT: %839 = arith.muli %838, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %840 = arith.addi %824, %839 : i256 loc(#loc4) -// CHECK-NEXT: %841 = arith.muli %838, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %842 = arith.addi %827, %841 : i256 loc(#loc4) -// CHECK-NEXT: %843 = llvm.inttoptr %840 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %844 = llvm.load %843 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %845 = arith.andi %844, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc4) -// CHECK-NEXT: %846 = arith.cmpi ne, %844, %845 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %846, ^bb211, ^bb212 loc(#loc4) +// CHECK-NEXT: %839 = arith.muli %838, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %840 = arith.addi %824, %839 : i256 loc(#loc8) +// CHECK-NEXT: %841 = arith.muli %838, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %842 = arith.addi %827, %841 : i256 loc(#loc8) +// CHECK-NEXT: %843 = llvm.inttoptr %840 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %844 = llvm.load %843 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %845 = arith.andi %844, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc8) +// CHECK-NEXT: %846 = arith.cmpi ne, %844, %845 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %846, ^bb211, ^bb212 loc(#loc8) // CHECK-NEXT: ^bb211: // pred: ^bb210 -// CHECK-NEXT: %847 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%847, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb212 loc(#loc4) +// CHECK-NEXT: %847 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%847, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb212 loc(#loc8) // CHECK-NEXT: ^bb212: // 2 preds: ^bb210, ^bb211 -// CHECK-NEXT: %848 = llvm.inttoptr %842 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %845, %848 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %849 = arith.addi %838, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb209(%849 : i256) loc(#loc4) +// CHECK-NEXT: %848 = llvm.inttoptr %842 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %845, %848 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %849 = arith.addi %838, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb209(%849 : i256) loc(#loc8) // CHECK-NEXT: ^bb213: // pred: ^bb209 -// CHECK-NEXT: %850 = llvm.inttoptr %825 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %827, %850 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %851 = arith.addi %1, %c800_i256 : i256 loc(#loc4) -// CHECK-NEXT: %852 = arith.addi %3, %c448_i256 : i256 loc(#loc4) -// CHECK-NEXT: %853 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %854 = llvm.load %853 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %855 = arith.addi %854, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %856 = arith.cmpi ugt, %855, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %857 = arith.cmpi ult, %855, %854 : i256 loc(#loc4) -// CHECK-NEXT: %858 = arith.ori %856, %857 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %858, ^bb214, ^bb215 loc(#loc4) +// CHECK-NEXT: %850 = llvm.inttoptr %825 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %827, %850 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %851 = arith.addi %1, %c800_i256 : i256 loc(#loc8) +// CHECK-NEXT: %852 = arith.addi %3, %c448_i256 : i256 loc(#loc8) +// CHECK-NEXT: %853 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %854 = llvm.load %853 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %855 = arith.addi %854, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %856 = arith.cmpi ugt, %855, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %857 = arith.cmpi ult, %855, %854 : i256 loc(#loc8) +// CHECK-NEXT: %858 = arith.ori %856, %857 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %858, ^bb214, ^bb215 loc(#loc8) // CHECK-NEXT: ^bb214: // pred: ^bb213 -// CHECK-NEXT: %859 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %859 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %860 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %860 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %861 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%861, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb215 loc(#loc4) +// CHECK-NEXT: %859 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %859 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %860 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %860 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %861 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%861, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb215 loc(#loc8) // CHECK-NEXT: ^bb215: // 2 preds: ^bb213, ^bb214 -// CHECK-NEXT: %862 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %855, %862 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb216(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %862 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %855, %862 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb216(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb216(%863: i256 loc({{.*}}:67:11)): // 2 preds: ^bb215, ^bb219 -// CHECK-NEXT: %864 = arith.cmpi ult, %863, %c5_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %864, ^bb217(%863 : i256), ^bb220 loc(#loc4) +// CHECK-NEXT: %864 = arith.cmpi ult, %863, %c5_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %864, ^bb217(%863 : i256), ^bb220 loc(#loc8) // CHECK-NEXT: ^bb217(%865: i256 loc({{.*}}:67:11)): // pred: ^bb216 -// CHECK-NEXT: %866 = arith.muli %865, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %867 = arith.addi %851, %866 : i256 loc(#loc4) -// CHECK-NEXT: %868 = arith.muli %865, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %869 = arith.addi %854, %868 : i256 loc(#loc4) -// CHECK-NEXT: %870 = llvm.inttoptr %867 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %871 = llvm.load %870 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %872 = "llvm.intrcall"(%c23_i256, %871) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %873 = arith.cmpi ne, %871, %872 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %873, ^bb218, ^bb219 loc(#loc4) +// CHECK-NEXT: %866 = arith.muli %865, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %867 = arith.addi %851, %866 : i256 loc(#loc8) +// CHECK-NEXT: %868 = arith.muli %865, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %869 = arith.addi %854, %868 : i256 loc(#loc8) +// CHECK-NEXT: %870 = llvm.inttoptr %867 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %871 = llvm.load %870 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %872 = "llvm.intrcall"(%c23_i256, %871) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %873 = arith.cmpi ne, %871, %872 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %873, ^bb218, ^bb219 loc(#loc8) // CHECK-NEXT: ^bb218: // pred: ^bb217 -// CHECK-NEXT: %874 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%874, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb219 loc(#loc4) +// CHECK-NEXT: %874 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%874, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb219 loc(#loc8) // CHECK-NEXT: ^bb219: // 2 preds: ^bb217, ^bb218 -// CHECK-NEXT: %875 = llvm.inttoptr %869 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %872, %875 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %876 = arith.addi %865, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb216(%876 : i256) loc(#loc4) +// CHECK-NEXT: %875 = llvm.inttoptr %869 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %872, %875 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %876 = arith.addi %865, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb216(%876 : i256) loc(#loc8) // CHECK-NEXT: ^bb220: // pred: ^bb216 -// CHECK-NEXT: %877 = llvm.inttoptr %852 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %854, %877 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %878 = arith.addi %1, %c960_i256 : i256 loc(#loc4) -// CHECK-NEXT: %879 = arith.addi %3, %c480_i256 : i256 loc(#loc4) -// CHECK-NEXT: %880 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %881 = llvm.load %880 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %882 = arith.addi %881, %c224_i256 : i256 loc(#loc4) -// CHECK-NEXT: %883 = arith.cmpi ugt, %882, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %884 = arith.cmpi ult, %882, %881 : i256 loc(#loc4) -// CHECK-NEXT: %885 = arith.ori %883, %884 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %885, ^bb221, ^bb222 loc(#loc4) +// CHECK-NEXT: %877 = llvm.inttoptr %852 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %854, %877 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %878 = arith.addi %1, %c960_i256 : i256 loc(#loc8) +// CHECK-NEXT: %879 = arith.addi %3, %c480_i256 : i256 loc(#loc8) +// CHECK-NEXT: %880 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %881 = llvm.load %880 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %882 = arith.addi %881, %c224_i256 : i256 loc(#loc8) +// CHECK-NEXT: %883 = arith.cmpi ugt, %882, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %884 = arith.cmpi ult, %882, %881 : i256 loc(#loc8) +// CHECK-NEXT: %885 = arith.ori %883, %884 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %885, ^bb221, ^bb222 loc(#loc8) // CHECK-NEXT: ^bb221: // pred: ^bb220 -// CHECK-NEXT: %886 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %886 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %887 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %887 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %888 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%888, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb222 loc(#loc4) +// CHECK-NEXT: %886 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %886 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %887 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %887 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %888 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%888, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb222 loc(#loc8) // CHECK-NEXT: ^bb222: // 2 preds: ^bb220, ^bb221 -// CHECK-NEXT: %889 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %882, %889 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb223(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %889 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %882, %889 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb223(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb223(%890: i256 loc({{.*}}:67:11)): // 2 preds: ^bb222, ^bb226 -// CHECK-NEXT: %891 = arith.cmpi ult, %890, %c7_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %891, ^bb224(%890 : i256), ^bb227 loc(#loc4) +// CHECK-NEXT: %891 = arith.cmpi ult, %890, %c7_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %891, ^bb224(%890 : i256), ^bb227 loc(#loc8) // CHECK-NEXT: ^bb224(%892: i256 loc({{.*}}:67:11)): // pred: ^bb223 -// CHECK-NEXT: %893 = arith.muli %892, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %894 = arith.addi %878, %893 : i256 loc(#loc4) -// CHECK-NEXT: %895 = arith.muli %892, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %896 = arith.addi %881, %895 : i256 loc(#loc4) -// CHECK-NEXT: %897 = llvm.inttoptr %894 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %898 = llvm.load %897 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %899 = "llvm.intrcall"(%c8_i256, %898) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %900 = arith.cmpi ne, %898, %899 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %900, ^bb225, ^bb226 loc(#loc4) +// CHECK-NEXT: %893 = arith.muli %892, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %894 = arith.addi %878, %893 : i256 loc(#loc8) +// CHECK-NEXT: %895 = arith.muli %892, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %896 = arith.addi %881, %895 : i256 loc(#loc8) +// CHECK-NEXT: %897 = llvm.inttoptr %894 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %898 = llvm.load %897 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %899 = "llvm.intrcall"(%c8_i256, %898) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %900 = arith.cmpi ne, %898, %899 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %900, ^bb225, ^bb226 loc(#loc8) // CHECK-NEXT: ^bb225: // pred: ^bb224 -// CHECK-NEXT: %901 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%901, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb226 loc(#loc4) +// CHECK-NEXT: %901 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%901, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb226 loc(#loc8) // CHECK-NEXT: ^bb226: // 2 preds: ^bb224, ^bb225 -// CHECK-NEXT: %902 = llvm.inttoptr %896 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %899, %902 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %903 = arith.addi %892, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb223(%903 : i256) loc(#loc4) +// CHECK-NEXT: %902 = llvm.inttoptr %896 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %899, %902 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %903 = arith.addi %892, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb223(%903 : i256) loc(#loc8) // CHECK-NEXT: ^bb227: // pred: ^bb223 -// CHECK-NEXT: %904 = llvm.inttoptr %879 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %881, %904 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %905 = arith.addi %1, %c1184_i256 : i256 loc(#loc4) -// CHECK-NEXT: %906 = arith.addi %3, %c512_i256 : i256 loc(#loc4) -// CHECK-NEXT: %907 = llvm.inttoptr %905 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %908 = llvm.load %907 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %909 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %910 = arith.subi %909, %1 : i256 loc(#loc4) -// CHECK-NEXT: %911 = arith.subi %910, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %912 = arith.cmpi sge, %908, %911 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %912, ^bb228, ^bb229 loc(#loc4) +// CHECK-NEXT: %904 = llvm.inttoptr %879 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %881, %904 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %905 = arith.addi %1, %c1184_i256 : i256 loc(#loc8) +// CHECK-NEXT: %906 = arith.addi %3, %c512_i256 : i256 loc(#loc8) +// CHECK-NEXT: %907 = llvm.inttoptr %905 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %908 = llvm.load %907 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %909 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %910 = arith.subi %909, %1 : i256 loc(#loc8) +// CHECK-NEXT: %911 = arith.subi %910, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %912 = arith.cmpi sge, %908, %911 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %912, ^bb228, ^bb229 loc(#loc8) // CHECK-NEXT: ^bb228: // pred: ^bb227 -// CHECK-NEXT: %913 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%913, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb229 loc(#loc4) +// CHECK-NEXT: %913 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%913, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb229 loc(#loc8) // CHECK-NEXT: ^bb229: // 2 preds: ^bb227, ^bb228 -// CHECK-NEXT: %914 = arith.addi %1, %908 : i256 loc(#loc4) -// CHECK-NEXT: %915 = llvm.inttoptr %914 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %916 = llvm.load %915 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %917 = arith.addi %914, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %918 = arith.cmpi ugt, %916, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %918, ^bb230, ^bb231 loc(#loc4) +// CHECK-NEXT: %914 = arith.addi %1, %908 : i256 loc(#loc8) +// CHECK-NEXT: %915 = llvm.inttoptr %914 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %916 = llvm.load %915 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %917 = arith.addi %914, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %918 = arith.cmpi ugt, %916, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %918, ^bb230, ^bb231 loc(#loc8) // CHECK-NEXT: ^bb230: // pred: ^bb229 -// CHECK-NEXT: %919 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%919, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb231 loc(#loc4) +// CHECK-NEXT: %919 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%919, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb231 loc(#loc8) // CHECK-NEXT: ^bb231: // 2 preds: ^bb229, ^bb230 -// CHECK-NEXT: %920 = arith.subi %909, %916 : i256 loc(#loc4) -// CHECK-NEXT: %921 = arith.cmpi sgt, %917, %920 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %921, ^bb232, ^bb233 loc(#loc4) +// CHECK-NEXT: %920 = arith.subi %909, %916 : i256 loc(#loc8) +// CHECK-NEXT: %921 = arith.cmpi sgt, %917, %920 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %921, ^bb232, ^bb233 loc(#loc8) // CHECK-NEXT: ^bb232: // pred: ^bb231 -// CHECK-NEXT: %922 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%922, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb233 loc(#loc4) +// CHECK-NEXT: %922 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%922, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb233 loc(#loc8) // CHECK-NEXT: ^bb233: // 2 preds: ^bb231, ^bb232 -// CHECK-NEXT: %923 = arith.addi %916, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %924 = arith.andi %923, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %925 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %926 = llvm.load %925 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %927 = arith.addi %924, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %928 = arith.andi %927, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %929 = arith.addi %926, %928 : i256 loc(#loc4) -// CHECK-NEXT: %930 = arith.cmpi ugt, %929, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %931 = arith.cmpi ult, %929, %926 : i256 loc(#loc4) -// CHECK-NEXT: %932 = arith.ori %930, %931 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %932, ^bb234, ^bb235 loc(#loc4) +// CHECK-NEXT: %923 = arith.addi %916, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %924 = arith.andi %923, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %925 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %926 = llvm.load %925 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %927 = arith.addi %924, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %928 = arith.andi %927, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %929 = arith.addi %926, %928 : i256 loc(#loc8) +// CHECK-NEXT: %930 = arith.cmpi ugt, %929, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %931 = arith.cmpi ult, %929, %926 : i256 loc(#loc8) +// CHECK-NEXT: %932 = arith.ori %930, %931 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %932, ^bb234, ^bb235 loc(#loc8) // CHECK-NEXT: ^bb234: // pred: ^bb233 -// CHECK-NEXT: %933 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %933 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %934 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %934 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %935 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%935, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb235 loc(#loc4) +// CHECK-NEXT: %933 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %933 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %934 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %934 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %935 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%935, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb235 loc(#loc8) // CHECK-NEXT: ^bb235: // 2 preds: ^bb233, ^bb234 -// CHECK-NEXT: %936 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %929, %936 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %937 = llvm.inttoptr %926 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %916, %937 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %938 = arith.addi %926, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %939 = llvm.inttoptr %938 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %940 = llvm.inttoptr %917 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: "llvm.intr.memcpy"(%939, %940, %916) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc4) -// CHECK-NEXT: %941 = llvm.inttoptr %906 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %926, %941 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %942 = arith.addi %1, %c1216_i256 : i256 loc(#loc4) -// CHECK-NEXT: %943 = arith.addi %3, %c544_i256 : i256 loc(#loc4) -// CHECK-NEXT: %944 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %945 = llvm.load %944 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %946 = arith.addi %945, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %947 = arith.cmpi ugt, %946, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %948 = arith.cmpi ult, %946, %945 : i256 loc(#loc4) -// CHECK-NEXT: %949 = arith.ori %947, %948 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %949, ^bb236, ^bb237 loc(#loc4) +// CHECK-NEXT: %936 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %929, %936 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %937 = llvm.inttoptr %926 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %916, %937 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %938 = arith.addi %926, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %939 = llvm.inttoptr %938 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %940 = llvm.inttoptr %917 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: "llvm.intr.memcpy"(%939, %940, %916) <{isVolatile = false}> : (!llvm.ptr<1>, !llvm.ptr<2>, i256) -> () loc(#loc8) +// CHECK-NEXT: %941 = llvm.inttoptr %906 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %926, %941 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %942 = arith.addi %1, %c1216_i256 : i256 loc(#loc8) +// CHECK-NEXT: %943 = arith.addi %3, %c544_i256 : i256 loc(#loc8) +// CHECK-NEXT: %944 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %945 = llvm.load %944 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %946 = arith.addi %945, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %947 = arith.cmpi ugt, %946, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %948 = arith.cmpi ult, %946, %945 : i256 loc(#loc8) +// CHECK-NEXT: %949 = arith.ori %947, %948 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %949, ^bb236, ^bb237 loc(#loc8) // CHECK-NEXT: ^bb236: // pred: ^bb235 -// CHECK-NEXT: %950 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %950 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %951 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %951 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %952 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%952, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb237 loc(#loc4) +// CHECK-NEXT: %950 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %950 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %951 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %951 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %952 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%952, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb237 loc(#loc8) // CHECK-NEXT: ^bb237: // 2 preds: ^bb235, ^bb236 -// CHECK-NEXT: %953 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %946, %953 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb238(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %953 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %946, %953 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb238(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb238(%954: i256 loc({{.*}}:67:11)): // 2 preds: ^bb237, ^bb241 -// CHECK-NEXT: %955 = arith.cmpi ult, %954, %c5_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %955, ^bb239(%954 : i256), ^bb242 loc(#loc4) +// CHECK-NEXT: %955 = arith.cmpi ult, %954, %c5_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %955, ^bb239(%954 : i256), ^bb242 loc(#loc8) // CHECK-NEXT: ^bb239(%956: i256 loc({{.*}}:67:11)): // pred: ^bb238 -// CHECK-NEXT: %957 = arith.muli %956, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %958 = arith.addi %942, %957 : i256 loc(#loc4) -// CHECK-NEXT: %959 = arith.muli %956, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %960 = arith.addi %945, %959 : i256 loc(#loc4) -// CHECK-NEXT: %961 = llvm.inttoptr %958 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %962 = llvm.load %961 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %963 = arith.andi %962, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc4) -// CHECK-NEXT: %964 = arith.cmpi ne, %962, %963 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %964, ^bb240, ^bb241 loc(#loc4) +// CHECK-NEXT: %957 = arith.muli %956, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %958 = arith.addi %942, %957 : i256 loc(#loc8) +// CHECK-NEXT: %959 = arith.muli %956, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %960 = arith.addi %945, %959 : i256 loc(#loc8) +// CHECK-NEXT: %961 = llvm.inttoptr %958 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %962 = llvm.load %961 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %963 = arith.andi %962, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc8) +// CHECK-NEXT: %964 = arith.cmpi ne, %962, %963 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %964, ^bb240, ^bb241 loc(#loc8) // CHECK-NEXT: ^bb240: // pred: ^bb239 -// CHECK-NEXT: %965 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%965, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb241 loc(#loc4) +// CHECK-NEXT: %965 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%965, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb241 loc(#loc8) // CHECK-NEXT: ^bb241: // 2 preds: ^bb239, ^bb240 -// CHECK-NEXT: %966 = llvm.inttoptr %960 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %963, %966 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %967 = arith.addi %956, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb238(%967 : i256) loc(#loc4) +// CHECK-NEXT: %966 = llvm.inttoptr %960 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %963, %966 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %967 = arith.addi %956, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb238(%967 : i256) loc(#loc8) // CHECK-NEXT: ^bb242: // pred: ^bb238 -// CHECK-NEXT: %968 = llvm.inttoptr %943 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %945, %968 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %969 = arith.addi %1, %c1376_i256 : i256 loc(#loc4) -// CHECK-NEXT: %970 = arith.addi %3, %c576_i256 : i256 loc(#loc4) -// CHECK-NEXT: %971 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %972 = llvm.load %971 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %973 = arith.addi %972, %c288_i256 : i256 loc(#loc4) -// CHECK-NEXT: %974 = arith.cmpi ugt, %973, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %975 = arith.cmpi ult, %973, %972 : i256 loc(#loc4) -// CHECK-NEXT: %976 = arith.ori %974, %975 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %976, ^bb243, ^bb244 loc(#loc4) +// CHECK-NEXT: %968 = llvm.inttoptr %943 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %945, %968 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %969 = arith.addi %1, %c1376_i256 : i256 loc(#loc8) +// CHECK-NEXT: %970 = arith.addi %3, %c576_i256 : i256 loc(#loc8) +// CHECK-NEXT: %971 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %972 = llvm.load %971 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %973 = arith.addi %972, %c288_i256 : i256 loc(#loc8) +// CHECK-NEXT: %974 = arith.cmpi ugt, %973, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %975 = arith.cmpi ult, %973, %972 : i256 loc(#loc8) +// CHECK-NEXT: %976 = arith.ori %974, %975 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %976, ^bb243, ^bb244 loc(#loc8) // CHECK-NEXT: ^bb243: // pred: ^bb242 -// CHECK-NEXT: %977 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %977 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %978 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %978 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %979 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%979, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb244 loc(#loc4) +// CHECK-NEXT: %977 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %977 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %978 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %978 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %979 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%979, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb244 loc(#loc8) // CHECK-NEXT: ^bb244: // 2 preds: ^bb242, ^bb243 -// CHECK-NEXT: %980 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %973, %980 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb245(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %980 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %973, %980 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb245(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb245(%981: i256 loc({{.*}}:67:11)): // 2 preds: ^bb244, ^bb248 -// CHECK-NEXT: %982 = arith.cmpi ult, %981, %c9_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %982, ^bb246(%981 : i256), ^bb249 loc(#loc4) +// CHECK-NEXT: %982 = arith.cmpi ult, %981, %c9_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %982, ^bb246(%981 : i256), ^bb249 loc(#loc8) // CHECK-NEXT: ^bb246(%983: i256 loc({{.*}}:67:11)): // pred: ^bb245 -// CHECK-NEXT: %984 = arith.muli %983, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %985 = arith.addi %969, %984 : i256 loc(#loc4) -// CHECK-NEXT: %986 = arith.muli %983, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %987 = arith.addi %972, %986 : i256 loc(#loc4) -// CHECK-NEXT: %988 = llvm.inttoptr %985 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %989 = llvm.load %988 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %990 = "llvm.intrcall"(%c1_i256, %989) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %991 = arith.cmpi ne, %989, %990 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %991, ^bb247, ^bb248 loc(#loc4) +// CHECK-NEXT: %984 = arith.muli %983, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %985 = arith.addi %969, %984 : i256 loc(#loc8) +// CHECK-NEXT: %986 = arith.muli %983, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %987 = arith.addi %972, %986 : i256 loc(#loc8) +// CHECK-NEXT: %988 = llvm.inttoptr %985 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %989 = llvm.load %988 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %990 = "llvm.intrcall"(%c1_i256, %989) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %991 = arith.cmpi ne, %989, %990 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %991, ^bb247, ^bb248 loc(#loc8) // CHECK-NEXT: ^bb247: // pred: ^bb246 -// CHECK-NEXT: %992 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%992, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb248 loc(#loc4) +// CHECK-NEXT: %992 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%992, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb248 loc(#loc8) // CHECK-NEXT: ^bb248: // 2 preds: ^bb246, ^bb247 -// CHECK-NEXT: %993 = llvm.inttoptr %987 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %990, %993 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %994 = arith.addi %983, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb245(%994 : i256) loc(#loc4) +// CHECK-NEXT: %993 = llvm.inttoptr %987 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %990, %993 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %994 = arith.addi %983, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb245(%994 : i256) loc(#loc8) // CHECK-NEXT: ^bb249: // pred: ^bb245 -// CHECK-NEXT: %995 = llvm.inttoptr %970 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %972, %995 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %996 = arith.addi %1, %c1664_i256 : i256 loc(#loc4) -// CHECK-NEXT: %997 = arith.addi %3, %c608_i256 : i256 loc(#loc4) -// CHECK-NEXT: %998 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %999 = llvm.load %998 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %1000 = arith.addi %999, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1001 = arith.cmpi ugt, %1000, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1002 = arith.cmpi ult, %1000, %999 : i256 loc(#loc4) -// CHECK-NEXT: %1003 = arith.ori %1001, %1002 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1003, ^bb250, ^bb251 loc(#loc4) +// CHECK-NEXT: %995 = llvm.inttoptr %970 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %972, %995 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %996 = arith.addi %1, %c1664_i256 : i256 loc(#loc8) +// CHECK-NEXT: %997 = arith.addi %3, %c608_i256 : i256 loc(#loc8) +// CHECK-NEXT: %998 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %999 = llvm.load %998 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %1000 = arith.addi %999, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1001 = arith.cmpi ugt, %1000, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1002 = arith.cmpi ult, %1000, %999 : i256 loc(#loc8) +// CHECK-NEXT: %1003 = arith.ori %1001, %1002 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1003, ^bb250, ^bb251 loc(#loc8) // CHECK-NEXT: ^bb250: // pred: ^bb249 -// CHECK-NEXT: %1004 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1004 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1005 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %1005 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1006 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1006, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb251 loc(#loc4) +// CHECK-NEXT: %1004 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1004 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1005 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %1005 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1006 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1006, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb251 loc(#loc8) // CHECK-NEXT: ^bb251: // 2 preds: ^bb249, ^bb250 -// CHECK-NEXT: %1007 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1000, %1007 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb252(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %1007 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1000, %1007 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb252(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb252(%1008: i256 loc({{.*}}:67:11)): // 2 preds: ^bb251, ^bb255 -// CHECK-NEXT: %1009 = arith.cmpi ult, %1008, %c3_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1009, ^bb253(%1008 : i256), ^bb256 loc(#loc4) +// CHECK-NEXT: %1009 = arith.cmpi ult, %1008, %c3_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1009, ^bb253(%1008 : i256), ^bb256 loc(#loc8) // CHECK-NEXT: ^bb253(%1010: i256 loc({{.*}}:67:11)): // pred: ^bb252 -// CHECK-NEXT: %1011 = arith.muli %1010, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1012 = arith.addi %996, %1011 : i256 loc(#loc4) -// CHECK-NEXT: %1013 = arith.muli %1010, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1014 = arith.addi %999, %1013 : i256 loc(#loc4) -// CHECK-NEXT: %1015 = llvm.inttoptr %1012 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1016 = llvm.load %1015 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1017 = arith.andi %1016, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1018 = arith.cmpi ne, %1016, %1017 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1018, ^bb254, ^bb255 loc(#loc4) +// CHECK-NEXT: %1011 = arith.muli %1010, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1012 = arith.addi %996, %1011 : i256 loc(#loc8) +// CHECK-NEXT: %1013 = arith.muli %1010, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1014 = arith.addi %999, %1013 : i256 loc(#loc8) +// CHECK-NEXT: %1015 = llvm.inttoptr %1012 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1016 = llvm.load %1015 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1017 = arith.andi %1016, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1018 = arith.cmpi ne, %1016, %1017 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1018, ^bb254, ^bb255 loc(#loc8) // CHECK-NEXT: ^bb254: // pred: ^bb253 -// CHECK-NEXT: %1019 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1019, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb255 loc(#loc4) +// CHECK-NEXT: %1019 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1019, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb255 loc(#loc8) // CHECK-NEXT: ^bb255: // 2 preds: ^bb253, ^bb254 -// CHECK-NEXT: %1020 = llvm.inttoptr %1014 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1017, %1020 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1021 = arith.addi %1010, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb252(%1021 : i256) loc(#loc4) +// CHECK-NEXT: %1020 = llvm.inttoptr %1014 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1017, %1020 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1021 = arith.addi %1010, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb252(%1021 : i256) loc(#loc8) // CHECK-NEXT: ^bb256: // pred: ^bb252 -// CHECK-NEXT: %1022 = llvm.inttoptr %997 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %999, %1022 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1023 = arith.addi %1, %c1760_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1024 = arith.addi %3, %c640_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1025 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1026 = llvm.load %1025 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %1027 = arith.addi %1026, %c96_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1028 = arith.cmpi ugt, %1027, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1029 = arith.cmpi ult, %1027, %1026 : i256 loc(#loc4) -// CHECK-NEXT: %1030 = arith.ori %1028, %1029 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1030, ^bb257, ^bb258 loc(#loc4) +// CHECK-NEXT: %1022 = llvm.inttoptr %997 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %999, %1022 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1023 = arith.addi %1, %c1760_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1024 = arith.addi %3, %c640_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1025 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1026 = llvm.load %1025 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %1027 = arith.addi %1026, %c96_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1028 = arith.cmpi ugt, %1027, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1029 = arith.cmpi ult, %1027, %1026 : i256 loc(#loc8) +// CHECK-NEXT: %1030 = arith.ori %1028, %1029 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1030, ^bb257, ^bb258 loc(#loc8) // CHECK-NEXT: ^bb257: // pred: ^bb256 -// CHECK-NEXT: %1031 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1031 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1032 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %1032 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1033 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1033, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb258 loc(#loc4) +// CHECK-NEXT: %1031 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1031 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1032 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %1032 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1033 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1033, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb258 loc(#loc8) // CHECK-NEXT: ^bb258: // 2 preds: ^bb256, ^bb257 -// CHECK-NEXT: %1034 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1027, %1034 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb259(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %1034 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1027, %1034 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb259(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb259(%1035: i256 loc({{.*}}:67:11)): // 2 preds: ^bb258, ^bb262 -// CHECK-NEXT: %1036 = arith.cmpi ult, %1035, %c3_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1036, ^bb260(%1035 : i256), ^bb263 loc(#loc4) +// CHECK-NEXT: %1036 = arith.cmpi ult, %1035, %c3_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1036, ^bb260(%1035 : i256), ^bb263 loc(#loc8) // CHECK-NEXT: ^bb260(%1037: i256 loc({{.*}}:67:11)): // pred: ^bb259 -// CHECK-NEXT: %1038 = arith.muli %1037, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1039 = arith.addi %1023, %1038 : i256 loc(#loc4) -// CHECK-NEXT: %1040 = arith.muli %1037, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1041 = arith.addi %1026, %1040 : i256 loc(#loc4) -// CHECK-NEXT: %1042 = llvm.inttoptr %1039 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1043 = llvm.load %1042 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1044 = "llvm.intrcall"(%c15_i256, %1043) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %1045 = arith.cmpi ne, %1043, %1044 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1045, ^bb261, ^bb262 loc(#loc4) +// CHECK-NEXT: %1038 = arith.muli %1037, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1039 = arith.addi %1023, %1038 : i256 loc(#loc8) +// CHECK-NEXT: %1040 = arith.muli %1037, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1041 = arith.addi %1026, %1040 : i256 loc(#loc8) +// CHECK-NEXT: %1042 = llvm.inttoptr %1039 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1043 = llvm.load %1042 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1044 = "llvm.intrcall"(%c15_i256, %1043) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %1045 = arith.cmpi ne, %1043, %1044 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1045, ^bb261, ^bb262 loc(#loc8) // CHECK-NEXT: ^bb261: // pred: ^bb260 -// CHECK-NEXT: %1046 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1046, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb262 loc(#loc4) +// CHECK-NEXT: %1046 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1046, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb262 loc(#loc8) // CHECK-NEXT: ^bb262: // 2 preds: ^bb260, ^bb261 -// CHECK-NEXT: %1047 = llvm.inttoptr %1041 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1044, %1047 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1048 = arith.addi %1037, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb259(%1048 : i256) loc(#loc4) +// CHECK-NEXT: %1047 = llvm.inttoptr %1041 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1044, %1047 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1048 = arith.addi %1037, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb259(%1048 : i256) loc(#loc8) // CHECK-NEXT: ^bb263: // pred: ^bb259 -// CHECK-NEXT: %1049 = llvm.inttoptr %1024 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1026, %1049 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1050 = arith.addi %1, %c1856_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1051 = arith.addi %3, %c672_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1052 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1053 = llvm.load %1052 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %1054 = arith.addi %1053, %c160_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1055 = arith.cmpi ugt, %1054, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1056 = arith.cmpi ult, %1054, %1053 : i256 loc(#loc4) -// CHECK-NEXT: %1057 = arith.ori %1055, %1056 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1057, ^bb264, ^bb265 loc(#loc4) +// CHECK-NEXT: %1049 = llvm.inttoptr %1024 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1026, %1049 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1050 = arith.addi %1, %c1856_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1051 = arith.addi %3, %c672_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1052 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1053 = llvm.load %1052 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %1054 = arith.addi %1053, %c160_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1055 = arith.cmpi ugt, %1054, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1056 = arith.cmpi ult, %1054, %1053 : i256 loc(#loc8) +// CHECK-NEXT: %1057 = arith.ori %1055, %1056 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1057, ^bb264, ^bb265 loc(#loc8) // CHECK-NEXT: ^bb264: // pred: ^bb263 -// CHECK-NEXT: %1058 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1058 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1059 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %1059 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1060 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1060, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb265 loc(#loc4) +// CHECK-NEXT: %1058 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1058 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1059 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %1059 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1060 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1060, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb265 loc(#loc8) // CHECK-NEXT: ^bb265: // 2 preds: ^bb263, ^bb264 -// CHECK-NEXT: %1061 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1054, %1061 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb266(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %1061 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1054, %1061 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb266(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb266(%1062: i256 loc({{.*}}:67:11)): // 2 preds: ^bb265, ^bb269 -// CHECK-NEXT: %1063 = arith.cmpi ult, %1062, %c5_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1063, ^bb267(%1062 : i256), ^bb270 loc(#loc4) +// CHECK-NEXT: %1063 = arith.cmpi ult, %1062, %c5_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1063, ^bb267(%1062 : i256), ^bb270 loc(#loc8) // CHECK-NEXT: ^bb267(%1064: i256 loc({{.*}}:67:11)): // pred: ^bb266 -// CHECK-NEXT: %1065 = arith.muli %1064, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1066 = arith.addi %1050, %1065 : i256 loc(#loc4) -// CHECK-NEXT: %1067 = arith.muli %1064, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1068 = arith.addi %1053, %1067 : i256 loc(#loc4) -// CHECK-NEXT: %1069 = llvm.inttoptr %1066 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1070 = llvm.load %1069 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1071 = arith.cmpi ne, %1070, %c0_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1072 = arith.extui %1071 : i1 to i256 loc(#loc4) -// CHECK-NEXT: %1073 = arith.cmpi ne, %1070, %1072 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1073, ^bb268, ^bb269 loc(#loc4) +// CHECK-NEXT: %1065 = arith.muli %1064, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1066 = arith.addi %1050, %1065 : i256 loc(#loc8) +// CHECK-NEXT: %1067 = arith.muli %1064, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1068 = arith.addi %1053, %1067 : i256 loc(#loc8) +// CHECK-NEXT: %1069 = llvm.inttoptr %1066 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1070 = llvm.load %1069 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1071 = arith.cmpi ne, %1070, %c0_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1072 = arith.extui %1071 : i1 to i256 loc(#loc8) +// CHECK-NEXT: %1073 = arith.cmpi ne, %1070, %1072 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1073, ^bb268, ^bb269 loc(#loc8) // CHECK-NEXT: ^bb268: // pred: ^bb267 -// CHECK-NEXT: %1074 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1074, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb269 loc(#loc4) +// CHECK-NEXT: %1074 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1074, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb269 loc(#loc8) // CHECK-NEXT: ^bb269: // 2 preds: ^bb267, ^bb268 -// CHECK-NEXT: %1075 = llvm.inttoptr %1068 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1072, %1075 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1076 = arith.addi %1064, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb266(%1076 : i256) loc(#loc4) +// CHECK-NEXT: %1075 = llvm.inttoptr %1068 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1072, %1075 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1076 = arith.addi %1064, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb266(%1076 : i256) loc(#loc8) // CHECK-NEXT: ^bb270: // pred: ^bb266 -// CHECK-NEXT: %1077 = llvm.inttoptr %1051 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1053, %1077 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1078 = arith.addi %1, %c2016_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1079 = arith.addi %3, %c704_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1080 = llvm.inttoptr %1078 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1081 = llvm.load %1080 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1082 = llvm.inttoptr %1079 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1081, %1082 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1083 = arith.addi %1, %c2048_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1084 = arith.addi %3, %c736_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1085 = llvm.inttoptr %1083 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1086 = llvm.load %1085 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1087 = llvm.inttoptr %1084 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1086, %1087 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1088 = arith.addi %1, %c2080_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1089 = arith.addi %3, %c768_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1090 = llvm.inttoptr %1088 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1091 = llvm.load %1090 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1092 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc4) -// CHECK-NEXT: %1093 = arith.subi %1092, %1 : i256 loc(#loc4) -// CHECK-NEXT: %1094 = arith.subi %1093, %c31_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1095 = arith.cmpi sge, %1091, %1094 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1095, ^bb271, ^bb272 loc(#loc4) +// CHECK-NEXT: %1077 = llvm.inttoptr %1051 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1053, %1077 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1078 = arith.addi %1, %c2016_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1079 = arith.addi %3, %c704_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1080 = llvm.inttoptr %1078 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1081 = llvm.load %1080 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1082 = llvm.inttoptr %1079 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1081, %1082 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1083 = arith.addi %1, %c2048_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1084 = arith.addi %3, %c736_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1085 = llvm.inttoptr %1083 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1086 = llvm.load %1085 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1087 = llvm.inttoptr %1084 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1086, %1087 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1088 = arith.addi %1, %c2080_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1089 = arith.addi %3, %c768_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1090 = llvm.inttoptr %1088 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1091 = llvm.load %1090 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1092 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc8) +// CHECK-NEXT: %1093 = arith.subi %1092, %1 : i256 loc(#loc8) +// CHECK-NEXT: %1094 = arith.subi %1093, %c31_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1095 = arith.cmpi sge, %1091, %1094 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1095, ^bb271, ^bb272 loc(#loc8) // CHECK-NEXT: ^bb271: // pred: ^bb270 -// CHECK-NEXT: %1096 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1096, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb272 loc(#loc4) +// CHECK-NEXT: %1096 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1096, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb272 loc(#loc8) // CHECK-NEXT: ^bb272: // 2 preds: ^bb270, ^bb271 -// CHECK-NEXT: %1097 = arith.addi %1, %1091 : i256 loc(#loc4) -// CHECK-NEXT: %1098 = llvm.inttoptr %1097 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1099 = llvm.load %1098 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1100 = arith.addi %1097, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1101 = arith.cmpi ugt, %1099, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1101, ^bb273, ^bb274 loc(#loc4) +// CHECK-NEXT: %1097 = arith.addi %1, %1091 : i256 loc(#loc8) +// CHECK-NEXT: %1098 = llvm.inttoptr %1097 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1099 = llvm.load %1098 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1100 = arith.addi %1097, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1101 = arith.cmpi ugt, %1099, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1101, ^bb273, ^bb274 loc(#loc8) // CHECK-NEXT: ^bb273: // pred: ^bb272 -// CHECK-NEXT: %1102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1102, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb274 loc(#loc4) +// CHECK-NEXT: %1102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1102, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb274 loc(#loc8) // CHECK-NEXT: ^bb274: // 2 preds: ^bb272, ^bb273 -// CHECK-NEXT: %1103 = arith.muli %1099, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1104 = arith.subi %1092, %1103 : i256 loc(#loc4) -// CHECK-NEXT: %1105 = arith.cmpi sgt, %1100, %1104 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1105, ^bb275, ^bb276 loc(#loc4) +// CHECK-NEXT: %1103 = arith.muli %1099, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1104 = arith.subi %1092, %1103 : i256 loc(#loc8) +// CHECK-NEXT: %1105 = arith.cmpi sgt, %1100, %1104 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1105, ^bb275, ^bb276 loc(#loc8) // CHECK-NEXT: ^bb275: // pred: ^bb274 -// CHECK-NEXT: %1106 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1106, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb276 loc(#loc4) +// CHECK-NEXT: %1106 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1106, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb276 loc(#loc8) // CHECK-NEXT: ^bb276: // 2 preds: ^bb274, ^bb275 -// CHECK-NEXT: %1107 = arith.muli %1099, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1108 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1109 = llvm.load %1108 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %1110 = arith.addi %1107, %c63_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1111 = arith.andi %1110, %c-32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1112 = arith.addi %1109, %1111 : i256 loc(#loc4) -// CHECK-NEXT: %1113 = arith.cmpi ugt, %1112, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1114 = arith.cmpi ult, %1112, %1109 : i256 loc(#loc4) -// CHECK-NEXT: %1115 = arith.ori %1113, %1114 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1115, ^bb277, ^bb278 loc(#loc4) +// CHECK-NEXT: %1107 = arith.muli %1099, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1108 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1109 = llvm.load %1108 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %1110 = arith.addi %1107, %c63_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1111 = arith.andi %1110, %c-32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1112 = arith.addi %1109, %1111 : i256 loc(#loc8) +// CHECK-NEXT: %1113 = arith.cmpi ugt, %1112, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1114 = arith.cmpi ult, %1112, %1109 : i256 loc(#loc8) +// CHECK-NEXT: %1115 = arith.ori %1113, %1114 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1115, ^bb277, ^bb278 loc(#loc8) // CHECK-NEXT: ^bb277: // pred: ^bb276 -// CHECK-NEXT: %1116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1116 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1117 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %1117 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1118 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1118, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb278 loc(#loc4) +// CHECK-NEXT: %1116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1116 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1117 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %1117 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1118 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1118, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb278 loc(#loc8) // CHECK-NEXT: ^bb278: // 2 preds: ^bb276, ^bb277 -// CHECK-NEXT: %1119 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1112, %1119 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1120 = llvm.inttoptr %1109 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1099, %1120 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1121 = arith.addi %1109, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb279(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %1119 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1112, %1119 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1120 = llvm.inttoptr %1109 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1099, %1120 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1121 = arith.addi %1109, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb279(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb279(%1122: i256 loc({{.*}}:67:11)): // 2 preds: ^bb278, ^bb282 -// CHECK-NEXT: %1123 = arith.cmpi ult, %1122, %1099 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1123, ^bb280(%1122 : i256), ^bb283 loc(#loc4) +// CHECK-NEXT: %1123 = arith.cmpi ult, %1122, %1099 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1123, ^bb280(%1122 : i256), ^bb283 loc(#loc8) // CHECK-NEXT: ^bb280(%1124: i256 loc({{.*}}:67:11)): // pred: ^bb279 -// CHECK-NEXT: %1125 = arith.muli %1124, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1126 = arith.addi %1100, %1125 : i256 loc(#loc4) -// CHECK-NEXT: %1127 = arith.muli %1124, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1128 = arith.addi %1121, %1127 : i256 loc(#loc4) -// CHECK-NEXT: %1129 = llvm.inttoptr %1126 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1130 = llvm.load %1129 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1131 = arith.andi %1130, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1132 = arith.cmpi ne, %1130, %1131 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1132, ^bb281, ^bb282 loc(#loc4) +// CHECK-NEXT: %1125 = arith.muli %1124, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1126 = arith.addi %1100, %1125 : i256 loc(#loc8) +// CHECK-NEXT: %1127 = arith.muli %1124, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1128 = arith.addi %1121, %1127 : i256 loc(#loc8) +// CHECK-NEXT: %1129 = llvm.inttoptr %1126 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1130 = llvm.load %1129 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1131 = arith.andi %1130, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1132 = arith.cmpi ne, %1130, %1131 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1132, ^bb281, ^bb282 loc(#loc8) // CHECK-NEXT: ^bb281: // pred: ^bb280 -// CHECK-NEXT: %1133 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1133, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb282 loc(#loc4) +// CHECK-NEXT: %1133 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1133, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb282 loc(#loc8) // CHECK-NEXT: ^bb282: // 2 preds: ^bb280, ^bb281 -// CHECK-NEXT: %1134 = llvm.inttoptr %1128 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1131, %1134 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1135 = arith.addi %1124, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb279(%1135 : i256) loc(#loc4) +// CHECK-NEXT: %1134 = llvm.inttoptr %1128 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1131, %1134 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1135 = arith.addi %1124, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb279(%1135 : i256) loc(#loc8) // CHECK-NEXT: ^bb283: // pred: ^bb279 -// CHECK-NEXT: %1136 = llvm.inttoptr %1089 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1109, %1136 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1137 = arith.addi %1, %c2112_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1138 = arith.addi %3, %c800_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1139 = llvm.inttoptr %1137 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1140 = llvm.load %1139 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1141 = "llvm.intrcall"(%c0_i256, %1140) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc4) -// CHECK-NEXT: %1142 = arith.cmpi ne, %1140, %1141 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1142, ^bb284, ^bb285 loc(#loc4) +// CHECK-NEXT: %1136 = llvm.inttoptr %1089 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1109, %1136 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1137 = arith.addi %1, %c2112_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1138 = arith.addi %3, %c800_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1139 = llvm.inttoptr %1137 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1140 = llvm.load %1139 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1141 = "llvm.intrcall"(%c0_i256, %1140) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc8) +// CHECK-NEXT: %1142 = arith.cmpi ne, %1140, %1141 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1142, ^bb284, ^bb285 loc(#loc8) // CHECK-NEXT: ^bb284: // pred: ^bb283 -// CHECK-NEXT: %1143 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1143, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb285 loc(#loc4) +// CHECK-NEXT: %1143 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1143, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb285 loc(#loc8) // CHECK-NEXT: ^bb285: // 2 preds: ^bb283, ^bb284 -// CHECK-NEXT: %1144 = llvm.inttoptr %1138 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1141, %1144 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1145 = arith.addi %1, %c2144_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1146 = arith.addi %3, %c832_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1147 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1148 = llvm.load %1147 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) -// CHECK-NEXT: %1149 = arith.addi %1148, %c1056_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1150 = arith.cmpi ugt, %1149, %c18446744073709551615_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1151 = arith.cmpi ult, %1149, %1148 : i256 loc(#loc4) -// CHECK-NEXT: %1152 = arith.ori %1150, %1151 : i1 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1152, ^bb286, ^bb287 loc(#loc4) +// CHECK-NEXT: %1144 = llvm.inttoptr %1138 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1141, %1144 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1145 = arith.addi %1, %c2144_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1146 = arith.addi %3, %c832_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1147 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1148 = llvm.load %1147 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc8) +// CHECK-NEXT: %1149 = arith.addi %1148, %c1056_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1150 = arith.cmpi ugt, %1149, %c18446744073709551615_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1151 = arith.cmpi ult, %1149, %1148 : i256 loc(#loc8) +// CHECK-NEXT: %1152 = arith.ori %1150, %1151 : i1 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1152, ^bb286, ^bb287 loc(#loc8) // CHECK-NEXT: ^bb286: // pred: ^bb285 -// CHECK-NEXT: %1153 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1153 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1154 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %c65_i256, %1154 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1155 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1155, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb287 loc(#loc4) +// CHECK-NEXT: %1153 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1153 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1154 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %c65_i256, %1154 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1155 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1155, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb287 loc(#loc8) // CHECK-NEXT: ^bb287: // 2 preds: ^bb285, ^bb286 -// CHECK-NEXT: %1156 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1149, %1156 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: cf.br ^bb288(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: %1156 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1149, %1156 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: cf.br ^bb288(%c0_i256 : i256) loc(#loc8) // CHECK-NEXT: ^bb288(%1157: i256 loc({{.*}}:67:11)): // 2 preds: ^bb287, ^bb291 -// CHECK-NEXT: %1158 = arith.cmpi ult, %1157, %c33_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1158, ^bb289(%1157 : i256), ^bb292 loc(#loc4) +// CHECK-NEXT: %1158 = arith.cmpi ult, %1157, %c33_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1158, ^bb289(%1157 : i256), ^bb292 loc(#loc8) // CHECK-NEXT: ^bb289(%1159: i256 loc({{.*}}:67:11)): // pred: ^bb288 -// CHECK-NEXT: %1160 = arith.muli %1159, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1161 = arith.addi %1145, %1160 : i256 loc(#loc4) -// CHECK-NEXT: %1162 = arith.muli %1159, %c32_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1163 = arith.addi %1148, %1162 : i256 loc(#loc4) -// CHECK-NEXT: %1164 = llvm.inttoptr %1161 : i256 to !llvm.ptr<2> loc(#loc4) -// CHECK-NEXT: %1165 = llvm.load %1164 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc4) -// CHECK-NEXT: %1166 = arith.andi %1165, %c255_i256 : i256 loc(#loc4) -// CHECK-NEXT: %1167 = arith.cmpi ne, %1165, %1166 : i256 loc(#loc4) -// CHECK-NEXT: cf.cond_br %1167, ^bb290, ^bb291 loc(#loc4) +// CHECK-NEXT: %1160 = arith.muli %1159, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1161 = arith.addi %1145, %1160 : i256 loc(#loc8) +// CHECK-NEXT: %1162 = arith.muli %1159, %c32_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1163 = arith.addi %1148, %1162 : i256 loc(#loc8) +// CHECK-NEXT: %1164 = llvm.inttoptr %1161 : i256 to !llvm.ptr<2> loc(#loc8) +// CHECK-NEXT: %1165 = llvm.load %1164 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc8) +// CHECK-NEXT: %1166 = arith.andi %1165, %c255_i256 : i256 loc(#loc8) +// CHECK-NEXT: %1167 = arith.cmpi ne, %1165, %1166 : i256 loc(#loc8) +// CHECK-NEXT: cf.cond_br %1167, ^bb290, ^bb291 loc(#loc8) // CHECK-NEXT: ^bb290: // pred: ^bb289 -// CHECK-NEXT: %1168 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: "llvm.intrcall"(%1168, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) -// CHECK-NEXT: cf.br ^bb291 loc(#loc4) +// CHECK-NEXT: %1168 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: "llvm.intrcall"(%1168, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc8) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc8) +// CHECK-NEXT: cf.br ^bb291 loc(#loc8) // CHECK-NEXT: ^bb291: // 2 preds: ^bb289, ^bb290 -// CHECK-NEXT: %1169 = llvm.inttoptr %1163 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1166, %1169 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: %1170 = arith.addi %1159, %c1_i256 : i256 loc(#loc4) -// CHECK-NEXT: cf.br ^bb288(%1170 : i256) loc(#loc4) +// CHECK-NEXT: %1169 = llvm.inttoptr %1163 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1166, %1169 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: %1170 = arith.addi %1159, %c1_i256 : i256 loc(#loc8) +// CHECK-NEXT: cf.br ^bb288(%1170 : i256) loc(#loc8) // CHECK-NEXT: ^bb292: // pred: ^bb288 -// CHECK-NEXT: %1171 = llvm.inttoptr %1146 : i256 to !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: llvm.store %1148, %1171 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) -// CHECK-NEXT: return %3 : i256 loc(#loc5) -// CHECK-NEXT: } loc(#loc2) +// CHECK-NEXT: %1171 = llvm.inttoptr %1146 : i256 to !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: llvm.store %1148, %1171 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc8) +// CHECK-NEXT: return %3 : i256 loc(#loc9) +// CHECK-NEXT: } loc(#loc6) // CHECK-NEXT: func.func @f4_157() -> i256 attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c1056_i256 = arith.constant 1056 : i256 loc(#loc) // CHECK-NEXT: %c57_i256 = arith.constant 57 : i256 loc(#loc) @@ -6719,7 +7125,6 @@ contract Test { // CHECK-NEXT: %c288_i256 = arith.constant 288 : i256 loc(#loc) // CHECK-NEXT: %c256_i256 = arith.constant 256 : i256 loc(#loc) // CHECK-NEXT: %c26959946667150639794667015087019630673637144422540572481103610249215_i256 = arith.constant 26959946667150639794667015087019630673637144422540572481103610249215 : i256 loc(#loc) -// CHECK-NEXT: %c-256_i256 = arith.constant -256 : i256 loc(#loc) // CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) // CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 = arith.constant -26959946667150639794667015087019630673637144422540572481103610249216 : i256 loc(#loc) @@ -6752,1812 +7157,1758 @@ contract Test { // CHECK-NEXT: %c31_i256 = arith.constant 31 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c64_i256 = arith.constant 64 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %2 = arith.addi %1, %c864_i256 : i256 loc(#loc7) -// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc7) -// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc7) +// CHECK-NEXT: %0 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %2 = arith.addi %1, %c864_i256 : i256 loc(#loc2) +// CHECK-NEXT: %3 = arith.cmpi ugt, %2, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %4 = arith.cmpi ult, %2, %1 : i256 loc(#loc2) +// CHECK-NEXT: %5 = arith.ori %3, %4 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc2) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb2 loc(#loc7) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %6 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %7 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %7 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %8 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%8, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb2 loc(#loc2) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %12 = arith.andi %11, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %13 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %12, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %14 = arith.addi %1, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %15 = arith.shrui %11, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %16 = arith.shli %15, %c104_i256 : i256 loc(#loc7) -// CHECK-NEXT: %17 = arith.andi %16, %c-20282409603651670423947251286016_i256 : i256 loc(#loc7) -// CHECK-NEXT: %18 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %17, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %19 = arith.addi %1, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %20 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %22 = arith.addi %21, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %23 = arith.cmpi ugt, %22, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %24 = arith.cmpi ult, %22, %21 : i256 loc(#loc7) -// CHECK-NEXT: %25 = arith.ori %23, %24 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %25, ^bb3, ^bb4 loc(#loc7) +// CHECK-NEXT: %9 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %2, %9 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %10 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %11 = llvm.load %10 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %12 = arith.andi %11, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %13 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %12, %13 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %14 = arith.addi %1, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %15 = arith.shrui %11, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %16 = arith.shli %15, %c104_i256 : i256 loc(#loc2) +// CHECK-NEXT: %17 = arith.andi %16, %c-20282409603651670423947251286016_i256 : i256 loc(#loc2) +// CHECK-NEXT: %18 = llvm.inttoptr %14 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %17, %18 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %19 = arith.addi %1, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %20 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %21 = llvm.load %20 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %22 = arith.addi %21, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %23 = arith.cmpi ugt, %22, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %24 = arith.cmpi ult, %22, %21 : i256 loc(#loc2) +// CHECK-NEXT: %25 = arith.ori %23, %24 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %25, ^bb3, ^bb4 loc(#loc2) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %27 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%28, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb4 loc(#loc7) +// CHECK-NEXT: %26 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %26 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %27 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %27 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %28 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%28, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb4 loc(#loc2) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %29 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %22, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb5(%c0_i256, %21, %c1_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %29 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %22, %29 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb5(%c0_i256, %21, %c1_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb5(%30: i256 loc({{.*}}:47:2), %31: i256 loc({{.*}}:47:2), %32: i256 loc({{.*}}:47:2), %33: i256 loc({{.*}}:47:2)): // 2 preds: ^bb4, ^bb9 -// CHECK-NEXT: %34 = arith.cmpi ult, %30, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %34, ^bb6(%30, %31, %32, %33 : i256, i256, i256, i256), ^bb10(%31, %32, %33 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %34 = arith.cmpi ult, %30, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %34, ^bb6(%30, %31, %32, %33 : i256, i256, i256, i256), ^bb10(%31, %32, %33 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb6(%35: i256 loc({{.*}}:47:2), %36: i256 loc({{.*}}:47:2), %37: i256 loc({{.*}}:47:2), %38: i256 loc({{.*}}:47:2)): // pred: ^bb5 -// CHECK-NEXT: %39 = llvm.inttoptr %37 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %40 = llvm.load %39 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb7(%c0_i256, %36, %c0_i256 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %39 = llvm.inttoptr %37 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %40 = llvm.load %39 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%c0_i256, %36, %c0_i256 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb7(%41: i256 loc({{.*}}:47:2), %42: i256 loc({{.*}}:47:2), %43: i256 loc({{.*}}:47:2)): // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %44 = arith.cmpi ult, %41, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %44, ^bb8(%41, %42, %43 : i256, i256, i256), ^bb9(%42 : i256) loc(#loc7) +// CHECK-NEXT: %44 = arith.cmpi ult, %41, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %44, ^bb8(%41, %42, %43 : i256, i256, i256), ^bb9(%42 : i256) loc(#loc2) // CHECK-NEXT: ^bb8(%45: i256 loc({{.*}}:47:2), %46: i256 loc({{.*}}:47:2), %47: i256 loc({{.*}}:47:2)): // pred: ^bb7 -// CHECK-NEXT: %48 = arith.shrui %40, %47 : i256 loc(#loc7) -// CHECK-NEXT: %49 = arith.andi %48, %c4722366482869645213695_i256 : i256 loc(#loc7) -// CHECK-NEXT: %50 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %49, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %51 = arith.addi %46, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %52 = arith.addi %47, %c72_i256 : i256 loc(#loc7) -// CHECK-NEXT: %53 = arith.addi %45, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb7(%53, %51, %52 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) +// CHECK-NEXT: %48 = arith.shrui %40, %47 : i256 loc(#loc2) +// CHECK-NEXT: %49 = arith.andi %48, %c4722366482869645213695_i256 : i256 loc(#loc2) +// CHECK-NEXT: %50 = llvm.inttoptr %46 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %49, %50 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %51 = arith.addi %46, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %52 = arith.addi %47, %c72_i256 : i256 loc(#loc2) +// CHECK-NEXT: %53 = arith.addi %45, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb7(%53, %51, %52 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) // CHECK-NEXT: ^bb9(%54: i256 loc({{.*}}:47:2)): // pred: ^bb7 -// CHECK-NEXT: %55 = arith.addi %37, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %56 = arith.addi %38, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: %57 = arith.addi %35, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb5(%57, %54, %55, %56 : i256, i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %55 = arith.addi %37, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %56 = arith.addi %38, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: %57 = arith.addi %35, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb5(%57, %54, %55, %56 : i256, i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb10(%58: i256 loc({{.*}}:47:2), %59: i256 loc({{.*}}:47:2), %60: i256 loc({{.*}}:47:2)): // pred: ^bb5 -// CHECK-NEXT: %61 = arith.cmpi ult, %60, %c7_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %61, ^bb11, ^bb14 loc(#loc7) +// CHECK-NEXT: %61 = arith.cmpi ult, %60, %c7_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %61, ^bb11, ^bb14 loc(#loc2) // CHECK-NEXT: ^bb11: // pred: ^bb10 -// CHECK-NEXT: %62 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %63 = llvm.load %62 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb12(%60, %58, %c0_i256 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %62 = llvm.inttoptr %59 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %63 = llvm.load %62 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb12(%60, %58, %c0_i256 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb12(%64: i256 loc({{.*}}:47:2), %65: i256 loc({{.*}}:47:2), %66: i256 loc({{.*}}:47:2)): // 2 preds: ^bb11, ^bb13 -// CHECK-NEXT: %67 = arith.cmpi ult, %64, %c7_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %67, ^bb13(%64, %65, %66 : i256, i256, i256), ^bb14 loc(#loc7) +// CHECK-NEXT: %67 = arith.cmpi ult, %64, %c7_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %67, ^bb13(%64, %65, %66 : i256, i256, i256), ^bb14 loc(#loc2) // CHECK-NEXT: ^bb13(%68: i256 loc({{.*}}:47:2), %69: i256 loc({{.*}}:47:2), %70: i256 loc({{.*}}:47:2)): // pred: ^bb12 -// CHECK-NEXT: %71 = arith.shrui %63, %70 : i256 loc(#loc7) -// CHECK-NEXT: %72 = arith.andi %71, %c4722366482869645213695_i256 : i256 loc(#loc7) -// CHECK-NEXT: %73 = llvm.inttoptr %69 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %72, %73 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %74 = arith.addi %69, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %75 = arith.addi %70, %c72_i256 : i256 loc(#loc7) -// CHECK-NEXT: %76 = arith.addi %68, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb12(%76, %74, %75 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) +// CHECK-NEXT: %71 = arith.shrui %63, %70 : i256 loc(#loc2) +// CHECK-NEXT: %72 = arith.andi %71, %c4722366482869645213695_i256 : i256 loc(#loc2) +// CHECK-NEXT: %73 = llvm.inttoptr %69 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %72, %73 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %74 = arith.addi %69, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %75 = arith.addi %70, %c72_i256 : i256 loc(#loc2) +// CHECK-NEXT: %76 = arith.addi %68, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb12(%76, %74, %75 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) // CHECK-NEXT: ^bb14: // 2 preds: ^bb10, ^bb12 -// CHECK-NEXT: %77 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %21, %77 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %78 = arith.addi %1, %c96_i256 : i256 loc(#loc7) -// CHECK-NEXT: %79 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %80 = llvm.load %79 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %81 = arith.addi %80, %c96_i256 : i256 loc(#loc7) -// CHECK-NEXT: %82 = arith.cmpi ugt, %81, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %83 = arith.cmpi ult, %81, %80 : i256 loc(#loc7) -// CHECK-NEXT: %84 = arith.ori %82, %83 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %84, ^bb15, ^bb16 loc(#loc7) +// CHECK-NEXT: %77 = llvm.inttoptr %19 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %21, %77 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %78 = arith.addi %1, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %79 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %80 = llvm.load %79 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %81 = arith.addi %80, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %82 = arith.cmpi ugt, %81, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %83 = arith.cmpi ult, %81, %80 : i256 loc(#loc2) +// CHECK-NEXT: %84 = arith.ori %82, %83 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %84, ^bb15, ^bb16 loc(#loc2) // CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %85 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %85 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %86 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%87, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb16 loc(#loc7) +// CHECK-NEXT: %85 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %85 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %86 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %86 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %87 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%87, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb16 loc(#loc2) // CHECK-NEXT: ^bb16: // 2 preds: ^bb14, ^bb15 -// CHECK-NEXT: %88 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %81, %88 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb17(%c0_i256 : i256) loc(#loc7) +// CHECK-NEXT: %88 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %81, %88 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb17(%c0_i256 : i256) loc(#loc2) // CHECK-NEXT: ^bb17(%89: i256 loc({{.*}}:47:2)): // 2 preds: ^bb16, ^bb42 -// CHECK-NEXT: %90 = arith.cmpi ult, %89, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %90, ^bb18(%89 : i256), ^bb43 loc(#loc7) +// CHECK-NEXT: %90 = arith.cmpi ult, %89, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %90, ^bb18(%89 : i256), ^bb43 loc(#loc2) // CHECK-NEXT: ^bb18(%91: i256 loc({{.*}}:47:2)): // pred: ^bb17 -// CHECK-NEXT: %92 = arith.muli %91, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: %93 = arith.addi %92, %c4_i256 : i256 loc(#loc7) -// CHECK-NEXT: %94 = arith.muli %91, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %95 = arith.addi %80, %94 : i256 loc(#loc7) -// CHECK-NEXT: %96 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %97 = llvm.load %96 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %98 = arith.addi %97, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %99 = arith.cmpi ugt, %98, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %100 = arith.cmpi ult, %98, %97 : i256 loc(#loc7) -// CHECK-NEXT: %101 = arith.ori %99, %100 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %101, ^bb19, ^bb20 loc(#loc7) +// CHECK-NEXT: %92 = arith.muli %91, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: %93 = arith.addi %92, %c4_i256 : i256 loc(#loc2) +// CHECK-NEXT: %94 = arith.muli %91, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %95 = arith.addi %80, %94 : i256 loc(#loc2) +// CHECK-NEXT: %96 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %97 = llvm.load %96 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %98 = arith.addi %97, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %99 = arith.cmpi ugt, %98, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %100 = arith.cmpi ult, %98, %97 : i256 loc(#loc2) +// CHECK-NEXT: %101 = arith.ori %99, %100 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %101, ^bb19, ^bb20 loc(#loc2) // CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %102 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %103 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %104 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%104, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb20 loc(#loc7) +// CHECK-NEXT: %102 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %102 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %103 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %103 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %104 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%104, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb20 loc(#loc2) // CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// CHECK-NEXT: %105 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %98, %105 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %106 = llvm.inttoptr %93 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %107 = llvm.load %106 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %108 = "llvm.intrcall"(%c8_i256, %107) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %109 = "llvm.intrcall"(%c8_i256, %108) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %110 = llvm.inttoptr %97 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %109, %110 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %111 = arith.addi %97, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %112 = arith.shrui %107, %c72_i256 : i256 loc(#loc7) -// CHECK-NEXT: %113 = arith.andi %112, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %114 = llvm.inttoptr %111 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %113, %114 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %115 = arith.addi %97, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %116 = arith.addi %92, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: %117 = llvm.inttoptr %116 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %118 = llvm.load %117 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %119 = arith.muli %118, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %120 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %121 = llvm.load %120 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %122 = arith.addi %119, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %123 = arith.andi %122, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %124 = arith.addi %121, %123 : i256 loc(#loc7) -// CHECK-NEXT: %125 = arith.cmpi ugt, %124, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %126 = arith.cmpi ult, %124, %121 : i256 loc(#loc7) -// CHECK-NEXT: %127 = arith.ori %125, %126 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %127, ^bb21, ^bb22 loc(#loc7) +// CHECK-NEXT: %105 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %98, %105 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %106 = llvm.inttoptr %93 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %107 = llvm.load %106 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %108 = "llvm.intrcall"(%c8_i256, %107) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %109 = "llvm.intrcall"(%c8_i256, %108) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %110 = llvm.inttoptr %97 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %109, %110 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %111 = arith.addi %97, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %112 = arith.shrui %107, %c72_i256 : i256 loc(#loc2) +// CHECK-NEXT: %113 = arith.andi %112, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %114 = llvm.inttoptr %111 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %113, %114 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %115 = arith.addi %97, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %116 = arith.addi %92, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: %117 = llvm.inttoptr %116 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %118 = llvm.load %117 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %119 = arith.muli %118, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %120 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %121 = llvm.load %120 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %122 = arith.addi %119, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %123 = arith.andi %122, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %124 = arith.addi %121, %123 : i256 loc(#loc2) +// CHECK-NEXT: %125 = arith.cmpi ugt, %124, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %126 = arith.cmpi ult, %124, %121 : i256 loc(#loc2) +// CHECK-NEXT: %127 = arith.ori %125, %126 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %127, ^bb21, ^bb22 loc(#loc2) // CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %128 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %128 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %129 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %129 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %130 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%130, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb22 loc(#loc7) +// CHECK-NEXT: %128 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %128 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %129 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %129 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %130 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%130, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb22 loc(#loc2) // CHECK-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// CHECK-NEXT: %131 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %124, %131 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %132 = llvm.inttoptr %121 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %118, %132 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %133 = arith.addi %121, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %134 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %116, %134 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %135 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %136 = "llvm.intrcall"(%135, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb23(%c0_i256 : i256) loc(#loc7) +// CHECK-NEXT: %131 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %124, %131 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %132 = llvm.inttoptr %121 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %118, %132 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %133 = arith.addi %121, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %134 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %116, %134 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %135 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %136 = "llvm.intrcall"(%135, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb23(%c0_i256 : i256) loc(#loc2) // CHECK-NEXT: ^bb23(%137: i256 loc({{.*}}:47:2)): // 2 preds: ^bb22, ^bb36 -// CHECK-NEXT: %138 = arith.cmpi ult, %137, %118 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %138, ^bb24(%137 : i256), ^bb37 loc(#loc7) +// CHECK-NEXT: %138 = arith.cmpi ult, %137, %118 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %138, ^bb24(%137 : i256), ^bb37 loc(#loc2) // CHECK-NEXT: ^bb24(%139: i256 loc({{.*}}:47:2)): // pred: ^bb23 -// CHECK-NEXT: %140 = arith.addi %136, %139 : i256 loc(#loc7) -// CHECK-NEXT: %141 = arith.muli %139, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %142 = arith.addi %133, %141 : i256 loc(#loc7) -// CHECK-NEXT: %143 = llvm.inttoptr %140 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %144 = llvm.load %143 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %145 = arith.muli %144, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %146 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %147 = llvm.load %146 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %148 = arith.addi %145, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %149 = arith.andi %148, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %150 = arith.addi %147, %149 : i256 loc(#loc7) -// CHECK-NEXT: %151 = arith.cmpi ugt, %150, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %152 = arith.cmpi ult, %150, %147 : i256 loc(#loc7) -// CHECK-NEXT: %153 = arith.ori %151, %152 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %153, ^bb25, ^bb26 loc(#loc7) +// CHECK-NEXT: %140 = arith.addi %136, %139 : i256 loc(#loc2) +// CHECK-NEXT: %141 = arith.muli %139, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %142 = arith.addi %133, %141 : i256 loc(#loc2) +// CHECK-NEXT: %143 = llvm.inttoptr %140 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %144 = llvm.load %143 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %145 = arith.muli %144, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %146 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %147 = llvm.load %146 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %148 = arith.addi %145, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %149 = arith.andi %148, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %150 = arith.addi %147, %149 : i256 loc(#loc2) +// CHECK-NEXT: %151 = arith.cmpi ugt, %150, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %152 = arith.cmpi ult, %150, %147 : i256 loc(#loc2) +// CHECK-NEXT: %153 = arith.ori %151, %152 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %153, ^bb25, ^bb26 loc(#loc2) // CHECK-NEXT: ^bb25: // pred: ^bb24 -// CHECK-NEXT: %154 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %154 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %155 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %155 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %156 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%156, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb26 loc(#loc7) +// CHECK-NEXT: %154 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %154 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %155 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %155 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %156 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%156, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb26 loc(#loc2) // CHECK-NEXT: ^bb26: // 2 preds: ^bb24, ^bb25 -// CHECK-NEXT: %157 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %150, %157 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %158 = llvm.inttoptr %147 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %144, %158 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %140, %159 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %160 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %161 = "llvm.intrcall"(%160, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %162 = llvm.inttoptr %140 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %163 = llvm.load %162 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %164 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %140, %164 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %166 = "llvm.intrcall"(%165, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %167 = llvm.inttoptr %147 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %163, %167 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %168 = arith.addi %147, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %169 = arith.cmpi uge, %163, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %170 = arith.subi %163, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %171 = arith.select %169, %170, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb27(%c0_i256, %168, %166, %c0_i256 : i256, i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %157 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %150, %157 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %158 = llvm.inttoptr %147 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %144, %158 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %140, %159 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %160 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %161 = "llvm.intrcall"(%160, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %162 = llvm.inttoptr %140 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %163 = llvm.load %162 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %164 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %140, %164 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %166 = "llvm.intrcall"(%165, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %167 = llvm.inttoptr %147 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %163, %167 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %168 = arith.addi %147, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %169 = arith.cmpi uge, %163, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %170 = arith.subi %163, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %171 = arith.select %169, %170, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb27(%c0_i256, %168, %166, %c0_i256 : i256, i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb27(%172: i256 loc({{.*}}:47:2), %173: i256 loc({{.*}}:47:2), %174: i256 loc({{.*}}:47:2), %175: i256 loc({{.*}}:47:2)): // 2 preds: ^bb26, ^bb31 -// CHECK-NEXT: %176 = arith.cmpi ult, %172, %171 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %176, ^bb28(%172, %173, %174, %175 : i256, i256, i256, i256), ^bb32(%173, %174, %175 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %176 = arith.cmpi ult, %172, %171 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %176, ^bb28(%172, %173, %174, %175 : i256, i256, i256, i256), ^bb32(%173, %174, %175 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb28(%177: i256 loc({{.*}}:47:2), %178: i256 loc({{.*}}:47:2), %179: i256 loc({{.*}}:47:2), %180: i256 loc({{.*}}:47:2)): // pred: ^bb27 -// CHECK-NEXT: %181 = llvm.inttoptr %179 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %182 = llvm.load %181 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb29(%c0_i256, %178, %c0_i256 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %181 = llvm.inttoptr %179 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %182 = llvm.load %181 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb29(%c0_i256, %178, %c0_i256 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb29(%183: i256 loc({{.*}}:47:2), %184: i256 loc({{.*}}:47:2), %185: i256 loc({{.*}}:47:2)): // 2 preds: ^bb28, ^bb30 -// CHECK-NEXT: %186 = arith.cmpi ult, %183, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %186, ^bb30(%183, %184, %185 : i256, i256, i256), ^bb31(%184 : i256) loc(#loc7) +// CHECK-NEXT: %186 = arith.cmpi ult, %183, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %186, ^bb30(%183, %184, %185 : i256, i256, i256), ^bb31(%184 : i256) loc(#loc2) // CHECK-NEXT: ^bb30(%187: i256 loc({{.*}}:47:2), %188: i256 loc({{.*}}:47:2), %189: i256 loc({{.*}}:47:2)): // pred: ^bb29 -// CHECK-NEXT: %190 = arith.shrui %182, %189 : i256 loc(#loc7) -// CHECK-NEXT: %191 = arith.andi %190, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %192 = arith.cmpi ne, %191, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %193 = arith.extui %192 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %194 = llvm.inttoptr %188 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %193, %194 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %195 = arith.addi %188, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %196 = arith.addi %189, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %197 = arith.addi %187, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb29(%197, %195, %196 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %190 = arith.shrui %182, %189 : i256 loc(#loc2) +// CHECK-NEXT: %191 = arith.andi %190, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %192 = arith.cmpi ne, %191, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %193 = arith.extui %192 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %194 = llvm.inttoptr %188 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %193, %194 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %195 = arith.addi %188, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %196 = arith.addi %189, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %197 = arith.addi %187, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb29(%197, %195, %196 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb31(%198: i256 loc({{.*}}:47:2)): // pred: ^bb29 -// CHECK-NEXT: %199 = arith.addi %179, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %200 = arith.addi %180, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %201 = arith.addi %177, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb27(%201, %198, %199, %200 : i256, i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %199 = arith.addi %179, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %200 = arith.addi %180, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %201 = arith.addi %177, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb27(%201, %198, %199, %200 : i256, i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb32(%202: i256 loc({{.*}}:47:2), %203: i256 loc({{.*}}:47:2), %204: i256 loc({{.*}}:47:2)): // pred: ^bb27 -// CHECK-NEXT: %205 = arith.cmpi ult, %204, %163 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %205, ^bb33, ^bb36 loc(#loc7) +// CHECK-NEXT: %205 = arith.cmpi ult, %204, %163 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %205, ^bb33, ^bb36 loc(#loc2) // CHECK-NEXT: ^bb33: // pred: ^bb32 -// CHECK-NEXT: %206 = llvm.inttoptr %203 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %207 = llvm.load %206 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb34(%204, %202, %c0_i256 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %206 = llvm.inttoptr %203 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %207 = llvm.load %206 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb34(%204, %202, %c0_i256 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb34(%208: i256 loc({{.*}}:47:2), %209: i256 loc({{.*}}:47:2), %210: i256 loc({{.*}}:47:2)): // 2 preds: ^bb33, ^bb35 -// CHECK-NEXT: %211 = arith.cmpi ult, %208, %163 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %211, ^bb35(%208, %209, %210 : i256, i256, i256), ^bb36 loc(#loc7) +// CHECK-NEXT: %211 = arith.cmpi ult, %208, %163 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %211, ^bb35(%208, %209, %210 : i256, i256, i256), ^bb36 loc(#loc2) // CHECK-NEXT: ^bb35(%212: i256 loc({{.*}}:47:2), %213: i256 loc({{.*}}:47:2), %214: i256 loc({{.*}}:47:2)): // pred: ^bb34 -// CHECK-NEXT: %215 = arith.shrui %207, %214 : i256 loc(#loc7) -// CHECK-NEXT: %216 = arith.andi %215, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %217 = arith.cmpi ne, %216, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %218 = arith.extui %217 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %219 = llvm.inttoptr %213 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %218, %219 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %220 = arith.addi %213, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %221 = arith.addi %214, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %222 = arith.addi %212, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb34(%222, %220, %221 : i256, i256, i256) loc(#loc7) +// CHECK-NEXT: %215 = arith.shrui %207, %214 : i256 loc(#loc2) +// CHECK-NEXT: %216 = arith.andi %215, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %217 = arith.cmpi ne, %216, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %218 = arith.extui %217 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %219 = llvm.inttoptr %213 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %218, %219 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %220 = arith.addi %213, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %221 = arith.addi %214, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %222 = arith.addi %212, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb34(%222, %220, %221 : i256, i256, i256) loc(#loc2) // CHECK-NEXT: ^bb36: // 2 preds: ^bb32, ^bb34 -// CHECK-NEXT: %223 = llvm.inttoptr %142 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %147, %223 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %224 = arith.addi %139, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb23(%224 : i256) loc(#loc7) +// CHECK-NEXT: %223 = llvm.inttoptr %142 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %147, %223 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %224 = arith.addi %139, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb23(%224 : i256) loc(#loc2) // CHECK-NEXT: ^bb37: // pred: ^bb23 -// CHECK-NEXT: %225 = llvm.inttoptr %115 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %121, %225 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %226 = arith.addi %97, %c96_i256 : i256 loc(#loc7) -// CHECK-NEXT: %227 = arith.addi %92, %c6_i256 : i256 loc(#loc7) -// CHECK-NEXT: %228 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %229 = llvm.load %228 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %230 = arith.addi %229, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %231 = arith.cmpi ugt, %230, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %232 = arith.cmpi ult, %230, %229 : i256 loc(#loc7) -// CHECK-NEXT: %233 = arith.ori %231, %232 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %233, ^bb38, ^bb39 loc(#loc7) +// CHECK-NEXT: %225 = llvm.inttoptr %115 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %121, %225 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %226 = arith.addi %97, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %227 = arith.addi %92, %c6_i256 : i256 loc(#loc2) +// CHECK-NEXT: %228 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %229 = llvm.load %228 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %230 = arith.addi %229, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %231 = arith.cmpi ugt, %230, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %232 = arith.cmpi ult, %230, %229 : i256 loc(#loc2) +// CHECK-NEXT: %233 = arith.ori %231, %232 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %233, ^bb38, ^bb39 loc(#loc2) // CHECK-NEXT: ^bb38: // pred: ^bb37 -// CHECK-NEXT: %234 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %234 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %235 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %235 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %236 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%236, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb39 loc(#loc7) +// CHECK-NEXT: %234 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %234 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %235 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %235 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %236 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%236, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb39 loc(#loc2) // CHECK-NEXT: ^bb39: // 2 preds: ^bb37, ^bb38 -// CHECK-NEXT: %237 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %230, %237 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb40(%c0_i256 : i256) loc(#loc7) +// CHECK-NEXT: %237 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %230, %237 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb40(%c0_i256 : i256) loc(#loc2) // CHECK-NEXT: ^bb40(%238: i256 loc({{.*}}:47:2)): // 2 preds: ^bb39, ^bb41 -// CHECK-NEXT: %239 = arith.cmpi ult, %238, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %239, ^bb41(%238 : i256), ^bb42 loc(#loc7) +// CHECK-NEXT: %239 = arith.cmpi ult, %238, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %239, ^bb41(%238 : i256), ^bb42 loc(#loc2) // CHECK-NEXT: ^bb41(%240: i256 loc({{.*}}:47:2)): // pred: ^bb40 -// CHECK-NEXT: %241 = arith.addi %227, %240 : i256 loc(#loc7) -// CHECK-NEXT: %242 = arith.muli %240, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %243 = arith.addi %229, %242 : i256 loc(#loc7) -// CHECK-NEXT: %244 = llvm.inttoptr %241 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %245 = llvm.load %244 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %246 = arith.andi %245, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc7) -// CHECK-NEXT: %247 = llvm.inttoptr %243 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %246, %247 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %248 = arith.addi %240, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb40(%248 : i256) loc(#loc7) +// CHECK-NEXT: %241 = arith.addi %227, %240 : i256 loc(#loc2) +// CHECK-NEXT: %242 = arith.muli %240, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %243 = arith.addi %229, %242 : i256 loc(#loc2) +// CHECK-NEXT: %244 = llvm.inttoptr %241 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %245 = llvm.load %244 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %246 = arith.andi %245, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc2) +// CHECK-NEXT: %247 = llvm.inttoptr %243 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %246, %247 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %248 = arith.addi %240, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb40(%248 : i256) loc(#loc2) // CHECK-NEXT: ^bb42: // pred: ^bb40 -// CHECK-NEXT: %249 = llvm.inttoptr %226 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %229, %249 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %250 = arith.addi %97, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %251 = arith.addi %92, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %252 = llvm.inttoptr %251 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %253 = llvm.load %252 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %254 = "llvm.intrcall"(%c23_i256, %253) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %255 = "llvm.intrcall"(%c23_i256, %254) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %256 = llvm.inttoptr %250 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %255, %256 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %257 = arith.addi %97, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %258 = arith.shrui %253, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %259 = arith.andi %258, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %260 = llvm.inttoptr %257 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %259, %260 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %261 = arith.addi %97, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %262 = arith.shrui %253, %c200_i256 : i256 loc(#loc7) -// CHECK-NEXT: %263 = arith.shli %262, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %264 = arith.andi %263, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc7) -// CHECK-NEXT: %265 = llvm.inttoptr %261 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %264, %265 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %266 = llvm.inttoptr %95 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %97, %266 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %267 = arith.addi %91, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb17(%267 : i256) loc(#loc7) +// CHECK-NEXT: %249 = llvm.inttoptr %226 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %229, %249 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %250 = arith.addi %97, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %251 = arith.addi %92, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %252 = llvm.inttoptr %251 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %253 = llvm.load %252 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %254 = "llvm.intrcall"(%c23_i256, %253) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %255 = "llvm.intrcall"(%c23_i256, %254) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %256 = llvm.inttoptr %250 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %255, %256 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %257 = arith.addi %97, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %258 = arith.shrui %253, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %259 = arith.andi %258, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %260 = llvm.inttoptr %257 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %259, %260 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %261 = arith.addi %97, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %262 = arith.shrui %253, %c200_i256 : i256 loc(#loc2) +// CHECK-NEXT: %263 = arith.shli %262, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %264 = arith.andi %263, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc2) +// CHECK-NEXT: %265 = llvm.inttoptr %261 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %264, %265 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %266 = llvm.inttoptr %95 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %97, %266 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %267 = arith.addi %91, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb17(%267 : i256) loc(#loc2) // CHECK-NEXT: ^bb43: // pred: ^bb17 -// CHECK-NEXT: %268 = llvm.inttoptr %78 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %80, %268 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %269 = arith.addi %1, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %270 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %271 = llvm.load %270 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %272 = arith.shrui %271, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %273 = arith.andi %271, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %274 = arith.cmpi eq, %273, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %275 = arith.andi %272, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %276 = arith.select %274, %275, %272 : i256 loc(#loc7) -// CHECK-NEXT: %277 = arith.cmpi ult, %276, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %278 = arith.extui %277 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %279 = arith.cmpi eq, %273, %278 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %279, ^bb44, ^bb45 loc(#loc7) +// CHECK-NEXT: %268 = llvm.inttoptr %78 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %80, %268 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %269 = arith.addi %1, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %270 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %271 = llvm.load %270 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %272 = arith.shrui %271, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %273 = arith.andi %271, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %274 = arith.cmpi eq, %273, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %275 = arith.andi %272, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %276 = arith.select %274, %275, %272 : i256 loc(#loc2) +// CHECK-NEXT: %277 = arith.cmpi ult, %276, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %278 = arith.extui %277 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %279 = arith.cmpi eq, %273, %278 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %279, ^bb44, ^bb45 loc(#loc2) // CHECK-NEXT: ^bb44: // pred: ^bb43 -// CHECK-NEXT: %280 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %280 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %281 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %281 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %282 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%282, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb45 loc(#loc7) +// CHECK-NEXT: %280 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %280 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %281 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %281 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %282 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%282, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb45 loc(#loc2) // CHECK-NEXT: ^bb45: // 2 preds: ^bb43, ^bb44 -// CHECK-NEXT: %283 = arith.addi %276, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %284 = arith.andi %283, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %285 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %286 = llvm.load %285 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %287 = arith.addi %284, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %288 = arith.andi %287, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %289 = arith.addi %286, %288 : i256 loc(#loc7) -// CHECK-NEXT: %290 = arith.cmpi ugt, %289, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %291 = arith.cmpi ult, %289, %286 : i256 loc(#loc7) -// CHECK-NEXT: %292 = arith.ori %290, %291 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %292, ^bb46, ^bb47 loc(#loc7) +// CHECK-NEXT: %283 = arith.addi %276, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %284 = arith.andi %283, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %285 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %286 = llvm.load %285 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %287 = arith.addi %284, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %288 = arith.andi %287, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %289 = arith.addi %286, %288 : i256 loc(#loc2) +// CHECK-NEXT: %290 = arith.cmpi ugt, %289, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %291 = arith.cmpi ult, %289, %286 : i256 loc(#loc2) +// CHECK-NEXT: %292 = arith.ori %290, %291 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %292, ^bb46, ^bb47 loc(#loc2) // CHECK-NEXT: ^bb46: // pred: ^bb45 -// CHECK-NEXT: %293 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %293 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %294 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %294 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %295 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%295, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb47 loc(#loc7) +// CHECK-NEXT: %293 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %293 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %294 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %294 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %295 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%295, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb47 loc(#loc2) // CHECK-NEXT: ^bb47: // 2 preds: ^bb45, ^bb46 -// CHECK-NEXT: %296 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %289, %296 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %297 = llvm.inttoptr %286 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %276, %297 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %298 = arith.addi %286, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %299 = llvm.inttoptr %286 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %276, %299 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %300 = arith.andi %271, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %301 = arith.cmpi eq, %300, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %301, ^bb51, ^bb48 loc(#loc7) +// CHECK-NEXT: %296 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %289, %296 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %297 = llvm.inttoptr %286 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %276, %297 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %298 = arith.addi %286, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %299 = llvm.inttoptr %286 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %276, %299 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c19_i256, %271, %276, %298) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %300 = llvm.inttoptr %269 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %286, %300 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %301 = arith.addi %1, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %302 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %303 = llvm.load %302 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %304 = arith.muli %303, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %305 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %306 = llvm.load %305 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %307 = arith.addi %304, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %308 = arith.andi %307, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %309 = arith.addi %306, %308 : i256 loc(#loc2) +// CHECK-NEXT: %310 = arith.cmpi ugt, %309, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %311 = arith.cmpi ult, %309, %306 : i256 loc(#loc2) +// CHECK-NEXT: %312 = arith.ori %310, %311 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %312, ^bb48, ^bb49 loc(#loc2) // CHECK-NEXT: ^bb48: // pred: ^bb47 -// CHECK-NEXT: %302 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c19_i256, %302 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %303 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %304 = "llvm.intrcall"(%303, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb49(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb49(%305: i256 loc({{.*}}:47:2)): // 2 preds: ^bb48, ^bb50 -// CHECK-NEXT: %306 = arith.cmpi ult, %305, %276 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %306, ^bb50(%305 : i256), ^bb52 loc(#loc7) -// CHECK-NEXT: ^bb50(%307: i256 loc({{.*}}:47:2)): // pred: ^bb49 -// CHECK-NEXT: %308 = arith.divui %307, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %309 = arith.addi %304, %308 : i256 loc(#loc7) -// CHECK-NEXT: %310 = llvm.inttoptr %309 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %311 = llvm.load %310 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %312 = arith.addi %298, %307 : i256 loc(#loc7) -// CHECK-NEXT: %313 = llvm.inttoptr %312 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %311, %313 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %314 = arith.addi %307, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb49(%314 : i256) loc(#loc7) -// CHECK-NEXT: ^bb51: // pred: ^bb47 -// CHECK-NEXT: %315 = arith.andi %271, %c-256_i256 : i256 loc(#loc7) -// CHECK-NEXT: %316 = llvm.inttoptr %298 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %315, %316 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb52 loc(#loc7) -// CHECK-NEXT: ^bb52: // 2 preds: ^bb49, ^bb51 -// CHECK-NEXT: %317 = llvm.inttoptr %269 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %286, %317 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %318 = arith.addi %1, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %319 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %320 = llvm.load %319 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %321 = arith.muli %320, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %322 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %323 = llvm.load %322 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %324 = arith.addi %321, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %325 = arith.andi %324, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %326 = arith.addi %323, %325 : i256 loc(#loc7) -// CHECK-NEXT: %327 = arith.cmpi ugt, %326, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %328 = arith.cmpi ult, %326, %323 : i256 loc(#loc7) -// CHECK-NEXT: %329 = arith.ori %327, %328 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %329, ^bb53, ^bb54 loc(#loc7) +// CHECK-NEXT: %313 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %313 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %314 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %314 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %315 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%315, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb49 loc(#loc2) +// CHECK-NEXT: ^bb49: // 2 preds: ^bb47, ^bb48 +// CHECK-NEXT: %316 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %309, %316 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %317 = llvm.inttoptr %306 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %303, %317 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %318 = arith.addi %306, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %319 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c20_i256, %319 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %320 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %321 = "llvm.intrcall"(%320, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb50(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb50(%322: i256 loc({{.*}}:47:2)): // 2 preds: ^bb49, ^bb51 +// CHECK-NEXT: %323 = arith.cmpi ult, %322, %303 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %323, ^bb51(%322 : i256), ^bb52 loc(#loc2) +// CHECK-NEXT: ^bb51(%324: i256 loc({{.*}}:47:2)): // pred: ^bb50 +// CHECK-NEXT: %325 = arith.addi %321, %324 : i256 loc(#loc2) +// CHECK-NEXT: %326 = arith.muli %324, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %327 = arith.addi %318, %326 : i256 loc(#loc2) +// CHECK-NEXT: %328 = llvm.inttoptr %325 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %329 = llvm.load %328 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %330 = llvm.inttoptr %327 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %329, %330 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %331 = arith.addi %324, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb50(%331 : i256) loc(#loc2) +// CHECK-NEXT: ^bb52: // pred: ^bb50 +// CHECK-NEXT: %332 = llvm.inttoptr %301 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %306, %332 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %333 = arith.addi %1, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %334 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %335 = llvm.load %334 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %336 = llvm.inttoptr %333 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %335, %336 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %337 = arith.addi %1, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %338 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %339 = llvm.load %338 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %340 = arith.andi %339, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc2) +// CHECK-NEXT: %341 = llvm.inttoptr %337 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %340, %341 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %342 = arith.addi %1, %c256_i256 : i256 loc(#loc2) +// CHECK-NEXT: %343 = arith.shrui %339, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %344 = arith.andi %343, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %345 = arith.cmpi ne, %344, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %346 = arith.extui %345 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %347 = llvm.inttoptr %342 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %346, %347 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %348 = arith.addi %1, %c288_i256 : i256 loc(#loc2) +// CHECK-NEXT: %349 = arith.shrui %339, %c232_i256 : i256 loc(#loc2) +// CHECK-NEXT: %350 = arith.andi %349, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %351 = arith.cmpi ugt, %350, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %351, ^bb53, ^bb54 loc(#loc2) // CHECK-NEXT: ^bb53: // pred: ^bb52 -// CHECK-NEXT: %330 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %330 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %331 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %331 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %332 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%332, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb54 loc(#loc7) +// CHECK-NEXT: %352 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %352 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %353 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c33_i256, %353 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %354 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%354, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb54 loc(#loc2) // CHECK-NEXT: ^bb54: // 2 preds: ^bb52, ^bb53 -// CHECK-NEXT: %333 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %326, %333 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %334 = llvm.inttoptr %323 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %320, %334 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %335 = arith.addi %323, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %336 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c20_i256, %336 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %337 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %338 = "llvm.intrcall"(%337, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb55(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb55(%339: i256 loc({{.*}}:47:2)): // 2 preds: ^bb54, ^bb56 -// CHECK-NEXT: %340 = arith.cmpi ult, %339, %320 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %340, ^bb56(%339 : i256), ^bb57 loc(#loc7) -// CHECK-NEXT: ^bb56(%341: i256 loc({{.*}}:47:2)): // pred: ^bb55 -// CHECK-NEXT: %342 = arith.addi %338, %341 : i256 loc(#loc7) -// CHECK-NEXT: %343 = arith.muli %341, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %344 = arith.addi %335, %343 : i256 loc(#loc7) -// CHECK-NEXT: %345 = llvm.inttoptr %342 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %346 = llvm.load %345 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %347 = llvm.inttoptr %344 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %346, %347 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %348 = arith.addi %341, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb55(%348 : i256) loc(#loc7) -// CHECK-NEXT: ^bb57: // pred: ^bb55 -// CHECK-NEXT: %349 = llvm.inttoptr %318 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %323, %349 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %350 = arith.addi %1, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %351 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %352 = llvm.load %351 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %353 = llvm.inttoptr %350 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %352, %353 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %354 = arith.addi %1, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %355 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %356 = llvm.load %355 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %357 = arith.andi %356, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc7) -// CHECK-NEXT: %358 = llvm.inttoptr %354 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %357, %358 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %359 = arith.addi %1, %c256_i256 : i256 loc(#loc7) -// CHECK-NEXT: %360 = arith.shrui %356, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %361 = arith.andi %360, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %362 = arith.cmpi ne, %361, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %363 = arith.extui %362 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %364 = llvm.inttoptr %359 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %363, %364 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %365 = arith.addi %1, %c288_i256 : i256 loc(#loc7) -// CHECK-NEXT: %366 = arith.shrui %356, %c232_i256 : i256 loc(#loc7) -// CHECK-NEXT: %367 = arith.andi %366, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %368 = arith.cmpi ugt, %367, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %368, ^bb58, ^bb59 loc(#loc7) -// CHECK-NEXT: ^bb58: // pred: ^bb57 -// CHECK-NEXT: %369 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %369 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %370 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c33_i256, %370 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %371 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%371, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb59 loc(#loc7) -// CHECK-NEXT: ^bb59: // 2 preds: ^bb57, ^bb58 -// CHECK-NEXT: %372 = llvm.inttoptr %365 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %367, %372 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %373 = arith.addi %1, %c320_i256 : i256 loc(#loc7) -// CHECK-NEXT: %374 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %375 = llvm.load %374 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %376 = arith.addi %375, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %377 = arith.cmpi ugt, %376, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %378 = arith.cmpi ult, %376, %375 : i256 loc(#loc7) -// CHECK-NEXT: %379 = arith.ori %377, %378 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %379, ^bb60, ^bb61 loc(#loc7) -// CHECK-NEXT: ^bb60: // pred: ^bb59 -// CHECK-NEXT: %380 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %380 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %381 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %381 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %382 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%382, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb61 loc(#loc7) -// CHECK-NEXT: ^bb61: // 2 preds: ^bb59, ^bb60 -// CHECK-NEXT: %383 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %376, %383 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %384 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %385 = llvm.load %384 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %386 = "llvm.intrcall"(%c8_i256, %385) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %387 = "llvm.intrcall"(%c8_i256, %386) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %388 = llvm.inttoptr %375 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %387, %388 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %389 = arith.addi %375, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %390 = arith.shrui %385, %c72_i256 : i256 loc(#loc7) -// CHECK-NEXT: %391 = arith.andi %390, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %392 = llvm.inttoptr %389 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %391, %392 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %393 = arith.addi %375, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %394 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %395 = llvm.load %394 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %396 = arith.muli %395, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %397 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %398 = llvm.load %397 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %399 = arith.addi %396, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %400 = arith.andi %399, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %401 = arith.addi %398, %400 : i256 loc(#loc7) -// CHECK-NEXT: %402 = arith.cmpi ugt, %401, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %403 = arith.cmpi ult, %401, %398 : i256 loc(#loc7) -// CHECK-NEXT: %404 = arith.ori %402, %403 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %404, ^bb62, ^bb63 loc(#loc7) -// CHECK-NEXT: ^bb62: // pred: ^bb61 -// CHECK-NEXT: %405 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %405 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %406 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %406 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %407 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%407, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb63 loc(#loc7) -// CHECK-NEXT: ^bb63: // 2 preds: ^bb61, ^bb62 -// CHECK-NEXT: %408 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %401, %408 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %409 = llvm.inttoptr %398 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %395, %409 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %410 = arith.addi %398, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %411 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c24_i256, %411 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %412 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %413 = "llvm.intrcall"(%412, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb64(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb64(%414: i256 loc({{.*}}:47:2)): // 2 preds: ^bb63, ^bb77 -// CHECK-NEXT: %415 = arith.cmpi ult, %414, %395 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %415, ^bb65(%414 : i256), ^bb78 loc(#loc7) -// CHECK-NEXT: ^bb65(%416: i256 loc({{.*}}:47:2)): // pred: ^bb64 -// CHECK-NEXT: %417 = arith.addi %413, %416 : i256 loc(#loc7) -// CHECK-NEXT: %418 = arith.muli %416, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %419 = arith.addi %410, %418 : i256 loc(#loc7) -// CHECK-NEXT: %420 = llvm.inttoptr %417 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %421 = llvm.load %420 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %422 = arith.muli %421, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %423 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %424 = llvm.load %423 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %425 = arith.addi %422, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %426 = arith.andi %425, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %427 = arith.addi %424, %426 : i256 loc(#loc7) -// CHECK-NEXT: %428 = arith.cmpi ugt, %427, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %429 = arith.cmpi ult, %427, %424 : i256 loc(#loc7) -// CHECK-NEXT: %430 = arith.ori %428, %429 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %430, ^bb66, ^bb67 loc(#loc7) -// CHECK-NEXT: ^bb66: // pred: ^bb65 -// CHECK-NEXT: %431 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %431 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %432 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %432 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %433 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%433, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb67 loc(#loc7) -// CHECK-NEXT: ^bb67: // 2 preds: ^bb65, ^bb66 -// CHECK-NEXT: %434 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %427, %434 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %435 = llvm.inttoptr %424 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %421, %435 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %436 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %417, %436 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %437 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %438 = "llvm.intrcall"(%437, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %439 = llvm.inttoptr %417 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %440 = llvm.load %439 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %441 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %417, %441 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %442 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %443 = "llvm.intrcall"(%442, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %444 = llvm.inttoptr %424 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %440, %444 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %445 = arith.addi %424, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %446 = arith.cmpi uge, %440, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %447 = arith.subi %440, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %448 = arith.select %446, %447, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb68(%c0_i256, %445, %443, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb68(%449: i256 loc({{.*}}:47:2), %450: i256 loc({{.*}}:47:2), %451: i256 loc({{.*}}:47:2), %452: i256 loc({{.*}}:47:2)): // 2 preds: ^bb67, ^bb72 -// CHECK-NEXT: %453 = arith.cmpi ult, %449, %448 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %453, ^bb69(%449, %450, %451, %452 : i256, i256, i256, i256), ^bb73(%450, %451, %452 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb69(%454: i256 loc({{.*}}:47:2), %455: i256 loc({{.*}}:47:2), %456: i256 loc({{.*}}:47:2), %457: i256 loc({{.*}}:47:2)): // pred: ^bb68 -// CHECK-NEXT: %458 = llvm.inttoptr %456 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %459 = llvm.load %458 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb70(%c0_i256, %455, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb70(%460: i256 loc({{.*}}:47:2), %461: i256 loc({{.*}}:47:2), %462: i256 loc({{.*}}:47:2)): // 2 preds: ^bb69, ^bb71 -// CHECK-NEXT: %463 = arith.cmpi ult, %460, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %463, ^bb71(%460, %461, %462 : i256, i256, i256), ^bb72(%461 : i256) loc(#loc7) -// CHECK-NEXT: ^bb71(%464: i256 loc({{.*}}:47:2), %465: i256 loc({{.*}}:47:2), %466: i256 loc({{.*}}:47:2)): // pred: ^bb70 -// CHECK-NEXT: %467 = arith.shrui %459, %466 : i256 loc(#loc7) -// CHECK-NEXT: %468 = arith.andi %467, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %469 = arith.cmpi ne, %468, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %470 = arith.extui %469 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %471 = llvm.inttoptr %465 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %470, %471 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %472 = arith.addi %465, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %473 = arith.addi %466, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %474 = arith.addi %464, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb70(%474, %472, %473 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb72(%475: i256 loc({{.*}}:47:2)): // pred: ^bb70 -// CHECK-NEXT: %476 = arith.addi %456, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %477 = arith.addi %457, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %478 = arith.addi %454, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb68(%478, %475, %476, %477 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb73(%479: i256 loc({{.*}}:47:2), %480: i256 loc({{.*}}:47:2), %481: i256 loc({{.*}}:47:2)): // pred: ^bb68 -// CHECK-NEXT: %482 = arith.cmpi ult, %481, %440 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %482, ^bb74, ^bb77 loc(#loc7) +// CHECK-NEXT: %355 = llvm.inttoptr %348 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %350, %355 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %356 = arith.addi %1, %c320_i256 : i256 loc(#loc2) +// CHECK-NEXT: %357 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %358 = llvm.load %357 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %359 = arith.addi %358, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %360 = arith.cmpi ugt, %359, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %361 = arith.cmpi ult, %359, %358 : i256 loc(#loc2) +// CHECK-NEXT: %362 = arith.ori %360, %361 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %362, ^bb55, ^bb56 loc(#loc2) +// CHECK-NEXT: ^bb55: // pred: ^bb54 +// CHECK-NEXT: %363 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %363 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %364 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %364 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %365 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%365, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb56 loc(#loc2) +// CHECK-NEXT: ^bb56: // 2 preds: ^bb54, ^bb55 +// CHECK-NEXT: %366 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %359, %366 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %367 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %368 = llvm.load %367 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %369 = "llvm.intrcall"(%c8_i256, %368) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %370 = "llvm.intrcall"(%c8_i256, %369) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %371 = llvm.inttoptr %358 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %370, %371 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %372 = arith.addi %358, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %373 = arith.shrui %368, %c72_i256 : i256 loc(#loc2) +// CHECK-NEXT: %374 = arith.andi %373, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %375 = llvm.inttoptr %372 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %374, %375 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %376 = arith.addi %358, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %377 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %378 = llvm.load %377 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %379 = arith.muli %378, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %380 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %381 = llvm.load %380 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %382 = arith.addi %379, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %383 = arith.andi %382, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %384 = arith.addi %381, %383 : i256 loc(#loc2) +// CHECK-NEXT: %385 = arith.cmpi ugt, %384, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %386 = arith.cmpi ult, %384, %381 : i256 loc(#loc2) +// CHECK-NEXT: %387 = arith.ori %385, %386 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %387, ^bb57, ^bb58 loc(#loc2) +// CHECK-NEXT: ^bb57: // pred: ^bb56 +// CHECK-NEXT: %388 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %388 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %389 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %389 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %390 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%390, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb58 loc(#loc2) +// CHECK-NEXT: ^bb58: // 2 preds: ^bb56, ^bb57 +// CHECK-NEXT: %391 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %384, %391 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %392 = llvm.inttoptr %381 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %378, %392 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %393 = arith.addi %381, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %394 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c24_i256, %394 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %395 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %396 = "llvm.intrcall"(%395, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb59(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb59(%397: i256 loc({{.*}}:47:2)): // 2 preds: ^bb58, ^bb72 +// CHECK-NEXT: %398 = arith.cmpi ult, %397, %378 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %398, ^bb60(%397 : i256), ^bb73 loc(#loc2) +// CHECK-NEXT: ^bb60(%399: i256 loc({{.*}}:47:2)): // pred: ^bb59 +// CHECK-NEXT: %400 = arith.addi %396, %399 : i256 loc(#loc2) +// CHECK-NEXT: %401 = arith.muli %399, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %402 = arith.addi %393, %401 : i256 loc(#loc2) +// CHECK-NEXT: %403 = llvm.inttoptr %400 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %404 = llvm.load %403 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %405 = arith.muli %404, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %406 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %407 = llvm.load %406 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %408 = arith.addi %405, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %409 = arith.andi %408, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %410 = arith.addi %407, %409 : i256 loc(#loc2) +// CHECK-NEXT: %411 = arith.cmpi ugt, %410, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %412 = arith.cmpi ult, %410, %407 : i256 loc(#loc2) +// CHECK-NEXT: %413 = arith.ori %411, %412 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %413, ^bb61, ^bb62 loc(#loc2) +// CHECK-NEXT: ^bb61: // pred: ^bb60 +// CHECK-NEXT: %414 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %414 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %415 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %415 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %416 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%416, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb62 loc(#loc2) +// CHECK-NEXT: ^bb62: // 2 preds: ^bb60, ^bb61 +// CHECK-NEXT: %417 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %410, %417 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %418 = llvm.inttoptr %407 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %404, %418 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %419 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %400, %419 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %420 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %421 = "llvm.intrcall"(%420, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %422 = llvm.inttoptr %400 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %423 = llvm.load %422 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %424 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %400, %424 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %425 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %426 = "llvm.intrcall"(%425, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %427 = llvm.inttoptr %407 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %423, %427 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %428 = arith.addi %407, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %429 = arith.cmpi uge, %423, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %430 = arith.subi %423, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %431 = arith.select %429, %430, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb63(%c0_i256, %428, %426, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb63(%432: i256 loc({{.*}}:47:2), %433: i256 loc({{.*}}:47:2), %434: i256 loc({{.*}}:47:2), %435: i256 loc({{.*}}:47:2)): // 2 preds: ^bb62, ^bb67 +// CHECK-NEXT: %436 = arith.cmpi ult, %432, %431 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %436, ^bb64(%432, %433, %434, %435 : i256, i256, i256, i256), ^bb68(%433, %434, %435 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb64(%437: i256 loc({{.*}}:47:2), %438: i256 loc({{.*}}:47:2), %439: i256 loc({{.*}}:47:2), %440: i256 loc({{.*}}:47:2)): // pred: ^bb63 +// CHECK-NEXT: %441 = llvm.inttoptr %439 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %442 = llvm.load %441 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb65(%c0_i256, %438, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb65(%443: i256 loc({{.*}}:47:2), %444: i256 loc({{.*}}:47:2), %445: i256 loc({{.*}}:47:2)): // 2 preds: ^bb64, ^bb66 +// CHECK-NEXT: %446 = arith.cmpi ult, %443, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %446, ^bb66(%443, %444, %445 : i256, i256, i256), ^bb67(%444 : i256) loc(#loc2) +// CHECK-NEXT: ^bb66(%447: i256 loc({{.*}}:47:2), %448: i256 loc({{.*}}:47:2), %449: i256 loc({{.*}}:47:2)): // pred: ^bb65 +// CHECK-NEXT: %450 = arith.shrui %442, %449 : i256 loc(#loc2) +// CHECK-NEXT: %451 = arith.andi %450, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %452 = arith.cmpi ne, %451, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %453 = arith.extui %452 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %454 = llvm.inttoptr %448 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %453, %454 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %455 = arith.addi %448, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %456 = arith.addi %449, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %457 = arith.addi %447, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb65(%457, %455, %456 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb67(%458: i256 loc({{.*}}:47:2)): // pred: ^bb65 +// CHECK-NEXT: %459 = arith.addi %439, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %460 = arith.addi %440, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %461 = arith.addi %437, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb63(%461, %458, %459, %460 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb68(%462: i256 loc({{.*}}:47:2), %463: i256 loc({{.*}}:47:2), %464: i256 loc({{.*}}:47:2)): // pred: ^bb63 +// CHECK-NEXT: %465 = arith.cmpi ult, %464, %423 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %465, ^bb69, ^bb72 loc(#loc2) +// CHECK-NEXT: ^bb69: // pred: ^bb68 +// CHECK-NEXT: %466 = llvm.inttoptr %463 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %467 = llvm.load %466 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb70(%464, %462, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb70(%468: i256 loc({{.*}}:47:2), %469: i256 loc({{.*}}:47:2), %470: i256 loc({{.*}}:47:2)): // 2 preds: ^bb69, ^bb71 +// CHECK-NEXT: %471 = arith.cmpi ult, %468, %423 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %471, ^bb71(%468, %469, %470 : i256, i256, i256), ^bb72 loc(#loc2) +// CHECK-NEXT: ^bb71(%472: i256 loc({{.*}}:47:2), %473: i256 loc({{.*}}:47:2), %474: i256 loc({{.*}}:47:2)): // pred: ^bb70 +// CHECK-NEXT: %475 = arith.shrui %467, %474 : i256 loc(#loc2) +// CHECK-NEXT: %476 = arith.andi %475, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %477 = arith.cmpi ne, %476, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %478 = arith.extui %477 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %479 = llvm.inttoptr %473 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %478, %479 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %480 = arith.addi %473, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %481 = arith.addi %474, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %482 = arith.addi %472, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb70(%482, %480, %481 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb72: // 2 preds: ^bb68, ^bb70 +// CHECK-NEXT: %483 = llvm.inttoptr %402 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %407, %483 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %484 = arith.addi %399, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb59(%484 : i256) loc(#loc2) +// CHECK-NEXT: ^bb73: // pred: ^bb59 +// CHECK-NEXT: %485 = llvm.inttoptr %376 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %381, %485 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %486 = arith.addi %358, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %487 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %488 = llvm.load %487 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %489 = arith.addi %488, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %490 = arith.cmpi ugt, %489, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %491 = arith.cmpi ult, %489, %488 : i256 loc(#loc2) +// CHECK-NEXT: %492 = arith.ori %490, %491 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %492, ^bb74, ^bb75 loc(#loc2) // CHECK-NEXT: ^bb74: // pred: ^bb73 -// CHECK-NEXT: %483 = llvm.inttoptr %480 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %484 = llvm.load %483 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb75(%481, %479, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb75(%485: i256 loc({{.*}}:47:2), %486: i256 loc({{.*}}:47:2), %487: i256 loc({{.*}}:47:2)): // 2 preds: ^bb74, ^bb76 -// CHECK-NEXT: %488 = arith.cmpi ult, %485, %440 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %488, ^bb76(%485, %486, %487 : i256, i256, i256), ^bb77 loc(#loc7) -// CHECK-NEXT: ^bb76(%489: i256 loc({{.*}}:47:2), %490: i256 loc({{.*}}:47:2), %491: i256 loc({{.*}}:47:2)): // pred: ^bb75 -// CHECK-NEXT: %492 = arith.shrui %484, %491 : i256 loc(#loc7) -// CHECK-NEXT: %493 = arith.andi %492, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %494 = arith.cmpi ne, %493, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %495 = arith.extui %494 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %496 = llvm.inttoptr %490 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %495, %496 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %497 = arith.addi %490, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %498 = arith.addi %491, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %499 = arith.addi %489, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb75(%499, %497, %498 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb77: // 2 preds: ^bb73, ^bb75 -// CHECK-NEXT: %500 = llvm.inttoptr %419 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %424, %500 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %501 = arith.addi %416, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb64(%501 : i256) loc(#loc7) -// CHECK-NEXT: ^bb78: // pred: ^bb64 -// CHECK-NEXT: %502 = llvm.inttoptr %393 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %398, %502 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %503 = arith.addi %375, %c96_i256 : i256 loc(#loc7) -// CHECK-NEXT: %504 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %505 = llvm.load %504 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %506 = arith.addi %505, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %507 = arith.cmpi ugt, %506, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %508 = arith.cmpi ult, %506, %505 : i256 loc(#loc7) -// CHECK-NEXT: %509 = arith.ori %507, %508 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %509, ^bb79, ^bb80 loc(#loc7) +// CHECK-NEXT: %493 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %493 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %494 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %494 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %495 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%495, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb75 loc(#loc2) +// CHECK-NEXT: ^bb75: // 2 preds: ^bb73, ^bb74 +// CHECK-NEXT: %496 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %489, %496 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb76(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb76(%497: i256 loc({{.*}}:47:2)): // 2 preds: ^bb75, ^bb77 +// CHECK-NEXT: %498 = arith.cmpi ult, %497, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %498, ^bb77(%497 : i256), ^bb78 loc(#loc2) +// CHECK-NEXT: ^bb77(%499: i256 loc({{.*}}:47:2)): // pred: ^bb76 +// CHECK-NEXT: %500 = arith.addi %499, %c25_i256 : i256 loc(#loc2) +// CHECK-NEXT: %501 = arith.muli %499, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %502 = arith.addi %488, %501 : i256 loc(#loc2) +// CHECK-NEXT: %503 = llvm.inttoptr %500 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %504 = llvm.load %503 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %505 = arith.andi %504, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc2) +// CHECK-NEXT: %506 = llvm.inttoptr %502 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %505, %506 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %507 = arith.addi %499, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb76(%507 : i256) loc(#loc2) +// CHECK-NEXT: ^bb78: // pred: ^bb76 +// CHECK-NEXT: %508 = llvm.inttoptr %486 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %488, %508 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %509 = arith.addi %358, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %510 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %511 = llvm.load %510 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %512 = "llvm.intrcall"(%c23_i256, %511) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %513 = "llvm.intrcall"(%c23_i256, %512) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %514 = llvm.inttoptr %509 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %513, %514 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %515 = arith.addi %358, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %516 = arith.shrui %511, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %517 = arith.andi %516, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %518 = llvm.inttoptr %515 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %517, %518 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %519 = arith.addi %358, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %520 = arith.shrui %511, %c200_i256 : i256 loc(#loc2) +// CHECK-NEXT: %521 = arith.shli %520, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %522 = arith.andi %521, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc2) +// CHECK-NEXT: %523 = llvm.inttoptr %519 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %522, %523 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %524 = llvm.inttoptr %356 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %358, %524 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %525 = arith.addi %1, %c352_i256 : i256 loc(#loc2) +// CHECK-NEXT: %526 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %527 = llvm.load %526 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %528 = arith.addi %527, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %529 = arith.cmpi ugt, %528, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %530 = arith.cmpi ult, %528, %527 : i256 loc(#loc2) +// CHECK-NEXT: %531 = arith.ori %529, %530 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %531, ^bb79, ^bb80 loc(#loc2) // CHECK-NEXT: ^bb79: // pred: ^bb78 -// CHECK-NEXT: %510 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %510 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %511 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %511 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %512 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%512, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb80 loc(#loc7) +// CHECK-NEXT: %532 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %532 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %533 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %533 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %534 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%534, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb80 loc(#loc2) // CHECK-NEXT: ^bb80: // 2 preds: ^bb78, ^bb79 -// CHECK-NEXT: %513 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %506, %513 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb81(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb81(%514: i256 loc({{.*}}:47:2)): // 2 preds: ^bb80, ^bb82 -// CHECK-NEXT: %515 = arith.cmpi ult, %514, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %515, ^bb82(%514 : i256), ^bb83 loc(#loc7) -// CHECK-NEXT: ^bb82(%516: i256 loc({{.*}}:47:2)): // pred: ^bb81 -// CHECK-NEXT: %517 = arith.addi %516, %c25_i256 : i256 loc(#loc7) -// CHECK-NEXT: %518 = arith.muli %516, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %519 = arith.addi %505, %518 : i256 loc(#loc7) -// CHECK-NEXT: %520 = llvm.inttoptr %517 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %521 = llvm.load %520 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %522 = arith.andi %521, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc7) -// CHECK-NEXT: %523 = llvm.inttoptr %519 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %522, %523 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %524 = arith.addi %516, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb81(%524 : i256) loc(#loc7) +// CHECK-NEXT: %535 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %528, %535 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb81(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb81(%536: i256 loc({{.*}}:47:2)): // 2 preds: ^bb80, ^bb82 +// CHECK-NEXT: %537 = arith.cmpi ult, %536, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %537, ^bb82(%536 : i256), ^bb83 loc(#loc2) +// CHECK-NEXT: ^bb82(%538: i256 loc({{.*}}:47:2)): // pred: ^bb81 +// CHECK-NEXT: %539 = arith.addi %538, %c28_i256 : i256 loc(#loc2) +// CHECK-NEXT: %540 = arith.muli %538, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %541 = arith.addi %527, %540 : i256 loc(#loc2) +// CHECK-NEXT: %542 = llvm.inttoptr %539 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %543 = llvm.load %542 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %544 = arith.andi %543, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc2) +// CHECK-NEXT: %545 = llvm.inttoptr %541 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %544, %545 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %546 = arith.addi %538, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb81(%546 : i256) loc(#loc2) // CHECK-NEXT: ^bb83: // pred: ^bb81 -// CHECK-NEXT: %525 = llvm.inttoptr %503 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %505, %525 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %526 = arith.addi %375, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %527 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %528 = llvm.load %527 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %529 = "llvm.intrcall"(%c23_i256, %528) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %530 = "llvm.intrcall"(%c23_i256, %529) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %531 = llvm.inttoptr %526 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %530, %531 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %532 = arith.addi %375, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %533 = arith.shrui %528, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %534 = arith.andi %533, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %535 = llvm.inttoptr %532 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %534, %535 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %536 = arith.addi %375, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %537 = arith.shrui %528, %c200_i256 : i256 loc(#loc7) -// CHECK-NEXT: %538 = arith.shli %537, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %539 = arith.andi %538, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc7) -// CHECK-NEXT: %540 = llvm.inttoptr %536 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %539, %540 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %541 = llvm.inttoptr %373 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %375, %541 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %542 = arith.addi %1, %c352_i256 : i256 loc(#loc7) -// CHECK-NEXT: %543 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %544 = llvm.load %543 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %545 = arith.addi %544, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %546 = arith.cmpi ugt, %545, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %547 = arith.cmpi ult, %545, %544 : i256 loc(#loc7) -// CHECK-NEXT: %548 = arith.ori %546, %547 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %548, ^bb84, ^bb85 loc(#loc7) +// CHECK-NEXT: %547 = llvm.inttoptr %525 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %527, %547 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %548 = arith.addi %1, %c384_i256 : i256 loc(#loc2) +// CHECK-NEXT: %549 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %550 = llvm.load %549 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %551 = arith.muli %550, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %552 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %553 = llvm.load %552 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %554 = arith.addi %551, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %555 = arith.andi %554, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %556 = arith.addi %553, %555 : i256 loc(#loc2) +// CHECK-NEXT: %557 = arith.cmpi ugt, %556, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %558 = arith.cmpi ult, %556, %553 : i256 loc(#loc2) +// CHECK-NEXT: %559 = arith.ori %557, %558 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %559, ^bb84, ^bb85 loc(#loc2) // CHECK-NEXT: ^bb84: // pred: ^bb83 -// CHECK-NEXT: %549 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %549 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %550 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %550 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %551 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%551, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb85 loc(#loc7) +// CHECK-NEXT: %560 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %560 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %561 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %561 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %562 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%562, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb85 loc(#loc2) // CHECK-NEXT: ^bb85: // 2 preds: ^bb83, ^bb84 -// CHECK-NEXT: %552 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %545, %552 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb86(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb86(%553: i256 loc({{.*}}:47:2)): // 2 preds: ^bb85, ^bb87 -// CHECK-NEXT: %554 = arith.cmpi ult, %553, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %554, ^bb87(%553 : i256), ^bb88 loc(#loc7) -// CHECK-NEXT: ^bb87(%555: i256 loc({{.*}}:47:2)): // pred: ^bb86 -// CHECK-NEXT: %556 = arith.addi %555, %c28_i256 : i256 loc(#loc7) -// CHECK-NEXT: %557 = arith.muli %555, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %558 = arith.addi %544, %557 : i256 loc(#loc7) -// CHECK-NEXT: %559 = llvm.inttoptr %556 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %560 = llvm.load %559 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %561 = arith.andi %560, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc7) -// CHECK-NEXT: %562 = llvm.inttoptr %558 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %561, %562 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %563 = arith.addi %555, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb86(%563 : i256) loc(#loc7) -// CHECK-NEXT: ^bb88: // pred: ^bb86 -// CHECK-NEXT: %564 = llvm.inttoptr %542 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %544, %564 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %565 = arith.addi %1, %c384_i256 : i256 loc(#loc7) -// CHECK-NEXT: %566 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %567 = llvm.load %566 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %568 = arith.muli %567, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %569 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %570 = llvm.load %569 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %571 = arith.addi %568, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %572 = arith.andi %571, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %573 = arith.addi %570, %572 : i256 loc(#loc7) -// CHECK-NEXT: %574 = arith.cmpi ugt, %573, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %575 = arith.cmpi ult, %573, %570 : i256 loc(#loc7) -// CHECK-NEXT: %576 = arith.ori %574, %575 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %576, ^bb89, ^bb90 loc(#loc7) -// CHECK-NEXT: ^bb89: // pred: ^bb88 -// CHECK-NEXT: %577 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %577 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %578 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %578 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %579 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%579, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb90 loc(#loc7) -// CHECK-NEXT: ^bb90: // 2 preds: ^bb88, ^bb89 -// CHECK-NEXT: %580 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %573, %580 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %581 = llvm.inttoptr %570 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %567, %581 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %582 = arith.addi %570, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %583 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c30_i256, %583 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %584 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %585 = "llvm.intrcall"(%584, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb91(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb91(%586: i256 loc({{.*}}:47:2)): // 2 preds: ^bb90, ^bb121 -// CHECK-NEXT: %587 = arith.cmpi ult, %586, %567 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %587, ^bb92(%586 : i256), ^bb122 loc(#loc7) -// CHECK-NEXT: ^bb92(%588: i256 loc({{.*}}:47:2)): // pred: ^bb91 -// CHECK-NEXT: %589 = arith.addi %585, %588 : i256 loc(#loc7) -// CHECK-NEXT: %590 = arith.muli %588, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %591 = arith.addi %582, %590 : i256 loc(#loc7) -// CHECK-NEXT: %592 = llvm.inttoptr %589 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %593 = llvm.load %592 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %594 = arith.muli %593, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %595 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %596 = llvm.load %595 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %597 = arith.addi %594, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %598 = arith.andi %597, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %599 = arith.addi %596, %598 : i256 loc(#loc7) -// CHECK-NEXT: %600 = arith.cmpi ugt, %599, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %601 = arith.cmpi ult, %599, %596 : i256 loc(#loc7) -// CHECK-NEXT: %602 = arith.ori %600, %601 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %602, ^bb93, ^bb94 loc(#loc7) -// CHECK-NEXT: ^bb93: // pred: ^bb92 -// CHECK-NEXT: %603 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %603 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %604 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %604 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %605 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%605, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb94 loc(#loc7) -// CHECK-NEXT: ^bb94: // 2 preds: ^bb92, ^bb93 -// CHECK-NEXT: %606 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %599, %606 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %607 = llvm.inttoptr %596 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %593, %607 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %608 = arith.addi %596, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %609 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %589, %609 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %610 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %611 = "llvm.intrcall"(%610, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb95(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb95(%612: i256 loc({{.*}}:47:2)): // 2 preds: ^bb94, ^bb120 -// CHECK-NEXT: %613 = arith.cmpi ult, %612, %593 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %613, ^bb96(%612 : i256), ^bb121 loc(#loc7) -// CHECK-NEXT: ^bb96(%614: i256 loc({{.*}}:47:2)): // pred: ^bb95 -// CHECK-NEXT: %615 = arith.muli %614, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: %616 = arith.addi %611, %615 : i256 loc(#loc7) -// CHECK-NEXT: %617 = arith.muli %614, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %618 = arith.addi %608, %617 : i256 loc(#loc7) -// CHECK-NEXT: %619 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %620 = llvm.load %619 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %621 = arith.addi %620, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %622 = arith.cmpi ugt, %621, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %623 = arith.cmpi ult, %621, %620 : i256 loc(#loc7) -// CHECK-NEXT: %624 = arith.ori %622, %623 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %624, ^bb97, ^bb98 loc(#loc7) -// CHECK-NEXT: ^bb97: // pred: ^bb96 -// CHECK-NEXT: %625 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %625 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %626 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %626 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %627 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%627, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb98 loc(#loc7) -// CHECK-NEXT: ^bb98: // 2 preds: ^bb96, ^bb97 -// CHECK-NEXT: %628 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %621, %628 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %629 = llvm.inttoptr %616 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %630 = llvm.load %629 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %631 = "llvm.intrcall"(%c8_i256, %630) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %632 = "llvm.intrcall"(%c8_i256, %631) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %633 = llvm.inttoptr %620 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %632, %633 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %634 = arith.addi %620, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %635 = arith.shrui %630, %c72_i256 : i256 loc(#loc7) -// CHECK-NEXT: %636 = arith.andi %635, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %637 = llvm.inttoptr %634 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %636, %637 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %638 = arith.addi %620, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %639 = arith.addi %616, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %640 = llvm.inttoptr %639 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %641 = llvm.load %640 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %642 = arith.muli %641, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %643 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %644 = llvm.load %643 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %645 = arith.addi %642, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %646 = arith.andi %645, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %647 = arith.addi %644, %646 : i256 loc(#loc7) -// CHECK-NEXT: %648 = arith.cmpi ugt, %647, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %649 = arith.cmpi ult, %647, %644 : i256 loc(#loc7) -// CHECK-NEXT: %650 = arith.ori %648, %649 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %650, ^bb99, ^bb100 loc(#loc7) -// CHECK-NEXT: ^bb99: // pred: ^bb98 -// CHECK-NEXT: %651 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %651 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %652 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %652 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %653 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%653, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb100 loc(#loc7) -// CHECK-NEXT: ^bb100: // 2 preds: ^bb98, ^bb99 -// CHECK-NEXT: %654 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %647, %654 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %655 = llvm.inttoptr %644 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %641, %655 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %656 = arith.addi %644, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %657 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %639, %657 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %658 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %659 = "llvm.intrcall"(%658, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb101(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb101(%660: i256 loc({{.*}}:47:2)): // 2 preds: ^bb100, ^bb114 -// CHECK-NEXT: %661 = arith.cmpi ult, %660, %641 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %661, ^bb102(%660 : i256), ^bb115 loc(#loc7) -// CHECK-NEXT: ^bb102(%662: i256 loc({{.*}}:47:2)): // pred: ^bb101 -// CHECK-NEXT: %663 = arith.addi %659, %662 : i256 loc(#loc7) -// CHECK-NEXT: %664 = arith.muli %662, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %665 = arith.addi %656, %664 : i256 loc(#loc7) -// CHECK-NEXT: %666 = llvm.inttoptr %663 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %667 = llvm.load %666 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %668 = arith.muli %667, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %669 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %670 = llvm.load %669 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %671 = arith.addi %668, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %672 = arith.andi %671, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %673 = arith.addi %670, %672 : i256 loc(#loc7) -// CHECK-NEXT: %674 = arith.cmpi ugt, %673, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %675 = arith.cmpi ult, %673, %670 : i256 loc(#loc7) -// CHECK-NEXT: %676 = arith.ori %674, %675 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %676, ^bb103, ^bb104 loc(#loc7) -// CHECK-NEXT: ^bb103: // pred: ^bb102 -// CHECK-NEXT: %677 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %677 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %678 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %678 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %679 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%679, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb104 loc(#loc7) -// CHECK-NEXT: ^bb104: // 2 preds: ^bb102, ^bb103 -// CHECK-NEXT: %680 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %673, %680 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %681 = llvm.inttoptr %670 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %667, %681 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %682 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %663, %682 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %683 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %684 = "llvm.intrcall"(%683, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %685 = llvm.inttoptr %663 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %686 = llvm.load %685 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %687 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %663, %687 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %688 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %689 = "llvm.intrcall"(%688, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %690 = llvm.inttoptr %670 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %686, %690 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %691 = arith.addi %670, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %692 = arith.cmpi uge, %686, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %693 = arith.subi %686, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %694 = arith.select %692, %693, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb105(%c0_i256, %691, %689, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb105(%695: i256 loc({{.*}}:47:2), %696: i256 loc({{.*}}:47:2), %697: i256 loc({{.*}}:47:2), %698: i256 loc({{.*}}:47:2)): // 2 preds: ^bb104, ^bb109 -// CHECK-NEXT: %699 = arith.cmpi ult, %695, %694 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %699, ^bb106(%695, %696, %697, %698 : i256, i256, i256, i256), ^bb110(%696, %697, %698 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb106(%700: i256 loc({{.*}}:47:2), %701: i256 loc({{.*}}:47:2), %702: i256 loc({{.*}}:47:2), %703: i256 loc({{.*}}:47:2)): // pred: ^bb105 -// CHECK-NEXT: %704 = llvm.inttoptr %702 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %705 = llvm.load %704 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb107(%c0_i256, %701, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb107(%706: i256 loc({{.*}}:47:2), %707: i256 loc({{.*}}:47:2), %708: i256 loc({{.*}}:47:2)): // 2 preds: ^bb106, ^bb108 -// CHECK-NEXT: %709 = arith.cmpi ult, %706, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %709, ^bb108(%706, %707, %708 : i256, i256, i256), ^bb109(%707 : i256) loc(#loc7) -// CHECK-NEXT: ^bb108(%710: i256 loc({{.*}}:47:2), %711: i256 loc({{.*}}:47:2), %712: i256 loc({{.*}}:47:2)): // pred: ^bb107 -// CHECK-NEXT: %713 = arith.shrui %705, %712 : i256 loc(#loc7) -// CHECK-NEXT: %714 = arith.andi %713, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %715 = arith.cmpi ne, %714, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %716 = arith.extui %715 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %717 = llvm.inttoptr %711 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %716, %717 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %718 = arith.addi %711, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %719 = arith.addi %712, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %720 = arith.addi %710, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb107(%720, %718, %719 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb109(%721: i256 loc({{.*}}:47:2)): // pred: ^bb107 -// CHECK-NEXT: %722 = arith.addi %702, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %723 = arith.addi %703, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %724 = arith.addi %700, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb105(%724, %721, %722, %723 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb110(%725: i256 loc({{.*}}:47:2), %726: i256 loc({{.*}}:47:2), %727: i256 loc({{.*}}:47:2)): // pred: ^bb105 -// CHECK-NEXT: %728 = arith.cmpi ult, %727, %686 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %728, ^bb111, ^bb114 loc(#loc7) +// CHECK-NEXT: %563 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %556, %563 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %564 = llvm.inttoptr %553 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %550, %564 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %565 = arith.addi %553, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %566 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c30_i256, %566 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %567 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %568 = "llvm.intrcall"(%567, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb86(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb86(%569: i256 loc({{.*}}:47:2)): // 2 preds: ^bb85, ^bb116 +// CHECK-NEXT: %570 = arith.cmpi ult, %569, %550 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %570, ^bb87(%569 : i256), ^bb117 loc(#loc2) +// CHECK-NEXT: ^bb87(%571: i256 loc({{.*}}:47:2)): // pred: ^bb86 +// CHECK-NEXT: %572 = arith.addi %568, %571 : i256 loc(#loc2) +// CHECK-NEXT: %573 = arith.muli %571, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %574 = arith.addi %565, %573 : i256 loc(#loc2) +// CHECK-NEXT: %575 = llvm.inttoptr %572 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %576 = llvm.load %575 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %577 = arith.muli %576, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %578 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %579 = llvm.load %578 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %580 = arith.addi %577, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %581 = arith.andi %580, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %582 = arith.addi %579, %581 : i256 loc(#loc2) +// CHECK-NEXT: %583 = arith.cmpi ugt, %582, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %584 = arith.cmpi ult, %582, %579 : i256 loc(#loc2) +// CHECK-NEXT: %585 = arith.ori %583, %584 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %585, ^bb88, ^bb89 loc(#loc2) +// CHECK-NEXT: ^bb88: // pred: ^bb87 +// CHECK-NEXT: %586 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %586 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %587 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %587 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %588 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%588, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb89 loc(#loc2) +// CHECK-NEXT: ^bb89: // 2 preds: ^bb87, ^bb88 +// CHECK-NEXT: %589 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %582, %589 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %590 = llvm.inttoptr %579 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %576, %590 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %591 = arith.addi %579, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %592 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %572, %592 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %593 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %594 = "llvm.intrcall"(%593, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb90(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb90(%595: i256 loc({{.*}}:47:2)): // 2 preds: ^bb89, ^bb115 +// CHECK-NEXT: %596 = arith.cmpi ult, %595, %576 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %596, ^bb91(%595 : i256), ^bb116 loc(#loc2) +// CHECK-NEXT: ^bb91(%597: i256 loc({{.*}}:47:2)): // pred: ^bb90 +// CHECK-NEXT: %598 = arith.muli %597, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: %599 = arith.addi %594, %598 : i256 loc(#loc2) +// CHECK-NEXT: %600 = arith.muli %597, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %601 = arith.addi %591, %600 : i256 loc(#loc2) +// CHECK-NEXT: %602 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %603 = llvm.load %602 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %604 = arith.addi %603, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %605 = arith.cmpi ugt, %604, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %606 = arith.cmpi ult, %604, %603 : i256 loc(#loc2) +// CHECK-NEXT: %607 = arith.ori %605, %606 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %607, ^bb92, ^bb93 loc(#loc2) +// CHECK-NEXT: ^bb92: // pred: ^bb91 +// CHECK-NEXT: %608 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %608 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %609 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %609 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %610 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%610, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb93 loc(#loc2) +// CHECK-NEXT: ^bb93: // 2 preds: ^bb91, ^bb92 +// CHECK-NEXT: %611 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %604, %611 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %612 = llvm.inttoptr %599 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %613 = llvm.load %612 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %614 = "llvm.intrcall"(%c8_i256, %613) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %615 = "llvm.intrcall"(%c8_i256, %614) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %616 = llvm.inttoptr %603 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %615, %616 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %617 = arith.addi %603, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %618 = arith.shrui %613, %c72_i256 : i256 loc(#loc2) +// CHECK-NEXT: %619 = arith.andi %618, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %620 = llvm.inttoptr %617 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %619, %620 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %621 = arith.addi %603, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %622 = arith.addi %599, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %623 = llvm.inttoptr %622 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %624 = llvm.load %623 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %625 = arith.muli %624, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %626 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %627 = llvm.load %626 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %628 = arith.addi %625, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %629 = arith.andi %628, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %630 = arith.addi %627, %629 : i256 loc(#loc2) +// CHECK-NEXT: %631 = arith.cmpi ugt, %630, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %632 = arith.cmpi ult, %630, %627 : i256 loc(#loc2) +// CHECK-NEXT: %633 = arith.ori %631, %632 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %633, ^bb94, ^bb95 loc(#loc2) +// CHECK-NEXT: ^bb94: // pred: ^bb93 +// CHECK-NEXT: %634 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %634 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %635 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %635 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %636 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%636, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb95 loc(#loc2) +// CHECK-NEXT: ^bb95: // 2 preds: ^bb93, ^bb94 +// CHECK-NEXT: %637 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %630, %637 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %638 = llvm.inttoptr %627 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %624, %638 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %639 = arith.addi %627, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %640 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %622, %640 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %641 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %642 = "llvm.intrcall"(%641, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb96(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb96(%643: i256 loc({{.*}}:47:2)): // 2 preds: ^bb95, ^bb109 +// CHECK-NEXT: %644 = arith.cmpi ult, %643, %624 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %644, ^bb97(%643 : i256), ^bb110 loc(#loc2) +// CHECK-NEXT: ^bb97(%645: i256 loc({{.*}}:47:2)): // pred: ^bb96 +// CHECK-NEXT: %646 = arith.addi %642, %645 : i256 loc(#loc2) +// CHECK-NEXT: %647 = arith.muli %645, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %648 = arith.addi %639, %647 : i256 loc(#loc2) +// CHECK-NEXT: %649 = llvm.inttoptr %646 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %650 = llvm.load %649 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %651 = arith.muli %650, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %652 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %653 = llvm.load %652 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %654 = arith.addi %651, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %655 = arith.andi %654, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %656 = arith.addi %653, %655 : i256 loc(#loc2) +// CHECK-NEXT: %657 = arith.cmpi ugt, %656, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %658 = arith.cmpi ult, %656, %653 : i256 loc(#loc2) +// CHECK-NEXT: %659 = arith.ori %657, %658 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %659, ^bb98, ^bb99 loc(#loc2) +// CHECK-NEXT: ^bb98: // pred: ^bb97 +// CHECK-NEXT: %660 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %660 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %661 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %661 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %662 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%662, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb99 loc(#loc2) +// CHECK-NEXT: ^bb99: // 2 preds: ^bb97, ^bb98 +// CHECK-NEXT: %663 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %656, %663 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %664 = llvm.inttoptr %653 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %650, %664 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %665 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %646, %665 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %666 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %667 = "llvm.intrcall"(%666, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %668 = llvm.inttoptr %646 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %669 = llvm.load %668 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %670 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %646, %670 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %671 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %672 = "llvm.intrcall"(%671, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %673 = llvm.inttoptr %653 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %669, %673 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %674 = arith.addi %653, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %675 = arith.cmpi uge, %669, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %676 = arith.subi %669, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %677 = arith.select %675, %676, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb100(%c0_i256, %674, %672, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb100(%678: i256 loc({{.*}}:47:2), %679: i256 loc({{.*}}:47:2), %680: i256 loc({{.*}}:47:2), %681: i256 loc({{.*}}:47:2)): // 2 preds: ^bb99, ^bb104 +// CHECK-NEXT: %682 = arith.cmpi ult, %678, %677 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %682, ^bb101(%678, %679, %680, %681 : i256, i256, i256, i256), ^bb105(%679, %680, %681 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb101(%683: i256 loc({{.*}}:47:2), %684: i256 loc({{.*}}:47:2), %685: i256 loc({{.*}}:47:2), %686: i256 loc({{.*}}:47:2)): // pred: ^bb100 +// CHECK-NEXT: %687 = llvm.inttoptr %685 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %688 = llvm.load %687 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb102(%c0_i256, %684, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb102(%689: i256 loc({{.*}}:47:2), %690: i256 loc({{.*}}:47:2), %691: i256 loc({{.*}}:47:2)): // 2 preds: ^bb101, ^bb103 +// CHECK-NEXT: %692 = arith.cmpi ult, %689, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %692, ^bb103(%689, %690, %691 : i256, i256, i256), ^bb104(%690 : i256) loc(#loc2) +// CHECK-NEXT: ^bb103(%693: i256 loc({{.*}}:47:2), %694: i256 loc({{.*}}:47:2), %695: i256 loc({{.*}}:47:2)): // pred: ^bb102 +// CHECK-NEXT: %696 = arith.shrui %688, %695 : i256 loc(#loc2) +// CHECK-NEXT: %697 = arith.andi %696, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %698 = arith.cmpi ne, %697, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %699 = arith.extui %698 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %700 = llvm.inttoptr %694 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %699, %700 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %701 = arith.addi %694, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %702 = arith.addi %695, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %703 = arith.addi %693, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb102(%703, %701, %702 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb104(%704: i256 loc({{.*}}:47:2)): // pred: ^bb102 +// CHECK-NEXT: %705 = arith.addi %685, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %706 = arith.addi %686, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %707 = arith.addi %683, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb100(%707, %704, %705, %706 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb105(%708: i256 loc({{.*}}:47:2), %709: i256 loc({{.*}}:47:2), %710: i256 loc({{.*}}:47:2)): // pred: ^bb100 +// CHECK-NEXT: %711 = arith.cmpi ult, %710, %669 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %711, ^bb106, ^bb109 loc(#loc2) +// CHECK-NEXT: ^bb106: // pred: ^bb105 +// CHECK-NEXT: %712 = llvm.inttoptr %709 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %713 = llvm.load %712 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb107(%710, %708, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb107(%714: i256 loc({{.*}}:47:2), %715: i256 loc({{.*}}:47:2), %716: i256 loc({{.*}}:47:2)): // 2 preds: ^bb106, ^bb108 +// CHECK-NEXT: %717 = arith.cmpi ult, %714, %669 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %717, ^bb108(%714, %715, %716 : i256, i256, i256), ^bb109 loc(#loc2) +// CHECK-NEXT: ^bb108(%718: i256 loc({{.*}}:47:2), %719: i256 loc({{.*}}:47:2), %720: i256 loc({{.*}}:47:2)): // pred: ^bb107 +// CHECK-NEXT: %721 = arith.shrui %713, %720 : i256 loc(#loc2) +// CHECK-NEXT: %722 = arith.andi %721, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %723 = arith.cmpi ne, %722, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %724 = arith.extui %723 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %725 = llvm.inttoptr %719 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %724, %725 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %726 = arith.addi %719, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %727 = arith.addi %720, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %728 = arith.addi %718, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb107(%728, %726, %727 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb109: // 2 preds: ^bb105, ^bb107 +// CHECK-NEXT: %729 = llvm.inttoptr %648 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %653, %729 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %730 = arith.addi %645, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb96(%730 : i256) loc(#loc2) +// CHECK-NEXT: ^bb110: // pred: ^bb96 +// CHECK-NEXT: %731 = llvm.inttoptr %621 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %627, %731 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %732 = arith.addi %603, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %733 = arith.addi %599, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %734 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %735 = llvm.load %734 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %736 = arith.addi %735, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %737 = arith.cmpi ugt, %736, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %738 = arith.cmpi ult, %736, %735 : i256 loc(#loc2) +// CHECK-NEXT: %739 = arith.ori %737, %738 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %739, ^bb111, ^bb112 loc(#loc2) // CHECK-NEXT: ^bb111: // pred: ^bb110 -// CHECK-NEXT: %729 = llvm.inttoptr %726 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %730 = llvm.load %729 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb112(%727, %725, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb112(%731: i256 loc({{.*}}:47:2), %732: i256 loc({{.*}}:47:2), %733: i256 loc({{.*}}:47:2)): // 2 preds: ^bb111, ^bb113 -// CHECK-NEXT: %734 = arith.cmpi ult, %731, %686 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %734, ^bb113(%731, %732, %733 : i256, i256, i256), ^bb114 loc(#loc7) -// CHECK-NEXT: ^bb113(%735: i256 loc({{.*}}:47:2), %736: i256 loc({{.*}}:47:2), %737: i256 loc({{.*}}:47:2)): // pred: ^bb112 -// CHECK-NEXT: %738 = arith.shrui %730, %737 : i256 loc(#loc7) -// CHECK-NEXT: %739 = arith.andi %738, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %740 = arith.cmpi ne, %739, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %741 = arith.extui %740 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %742 = llvm.inttoptr %736 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %741, %742 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %743 = arith.addi %736, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %744 = arith.addi %737, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %745 = arith.addi %735, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb112(%745, %743, %744 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb114: // 2 preds: ^bb110, ^bb112 -// CHECK-NEXT: %746 = llvm.inttoptr %665 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %670, %746 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %747 = arith.addi %662, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb101(%747 : i256) loc(#loc7) -// CHECK-NEXT: ^bb115: // pred: ^bb101 -// CHECK-NEXT: %748 = llvm.inttoptr %638 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %644, %748 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %749 = arith.addi %620, %c96_i256 : i256 loc(#loc7) -// CHECK-NEXT: %750 = arith.addi %616, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: %751 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %752 = llvm.load %751 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %753 = arith.addi %752, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %754 = arith.cmpi ugt, %753, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %755 = arith.cmpi ult, %753, %752 : i256 loc(#loc7) -// CHECK-NEXT: %756 = arith.ori %754, %755 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %756, ^bb116, ^bb117 loc(#loc7) -// CHECK-NEXT: ^bb116: // pred: ^bb115 -// CHECK-NEXT: %757 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %757 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %758 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %758 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %759 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%759, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb117 loc(#loc7) -// CHECK-NEXT: ^bb117: // 2 preds: ^bb115, ^bb116 -// CHECK-NEXT: %760 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %753, %760 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb118(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb118(%761: i256 loc({{.*}}:47:2)): // 2 preds: ^bb117, ^bb119 -// CHECK-NEXT: %762 = arith.cmpi ult, %761, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %762, ^bb119(%761 : i256), ^bb120 loc(#loc7) -// CHECK-NEXT: ^bb119(%763: i256 loc({{.*}}:47:2)): // pred: ^bb118 -// CHECK-NEXT: %764 = arith.addi %750, %763 : i256 loc(#loc7) -// CHECK-NEXT: %765 = arith.muli %763, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %766 = arith.addi %752, %765 : i256 loc(#loc7) -// CHECK-NEXT: %767 = llvm.inttoptr %764 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %768 = llvm.load %767 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %769 = arith.andi %768, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc7) -// CHECK-NEXT: %770 = llvm.inttoptr %766 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %769, %770 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %771 = arith.addi %763, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb118(%771 : i256) loc(#loc7) -// CHECK-NEXT: ^bb120: // pred: ^bb118 -// CHECK-NEXT: %772 = llvm.inttoptr %749 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %752, %772 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %773 = arith.addi %620, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %774 = arith.addi %616, %c4_i256 : i256 loc(#loc7) -// CHECK-NEXT: %775 = llvm.inttoptr %774 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %776 = llvm.load %775 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %777 = "llvm.intrcall"(%c23_i256, %776) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %778 = "llvm.intrcall"(%c23_i256, %777) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %779 = llvm.inttoptr %773 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %778, %779 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %780 = arith.addi %620, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %781 = arith.shrui %776, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %782 = arith.andi %781, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %783 = llvm.inttoptr %780 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %782, %783 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %784 = arith.addi %620, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %785 = arith.shrui %776, %c200_i256 : i256 loc(#loc7) -// CHECK-NEXT: %786 = arith.shli %785, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %787 = arith.andi %786, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc7) -// CHECK-NEXT: %788 = llvm.inttoptr %784 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %787, %788 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %789 = llvm.inttoptr %618 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %620, %789 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %790 = arith.addi %614, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb95(%790 : i256) loc(#loc7) -// CHECK-NEXT: ^bb121: // pred: ^bb95 -// CHECK-NEXT: %791 = llvm.inttoptr %591 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %596, %791 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %792 = arith.addi %588, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb91(%792 : i256) loc(#loc7) -// CHECK-NEXT: ^bb122: // pred: ^bb91 -// CHECK-NEXT: %793 = llvm.inttoptr %565 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %570, %793 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %794 = arith.addi %1, %c416_i256 : i256 loc(#loc7) -// CHECK-NEXT: %795 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %796 = llvm.load %795 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %797 = arith.addi %796, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %798 = arith.cmpi ugt, %797, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %799 = arith.cmpi ult, %797, %796 : i256 loc(#loc7) -// CHECK-NEXT: %800 = arith.ori %798, %799 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %800, ^bb123, ^bb124 loc(#loc7) +// CHECK-NEXT: %740 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %740 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %741 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %741 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %742 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%742, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb112 loc(#loc2) +// CHECK-NEXT: ^bb112: // 2 preds: ^bb110, ^bb111 +// CHECK-NEXT: %743 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %736, %743 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb113(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb113(%744: i256 loc({{.*}}:47:2)): // 2 preds: ^bb112, ^bb114 +// CHECK-NEXT: %745 = arith.cmpi ult, %744, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %745, ^bb114(%744 : i256), ^bb115 loc(#loc2) +// CHECK-NEXT: ^bb114(%746: i256 loc({{.*}}:47:2)): // pred: ^bb113 +// CHECK-NEXT: %747 = arith.addi %733, %746 : i256 loc(#loc2) +// CHECK-NEXT: %748 = arith.muli %746, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %749 = arith.addi %735, %748 : i256 loc(#loc2) +// CHECK-NEXT: %750 = llvm.inttoptr %747 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %751 = llvm.load %750 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %752 = arith.andi %751, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc2) +// CHECK-NEXT: %753 = llvm.inttoptr %749 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %752, %753 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %754 = arith.addi %746, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb113(%754 : i256) loc(#loc2) +// CHECK-NEXT: ^bb115: // pred: ^bb113 +// CHECK-NEXT: %755 = llvm.inttoptr %732 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %735, %755 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %756 = arith.addi %603, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %757 = arith.addi %599, %c4_i256 : i256 loc(#loc2) +// CHECK-NEXT: %758 = llvm.inttoptr %757 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %759 = llvm.load %758 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %760 = "llvm.intrcall"(%c23_i256, %759) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %761 = "llvm.intrcall"(%c23_i256, %760) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %762 = llvm.inttoptr %756 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %761, %762 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %763 = arith.addi %603, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %764 = arith.shrui %759, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %765 = arith.andi %764, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %766 = llvm.inttoptr %763 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %765, %766 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %767 = arith.addi %603, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %768 = arith.shrui %759, %c200_i256 : i256 loc(#loc2) +// CHECK-NEXT: %769 = arith.shli %768, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %770 = arith.andi %769, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc2) +// CHECK-NEXT: %771 = llvm.inttoptr %767 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %770, %771 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %772 = llvm.inttoptr %601 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %603, %772 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %773 = arith.addi %597, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb90(%773 : i256) loc(#loc2) +// CHECK-NEXT: ^bb116: // pred: ^bb90 +// CHECK-NEXT: %774 = llvm.inttoptr %574 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %579, %774 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %775 = arith.addi %571, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb86(%775 : i256) loc(#loc2) +// CHECK-NEXT: ^bb117: // pred: ^bb86 +// CHECK-NEXT: %776 = llvm.inttoptr %548 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %553, %776 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %777 = arith.addi %1, %c416_i256 : i256 loc(#loc2) +// CHECK-NEXT: %778 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %779 = llvm.load %778 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %780 = arith.addi %779, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %781 = arith.cmpi ugt, %780, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %782 = arith.cmpi ult, %780, %779 : i256 loc(#loc2) +// CHECK-NEXT: %783 = arith.ori %781, %782 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %783, ^bb118, ^bb119 loc(#loc2) +// CHECK-NEXT: ^bb118: // pred: ^bb117 +// CHECK-NEXT: %784 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %784 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %785 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %785 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %786 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%786, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb119 loc(#loc2) +// CHECK-NEXT: ^bb119: // 2 preds: ^bb117, ^bb118 +// CHECK-NEXT: %787 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %780, %787 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb120(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb120(%788: i256 loc({{.*}}:47:2)): // 2 preds: ^bb119, ^bb121 +// CHECK-NEXT: %789 = arith.cmpi ult, %788, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %789, ^bb121(%788 : i256), ^bb122 loc(#loc2) +// CHECK-NEXT: ^bb121(%790: i256 loc({{.*}}:47:2)): // pred: ^bb120 +// CHECK-NEXT: %791 = arith.addi %790, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %792 = arith.muli %790, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %793 = arith.addi %779, %792 : i256 loc(#loc2) +// CHECK-NEXT: %794 = llvm.inttoptr %791 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %795 = llvm.load %794 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %796 = arith.andi %795, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc2) +// CHECK-NEXT: %797 = llvm.inttoptr %793 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %796, %797 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %798 = arith.addi %790, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb120(%798 : i256) loc(#loc2) +// CHECK-NEXT: ^bb122: // pred: ^bb120 +// CHECK-NEXT: %799 = llvm.inttoptr %777 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %779, %799 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %800 = arith.addi %1, %c448_i256 : i256 loc(#loc2) +// CHECK-NEXT: %801 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %802 = llvm.load %801 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %803 = arith.addi %802, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %804 = arith.cmpi ugt, %803, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %805 = arith.cmpi ult, %803, %802 : i256 loc(#loc2) +// CHECK-NEXT: %806 = arith.ori %804, %805 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %806, ^bb123, ^bb124 loc(#loc2) // CHECK-NEXT: ^bb123: // pred: ^bb122 -// CHECK-NEXT: %801 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %801 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %802 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %802 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %803 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%803, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb124 loc(#loc7) +// CHECK-NEXT: %807 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %807 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %808 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %808 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %809 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%809, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb124 loc(#loc2) // CHECK-NEXT: ^bb124: // 2 preds: ^bb122, ^bb123 -// CHECK-NEXT: %804 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %797, %804 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb125(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb125(%805: i256 loc({{.*}}:47:2)): // 2 preds: ^bb124, ^bb126 -// CHECK-NEXT: %806 = arith.cmpi ult, %805, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %806, ^bb126(%805 : i256), ^bb127 loc(#loc7) -// CHECK-NEXT: ^bb126(%807: i256 loc({{.*}}:47:2)): // pred: ^bb125 -// CHECK-NEXT: %808 = arith.addi %807, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %809 = arith.muli %807, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %810 = arith.addi %796, %809 : i256 loc(#loc7) -// CHECK-NEXT: %811 = llvm.inttoptr %808 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %812 = llvm.load %811 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %813 = arith.andi %812, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc7) -// CHECK-NEXT: %814 = llvm.inttoptr %810 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %813, %814 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %815 = arith.addi %807, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb125(%815 : i256) loc(#loc7) +// CHECK-NEXT: %810 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %803, %810 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb125(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb125(%811: i256 loc({{.*}}:47:2)): // 2 preds: ^bb124, ^bb126 +// CHECK-NEXT: %812 = arith.cmpi ult, %811, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %812, ^bb126(%811 : i256), ^bb127 loc(#loc2) +// CHECK-NEXT: ^bb126(%813: i256 loc({{.*}}:47:2)): // pred: ^bb125 +// CHECK-NEXT: %814 = arith.addi %813, %c36_i256 : i256 loc(#loc2) +// CHECK-NEXT: %815 = arith.muli %813, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %816 = arith.addi %802, %815 : i256 loc(#loc2) +// CHECK-NEXT: %817 = llvm.inttoptr %814 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %818 = llvm.load %817 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %819 = "llvm.intrcall"(%c23_i256, %818) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %820 = llvm.inttoptr %816 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %819, %820 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %821 = arith.addi %813, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb125(%821 : i256) loc(#loc2) // CHECK-NEXT: ^bb127: // pred: ^bb125 -// CHECK-NEXT: %816 = llvm.inttoptr %794 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %796, %816 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %817 = arith.addi %1, %c448_i256 : i256 loc(#loc7) -// CHECK-NEXT: %818 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %819 = llvm.load %818 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %820 = arith.addi %819, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %821 = arith.cmpi ugt, %820, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %822 = arith.cmpi ult, %820, %819 : i256 loc(#loc7) -// CHECK-NEXT: %823 = arith.ori %821, %822 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %823, ^bb128, ^bb129 loc(#loc7) +// CHECK-NEXT: %822 = llvm.inttoptr %800 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %802, %822 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %823 = arith.addi %1, %c480_i256 : i256 loc(#loc2) +// CHECK-NEXT: %824 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %825 = llvm.load %824 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %826 = arith.addi %825, %c224_i256 : i256 loc(#loc2) +// CHECK-NEXT: %827 = arith.cmpi ugt, %826, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %828 = arith.cmpi ult, %826, %825 : i256 loc(#loc2) +// CHECK-NEXT: %829 = arith.ori %827, %828 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %829, ^bb128, ^bb129 loc(#loc2) // CHECK-NEXT: ^bb128: // pred: ^bb127 -// CHECK-NEXT: %824 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %824 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %825 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %825 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %826 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%826, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb129 loc(#loc7) +// CHECK-NEXT: %830 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %830 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %831 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %831 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %832 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%832, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb129 loc(#loc2) // CHECK-NEXT: ^bb129: // 2 preds: ^bb127, ^bb128 -// CHECK-NEXT: %827 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %820, %827 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb130(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb130(%828: i256 loc({{.*}}:47:2)): // 2 preds: ^bb129, ^bb131 -// CHECK-NEXT: %829 = arith.cmpi ult, %828, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %829, ^bb131(%828 : i256), ^bb132 loc(#loc7) -// CHECK-NEXT: ^bb131(%830: i256 loc({{.*}}:47:2)): // pred: ^bb130 -// CHECK-NEXT: %831 = arith.addi %830, %c36_i256 : i256 loc(#loc7) -// CHECK-NEXT: %832 = arith.muli %830, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %833 = arith.addi %819, %832 : i256 loc(#loc7) -// CHECK-NEXT: %834 = llvm.inttoptr %831 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %835 = llvm.load %834 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %836 = "llvm.intrcall"(%c23_i256, %835) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %837 = llvm.inttoptr %833 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %836, %837 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %838 = arith.addi %830, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb130(%838 : i256) loc(#loc7) -// CHECK-NEXT: ^bb132: // pred: ^bb130 -// CHECK-NEXT: %839 = llvm.inttoptr %817 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %819, %839 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %840 = arith.addi %1, %c480_i256 : i256 loc(#loc7) -// CHECK-NEXT: %841 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %842 = llvm.load %841 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %843 = arith.addi %842, %c224_i256 : i256 loc(#loc7) -// CHECK-NEXT: %844 = arith.cmpi ugt, %843, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %845 = arith.cmpi ult, %843, %842 : i256 loc(#loc7) -// CHECK-NEXT: %846 = arith.ori %844, %845 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %846, ^bb133, ^bb134 loc(#loc7) -// CHECK-NEXT: ^bb133: // pred: ^bb132 -// CHECK-NEXT: %847 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %847 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %848 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %848 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %849 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%849, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb134 loc(#loc7) -// CHECK-NEXT: ^bb134: // 2 preds: ^bb132, ^bb133 -// CHECK-NEXT: %850 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %843, %850 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb135(%c0_i256, %842, %c41_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb135(%851: i256 loc({{.*}}:47:2), %852: i256 loc({{.*}}:47:2), %853: i256 loc({{.*}}:47:2), %854: i256 loc({{.*}}:47:2)): // 2 preds: ^bb134, ^bb139 -// CHECK-NEXT: %855 = arith.cmpi ult, %851, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %855, ^bb136(%851, %852, %853, %854 : i256, i256, i256, i256), ^bb140(%852, %853, %854 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb136(%856: i256 loc({{.*}}:47:2), %857: i256 loc({{.*}}:47:2), %858: i256 loc({{.*}}:47:2), %859: i256 loc({{.*}}:47:2)): // pred: ^bb135 -// CHECK-NEXT: %860 = llvm.inttoptr %858 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %861 = llvm.load %860 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb137(%c0_i256, %857, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb137(%862: i256 loc({{.*}}:47:2), %863: i256 loc({{.*}}:47:2), %864: i256 loc({{.*}}:47:2)): // 2 preds: ^bb136, ^bb138 -// CHECK-NEXT: %865 = arith.cmpi ult, %862, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %865, ^bb138(%862, %863, %864 : i256, i256, i256), ^bb139(%863 : i256) loc(#loc7) -// CHECK-NEXT: ^bb138(%866: i256 loc({{.*}}:47:2), %867: i256 loc({{.*}}:47:2), %868: i256 loc({{.*}}:47:2)): // pred: ^bb137 -// CHECK-NEXT: %869 = arith.shrui %861, %868 : i256 loc(#loc7) -// CHECK-NEXT: %870 = "llvm.intrcall"(%c8_i256, %869) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %871 = llvm.inttoptr %867 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %870, %871 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %872 = arith.addi %867, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %873 = arith.addi %868, %c72_i256 : i256 loc(#loc7) -// CHECK-NEXT: %874 = arith.addi %866, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb137(%874, %872, %873 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb139(%875: i256 loc({{.*}}:47:2)): // pred: ^bb137 -// CHECK-NEXT: %876 = arith.addi %858, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %877 = arith.addi %859, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: %878 = arith.addi %856, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb135(%878, %875, %876, %877 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb140(%879: i256 loc({{.*}}:47:2), %880: i256 loc({{.*}}:47:2), %881: i256 loc({{.*}}:47:2)): // pred: ^bb135 -// CHECK-NEXT: %882 = arith.cmpi ult, %881, %c7_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %882, ^bb141, ^bb144 loc(#loc7) -// CHECK-NEXT: ^bb141: // pred: ^bb140 -// CHECK-NEXT: %883 = llvm.inttoptr %880 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %884 = llvm.load %883 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb142(%881, %879, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb142(%885: i256 loc({{.*}}:47:2), %886: i256 loc({{.*}}:47:2), %887: i256 loc({{.*}}:47:2)): // 2 preds: ^bb141, ^bb143 -// CHECK-NEXT: %888 = arith.cmpi ult, %885, %c7_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %888, ^bb143(%885, %886, %887 : i256, i256, i256), ^bb144 loc(#loc7) -// CHECK-NEXT: ^bb143(%889: i256 loc({{.*}}:47:2), %890: i256 loc({{.*}}:47:2), %891: i256 loc({{.*}}:47:2)): // pred: ^bb142 -// CHECK-NEXT: %892 = arith.shrui %884, %891 : i256 loc(#loc7) -// CHECK-NEXT: %893 = "llvm.intrcall"(%c8_i256, %892) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %894 = llvm.inttoptr %890 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %893, %894 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %895 = arith.addi %890, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %896 = arith.addi %891, %c72_i256 : i256 loc(#loc7) -// CHECK-NEXT: %897 = arith.addi %889, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb142(%897, %895, %896 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb144: // 2 preds: ^bb140, ^bb142 -// CHECK-NEXT: %898 = llvm.inttoptr %840 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %842, %898 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %899 = arith.addi %1, %c512_i256 : i256 loc(#loc7) -// CHECK-NEXT: %900 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %901 = llvm.load %900 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %902 = arith.shrui %901, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %903 = arith.andi %901, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %904 = arith.cmpi eq, %903, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %905 = arith.andi %902, %c127_i256 : i256 loc(#loc7) -// CHECK-NEXT: %906 = arith.select %904, %905, %902 : i256 loc(#loc7) -// CHECK-NEXT: %907 = arith.cmpi ult, %906, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %908 = arith.extui %907 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %909 = arith.cmpi eq, %903, %908 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %909, ^bb145, ^bb146 loc(#loc7) -// CHECK-NEXT: ^bb145: // pred: ^bb144 -// CHECK-NEXT: %910 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %910 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %911 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c34_i256, %911 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %912 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%912, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb146 loc(#loc7) -// CHECK-NEXT: ^bb146: // 2 preds: ^bb144, ^bb145 -// CHECK-NEXT: %913 = arith.addi %906, %c31_i256 : i256 loc(#loc7) -// CHECK-NEXT: %914 = arith.andi %913, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %915 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %916 = llvm.load %915 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %917 = arith.addi %914, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %918 = arith.andi %917, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %919 = arith.addi %916, %918 : i256 loc(#loc7) -// CHECK-NEXT: %920 = arith.cmpi ugt, %919, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %921 = arith.cmpi ult, %919, %916 : i256 loc(#loc7) -// CHECK-NEXT: %922 = arith.ori %920, %921 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %922, ^bb147, ^bb148 loc(#loc7) -// CHECK-NEXT: ^bb147: // pred: ^bb146 -// CHECK-NEXT: %923 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %923 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %924 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %924 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %925 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%925, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb148 loc(#loc7) -// CHECK-NEXT: ^bb148: // 2 preds: ^bb146, ^bb147 -// CHECK-NEXT: %926 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %919, %926 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %927 = llvm.inttoptr %916 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %906, %927 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %928 = arith.addi %916, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %929 = llvm.inttoptr %916 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %906, %929 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %930 = arith.andi %901, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %931 = arith.cmpi eq, %930, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %931, ^bb152, ^bb149 loc(#loc7) -// CHECK-NEXT: ^bb149: // pred: ^bb148 -// CHECK-NEXT: %932 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c44_i256, %932 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %933 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %934 = "llvm.intrcall"(%933, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb150(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb150(%935: i256 loc({{.*}}:47:2)): // 2 preds: ^bb149, ^bb151 -// CHECK-NEXT: %936 = arith.cmpi ult, %935, %906 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %936, ^bb151(%935 : i256), ^bb153 loc(#loc7) -// CHECK-NEXT: ^bb151(%937: i256 loc({{.*}}:47:2)): // pred: ^bb150 -// CHECK-NEXT: %938 = arith.divui %937, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %939 = arith.addi %934, %938 : i256 loc(#loc7) -// CHECK-NEXT: %940 = llvm.inttoptr %939 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %941 = llvm.load %940 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %942 = arith.addi %928, %937 : i256 loc(#loc7) -// CHECK-NEXT: %943 = llvm.inttoptr %942 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %941, %943 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %944 = arith.addi %937, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb150(%944 : i256) loc(#loc7) -// CHECK-NEXT: ^bb152: // pred: ^bb148 -// CHECK-NEXT: %945 = arith.andi %901, %c-256_i256 : i256 loc(#loc7) -// CHECK-NEXT: %946 = llvm.inttoptr %928 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %945, %946 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb153 loc(#loc7) -// CHECK-NEXT: ^bb153: // 2 preds: ^bb150, ^bb152 -// CHECK-NEXT: %947 = llvm.inttoptr %899 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %916, %947 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %948 = arith.addi %1, %c544_i256 : i256 loc(#loc7) -// CHECK-NEXT: %949 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %950 = llvm.load %949 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %951 = arith.addi %950, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %952 = arith.cmpi ugt, %951, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %953 = arith.cmpi ult, %951, %950 : i256 loc(#loc7) -// CHECK-NEXT: %954 = arith.ori %952, %953 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %954, ^bb154, ^bb155 loc(#loc7) -// CHECK-NEXT: ^bb154: // pred: ^bb153 -// CHECK-NEXT: %955 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %955 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %956 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %956 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %957 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%957, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb155 loc(#loc7) -// CHECK-NEXT: ^bb155: // 2 preds: ^bb153, ^bb154 -// CHECK-NEXT: %958 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %951, %958 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb156(%c0_i256, %950, %c45_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb156(%959: i256 loc({{.*}}:47:2), %960: i256 loc({{.*}}:47:2), %961: i256 loc({{.*}}:47:2), %962: i256 loc({{.*}}:47:2)): // 2 preds: ^bb155, ^bb160 -// CHECK-NEXT: %963 = arith.cmpi ult, %959, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %963, ^bb157(%959, %960, %961, %962 : i256, i256, i256, i256), ^bb161(%960, %961, %962 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb157(%964: i256 loc({{.*}}:47:2), %965: i256 loc({{.*}}:47:2), %966: i256 loc({{.*}}:47:2), %967: i256 loc({{.*}}:47:2)): // pred: ^bb156 -// CHECK-NEXT: %968 = llvm.inttoptr %966 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %969 = llvm.load %968 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb158(%c0_i256, %965, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb158(%970: i256 loc({{.*}}:47:2), %971: i256 loc({{.*}}:47:2), %972: i256 loc({{.*}}:47:2)): // 2 preds: ^bb157, ^bb159 -// CHECK-NEXT: %973 = arith.cmpi ult, %970, %c4_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %973, ^bb159(%970, %971, %972 : i256, i256, i256), ^bb160(%971 : i256) loc(#loc7) -// CHECK-NEXT: ^bb159(%974: i256 loc({{.*}}:47:2), %975: i256 loc({{.*}}:47:2), %976: i256 loc({{.*}}:47:2)): // pred: ^bb158 -// CHECK-NEXT: %977 = arith.shrui %969, %976 : i256 loc(#loc7) -// CHECK-NEXT: %978 = arith.shli %977, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %979 = llvm.inttoptr %975 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %978, %979 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %980 = arith.addi %975, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %981 = arith.addi %976, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %982 = arith.addi %974, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb158(%982, %980, %981 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb160(%983: i256 loc({{.*}}:47:2)): // pred: ^bb158 -// CHECK-NEXT: %984 = arith.addi %966, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %985 = arith.addi %967, %c4_i256 : i256 loc(#loc7) -// CHECK-NEXT: %986 = arith.addi %964, %c4_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb156(%986, %983, %984, %985 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb161(%987: i256 loc({{.*}}:47:2), %988: i256 loc({{.*}}:47:2), %989: i256 loc({{.*}}:47:2)): // pred: ^bb156 -// CHECK-NEXT: %990 = arith.cmpi ult, %989, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %990, ^bb162, ^bb165 loc(#loc7) -// CHECK-NEXT: ^bb162: // pred: ^bb161 -// CHECK-NEXT: %991 = llvm.inttoptr %988 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %992 = llvm.load %991 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb163(%989, %987, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb163(%993: i256 loc({{.*}}:47:2), %994: i256 loc({{.*}}:47:2), %995: i256 loc({{.*}}:47:2)): // 2 preds: ^bb162, ^bb164 -// CHECK-NEXT: %996 = arith.cmpi ult, %993, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %996, ^bb164(%993, %994, %995 : i256, i256, i256), ^bb165 loc(#loc7) -// CHECK-NEXT: ^bb164(%997: i256 loc({{.*}}:47:2), %998: i256 loc({{.*}}:47:2), %999: i256 loc({{.*}}:47:2)): // pred: ^bb163 -// CHECK-NEXT: %1000 = arith.shrui %992, %999 : i256 loc(#loc7) -// CHECK-NEXT: %1001 = arith.shli %1000, %c192_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1002 = llvm.inttoptr %998 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1001, %1002 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1003 = arith.addi %998, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1004 = arith.addi %999, %c64_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1005 = arith.addi %997, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb163(%1005, %1003, %1004 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb165: // 2 preds: ^bb161, ^bb163 -// CHECK-NEXT: %1006 = llvm.inttoptr %948 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %950, %1006 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1007 = arith.addi %1, %c576_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1008 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1009 = llvm.load %1008 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %1010 = arith.addi %1009, %c288_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1011 = arith.cmpi ugt, %1010, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1012 = arith.cmpi ult, %1010, %1009 : i256 loc(#loc7) -// CHECK-NEXT: %1013 = arith.ori %1011, %1012 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1013, ^bb166, ^bb167 loc(#loc7) -// CHECK-NEXT: ^bb166: // pred: ^bb165 -// CHECK-NEXT: %1014 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1014 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1015 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %1015 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1016 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%1016, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb167 loc(#loc7) -// CHECK-NEXT: ^bb167: // 2 preds: ^bb165, ^bb166 -// CHECK-NEXT: %1017 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1010, %1017 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb168(%c0_i256, %1009, %c47_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb168(%1018: i256 loc({{.*}}:47:2), %1019: i256 loc({{.*}}:47:2), %1020: i256 loc({{.*}}:47:2), %1021: i256 loc({{.*}}:47:2)): // 2 preds: ^bb167, ^bb172 -// CHECK-NEXT: %1022 = arith.cmpi ult, %1018, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1022, ^bb169(%1018, %1019, %1020, %1021 : i256, i256, i256, i256), ^bb173(%1019, %1020, %1021 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb169(%1023: i256 loc({{.*}}:47:2), %1024: i256 loc({{.*}}:47:2), %1025: i256 loc({{.*}}:47:2), %1026: i256 loc({{.*}}:47:2)): // pred: ^bb168 -// CHECK-NEXT: %1027 = llvm.inttoptr %1025 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1028 = llvm.load %1027 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb170(%c0_i256, %1024, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb170(%1029: i256 loc({{.*}}:47:2), %1030: i256 loc({{.*}}:47:2), %1031: i256 loc({{.*}}:47:2)): // 2 preds: ^bb169, ^bb171 -// CHECK-NEXT: %1032 = arith.cmpi ult, %1029, %c16_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1032, ^bb171(%1029, %1030, %1031 : i256, i256, i256), ^bb172(%1030 : i256) loc(#loc7) -// CHECK-NEXT: ^bb171(%1033: i256 loc({{.*}}:47:2), %1034: i256 loc({{.*}}:47:2), %1035: i256 loc({{.*}}:47:2)): // pred: ^bb170 -// CHECK-NEXT: %1036 = arith.shrui %1028, %1035 : i256 loc(#loc7) -// CHECK-NEXT: %1037 = "llvm.intrcall"(%c1_i256, %1036) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %1038 = llvm.inttoptr %1034 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1037, %1038 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1039 = arith.addi %1034, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1040 = arith.addi %1035, %c16_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1041 = arith.addi %1033, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb170(%1041, %1039, %1040 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb172(%1042: i256 loc({{.*}}:47:2)): // pred: ^bb170 -// CHECK-NEXT: %1043 = arith.addi %1025, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1044 = arith.addi %1026, %c16_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1045 = arith.addi %1023, %c16_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb168(%1045, %1042, %1043, %1044 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb173(%1046: i256 loc({{.*}}:47:2), %1047: i256 loc({{.*}}:47:2), %1048: i256 loc({{.*}}:47:2)): // pred: ^bb168 -// CHECK-NEXT: %1049 = arith.cmpi ult, %1048, %c9_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1049, ^bb174, ^bb177 loc(#loc7) -// CHECK-NEXT: ^bb174: // pred: ^bb173 -// CHECK-NEXT: %1050 = llvm.inttoptr %1047 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1051 = llvm.load %1050 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb175(%1048, %1046, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb175(%1052: i256 loc({{.*}}:47:2), %1053: i256 loc({{.*}}:47:2), %1054: i256 loc({{.*}}:47:2)): // 2 preds: ^bb174, ^bb176 -// CHECK-NEXT: %1055 = arith.cmpi ult, %1052, %c9_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1055, ^bb176(%1052, %1053, %1054 : i256, i256, i256), ^bb177 loc(#loc7) -// CHECK-NEXT: ^bb176(%1056: i256 loc({{.*}}:47:2), %1057: i256 loc({{.*}}:47:2), %1058: i256 loc({{.*}}:47:2)): // pred: ^bb175 -// CHECK-NEXT: %1059 = arith.shrui %1051, %1058 : i256 loc(#loc7) -// CHECK-NEXT: %1060 = "llvm.intrcall"(%c1_i256, %1059) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %1061 = llvm.inttoptr %1057 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1060, %1061 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1062 = arith.addi %1057, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1063 = arith.addi %1058, %c16_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1064 = arith.addi %1056, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb175(%1064, %1062, %1063 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb177: // 2 preds: ^bb173, ^bb175 -// CHECK-NEXT: %1065 = llvm.inttoptr %1007 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1009, %1065 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1066 = arith.addi %1, %c608_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1067 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1068 = llvm.load %1067 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %1069 = arith.addi %1068, %c96_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1070 = arith.cmpi ugt, %1069, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1071 = arith.cmpi ult, %1069, %1068 : i256 loc(#loc7) -// CHECK-NEXT: %1072 = arith.ori %1070, %1071 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1072, ^bb178, ^bb179 loc(#loc7) -// CHECK-NEXT: ^bb178: // pred: ^bb177 -// CHECK-NEXT: %1073 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1073 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1074 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %1074 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1075 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%1075, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb179 loc(#loc7) -// CHECK-NEXT: ^bb179: // 2 preds: ^bb177, ^bb178 -// CHECK-NEXT: %1076 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1069, %1076 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb180(%c0_i256, %1068, %c48_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb180(%1077: i256 loc({{.*}}:47:2), %1078: i256 loc({{.*}}:47:2), %1079: i256 loc({{.*}}:47:2), %1080: i256 loc({{.*}}:47:2)): // 2 preds: ^bb179, ^bb184 -// CHECK-NEXT: %1081 = arith.cmpi ult, %1077, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1081, ^bb181(%1077, %1078, %1079, %1080 : i256, i256, i256, i256), ^bb185(%1078, %1079, %1080 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb181(%1082: i256 loc({{.*}}:47:2), %1083: i256 loc({{.*}}:47:2), %1084: i256 loc({{.*}}:47:2), %1085: i256 loc({{.*}}:47:2)): // pred: ^bb180 -// CHECK-NEXT: %1086 = llvm.inttoptr %1084 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1087 = llvm.load %1086 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb182(%c0_i256, %1083, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb182(%1088: i256 loc({{.*}}:47:2), %1089: i256 loc({{.*}}:47:2), %1090: i256 loc({{.*}}:47:2)): // 2 preds: ^bb181, ^bb183 -// CHECK-NEXT: %1091 = arith.cmpi ult, %1088, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1091, ^bb183(%1088, %1089, %1090 : i256, i256, i256), ^bb184(%1089 : i256) loc(#loc7) -// CHECK-NEXT: ^bb183(%1092: i256 loc({{.*}}:47:2), %1093: i256 loc({{.*}}:47:2), %1094: i256 loc({{.*}}:47:2)): // pred: ^bb182 -// CHECK-NEXT: %1095 = arith.shrui %1087, %1094 : i256 loc(#loc7) -// CHECK-NEXT: %1096 = arith.andi %1095, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1097 = llvm.inttoptr %1093 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1096, %1097 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1098 = arith.addi %1093, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1099 = arith.addi %1094, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1100 = arith.addi %1092, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb182(%1100, %1098, %1099 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb184(%1101: i256 loc({{.*}}:47:2)): // pred: ^bb182 -// CHECK-NEXT: %1102 = arith.addi %1084, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1103 = arith.addi %1085, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1104 = arith.addi %1082, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb180(%1104, %1101, %1102, %1103 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb185(%1105: i256 loc({{.*}}:47:2), %1106: i256 loc({{.*}}:47:2), %1107: i256 loc({{.*}}:47:2)): // pred: ^bb180 -// CHECK-NEXT: %1108 = arith.cmpi ult, %1107, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1108, ^bb186, ^bb189 loc(#loc7) -// CHECK-NEXT: ^bb186: // pred: ^bb185 -// CHECK-NEXT: %1109 = llvm.inttoptr %1106 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1110 = llvm.load %1109 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb187(%1107, %1105, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb187(%1111: i256 loc({{.*}}:47:2), %1112: i256 loc({{.*}}:47:2), %1113: i256 loc({{.*}}:47:2)): // 2 preds: ^bb186, ^bb188 -// CHECK-NEXT: %1114 = arith.cmpi ult, %1111, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1114, ^bb188(%1111, %1112, %1113 : i256, i256, i256), ^bb189 loc(#loc7) -// CHECK-NEXT: ^bb188(%1115: i256 loc({{.*}}:47:2), %1116: i256 loc({{.*}}:47:2), %1117: i256 loc({{.*}}:47:2)): // pred: ^bb187 -// CHECK-NEXT: %1118 = arith.shrui %1110, %1117 : i256 loc(#loc7) -// CHECK-NEXT: %1119 = arith.andi %1118, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1120 = llvm.inttoptr %1116 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1119, %1120 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1121 = arith.addi %1116, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1122 = arith.addi %1117, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1123 = arith.addi %1115, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb187(%1123, %1121, %1122 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb189: // 2 preds: ^bb185, ^bb187 -// CHECK-NEXT: %1124 = llvm.inttoptr %1066 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1068, %1124 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1125 = arith.addi %1, %c640_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1126 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1127 = llvm.load %1126 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %1128 = arith.addi %1127, %c96_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1129 = arith.cmpi ugt, %1128, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1130 = arith.cmpi ult, %1128, %1127 : i256 loc(#loc7) -// CHECK-NEXT: %1131 = arith.ori %1129, %1130 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1131, ^bb190, ^bb191 loc(#loc7) -// CHECK-NEXT: ^bb190: // pred: ^bb189 -// CHECK-NEXT: %1132 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1132 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1133 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %1133 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1134 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%1134, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb191 loc(#loc7) -// CHECK-NEXT: ^bb191: // 2 preds: ^bb189, ^bb190 -// CHECK-NEXT: %1135 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1128, %1135 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb192(%c0_i256, %1127, %c50_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb192(%1136: i256 loc({{.*}}:47:2), %1137: i256 loc({{.*}}:47:2), %1138: i256 loc({{.*}}:47:2), %1139: i256 loc({{.*}}:47:2)): // 2 preds: ^bb191, ^bb196 -// CHECK-NEXT: %1140 = arith.cmpi ult, %1136, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1140, ^bb193(%1136, %1137, %1138, %1139 : i256, i256, i256, i256), ^bb197(%1137, %1138, %1139 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb193(%1141: i256 loc({{.*}}:47:2), %1142: i256 loc({{.*}}:47:2), %1143: i256 loc({{.*}}:47:2), %1144: i256 loc({{.*}}:47:2)): // pred: ^bb192 -// CHECK-NEXT: %1145 = llvm.inttoptr %1143 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1146 = llvm.load %1145 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb194(%c0_i256, %1142, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb194(%1147: i256 loc({{.*}}:47:2), %1148: i256 loc({{.*}}:47:2), %1149: i256 loc({{.*}}:47:2)): // 2 preds: ^bb193, ^bb195 -// CHECK-NEXT: %1150 = arith.cmpi ult, %1147, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1150, ^bb195(%1147, %1148, %1149 : i256, i256, i256), ^bb196(%1148 : i256) loc(#loc7) -// CHECK-NEXT: ^bb195(%1151: i256 loc({{.*}}:47:2), %1152: i256 loc({{.*}}:47:2), %1153: i256 loc({{.*}}:47:2)): // pred: ^bb194 -// CHECK-NEXT: %1154 = arith.shrui %1146, %1153 : i256 loc(#loc7) -// CHECK-NEXT: %1155 = "llvm.intrcall"(%c15_i256, %1154) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %1156 = llvm.inttoptr %1152 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1155, %1156 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1157 = arith.addi %1152, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1158 = arith.addi %1153, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1159 = arith.addi %1151, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb194(%1159, %1157, %1158 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb196(%1160: i256 loc({{.*}}:47:2)): // pred: ^bb194 -// CHECK-NEXT: %1161 = arith.addi %1143, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1162 = arith.addi %1144, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1163 = arith.addi %1141, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb192(%1163, %1160, %1161, %1162 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb197(%1164: i256 loc({{.*}}:47:2), %1165: i256 loc({{.*}}:47:2), %1166: i256 loc({{.*}}:47:2)): // pred: ^bb192 -// CHECK-NEXT: %1167 = arith.cmpi ult, %1166, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1167, ^bb198, ^bb201 loc(#loc7) -// CHECK-NEXT: ^bb198: // pred: ^bb197 -// CHECK-NEXT: %1168 = llvm.inttoptr %1165 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1169 = llvm.load %1168 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb199(%1166, %1164, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb199(%1170: i256 loc({{.*}}:47:2), %1171: i256 loc({{.*}}:47:2), %1172: i256 loc({{.*}}:47:2)): // 2 preds: ^bb198, ^bb200 -// CHECK-NEXT: %1173 = arith.cmpi ult, %1170, %c3_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1173, ^bb200(%1170, %1171, %1172 : i256, i256, i256), ^bb201 loc(#loc7) -// CHECK-NEXT: ^bb200(%1174: i256 loc({{.*}}:47:2), %1175: i256 loc({{.*}}:47:2), %1176: i256 loc({{.*}}:47:2)): // pred: ^bb199 -// CHECK-NEXT: %1177 = arith.shrui %1169, %1176 : i256 loc(#loc7) -// CHECK-NEXT: %1178 = "llvm.intrcall"(%c15_i256, %1177) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %1179 = llvm.inttoptr %1175 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1178, %1179 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1180 = arith.addi %1175, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1181 = arith.addi %1176, %c128_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1182 = arith.addi %1174, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb199(%1182, %1180, %1181 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb201: // 2 preds: ^bb197, ^bb199 -// CHECK-NEXT: %1183 = llvm.inttoptr %1125 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1127, %1183 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1184 = arith.addi %1, %c672_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1185 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1186 = llvm.load %1185 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %1187 = arith.addi %1186, %c160_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1188 = arith.cmpi ugt, %1187, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1189 = arith.cmpi ult, %1187, %1186 : i256 loc(#loc7) -// CHECK-NEXT: %1190 = arith.ori %1188, %1189 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1190, ^bb202, ^bb203 loc(#loc7) -// CHECK-NEXT: ^bb202: // pred: ^bb201 -// CHECK-NEXT: %1191 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1191 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1192 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %1192 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1193 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%1193, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb203 loc(#loc7) -// CHECK-NEXT: ^bb203: // 2 preds: ^bb201, ^bb202 -// CHECK-NEXT: %1194 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1187, %1194 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb204(%c0_i256, %1186, %c52_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb204(%1195: i256 loc({{.*}}:47:2), %1196: i256 loc({{.*}}:47:2), %1197: i256 loc({{.*}}:47:2), %1198: i256 loc({{.*}}:47:2)): // 2 preds: ^bb203, ^bb208 -// CHECK-NEXT: %1199 = arith.cmpi ult, %1195, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1199, ^bb205(%1195, %1196, %1197, %1198 : i256, i256, i256, i256), ^bb209(%1196, %1197, %1198 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb205(%1200: i256 loc({{.*}}:47:2), %1201: i256 loc({{.*}}:47:2), %1202: i256 loc({{.*}}:47:2), %1203: i256 loc({{.*}}:47:2)): // pred: ^bb204 -// CHECK-NEXT: %1204 = llvm.inttoptr %1202 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1205 = llvm.load %1204 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb206(%c0_i256, %1201, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb206(%1206: i256 loc({{.*}}:47:2), %1207: i256 loc({{.*}}:47:2), %1208: i256 loc({{.*}}:47:2)): // 2 preds: ^bb205, ^bb207 -// CHECK-NEXT: %1209 = arith.cmpi ult, %1206, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1209, ^bb207(%1206, %1207, %1208 : i256, i256, i256), ^bb208(%1207 : i256) loc(#loc7) -// CHECK-NEXT: ^bb207(%1210: i256 loc({{.*}}:47:2), %1211: i256 loc({{.*}}:47:2), %1212: i256 loc({{.*}}:47:2)): // pred: ^bb206 -// CHECK-NEXT: %1213 = arith.shrui %1205, %1212 : i256 loc(#loc7) -// CHECK-NEXT: %1214 = arith.andi %1213, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1215 = arith.cmpi ne, %1214, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1216 = arith.extui %1215 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %1217 = llvm.inttoptr %1211 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1216, %1217 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1218 = arith.addi %1211, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1219 = arith.addi %1212, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1220 = arith.addi %1210, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb206(%1220, %1218, %1219 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb208(%1221: i256 loc({{.*}}:47:2)): // pred: ^bb206 -// CHECK-NEXT: %1222 = arith.addi %1202, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1223 = arith.addi %1203, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1224 = arith.addi %1200, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb204(%1224, %1221, %1222, %1223 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb209(%1225: i256 loc({{.*}}:47:2), %1226: i256 loc({{.*}}:47:2), %1227: i256 loc({{.*}}:47:2)): // pred: ^bb204 -// CHECK-NEXT: %1228 = arith.cmpi ult, %1227, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1228, ^bb210, ^bb213 loc(#loc7) -// CHECK-NEXT: ^bb210: // pred: ^bb209 -// CHECK-NEXT: %1229 = llvm.inttoptr %1226 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1230 = llvm.load %1229 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb211(%1227, %1225, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb211(%1231: i256 loc({{.*}}:47:2), %1232: i256 loc({{.*}}:47:2), %1233: i256 loc({{.*}}:47:2)): // 2 preds: ^bb210, ^bb212 -// CHECK-NEXT: %1234 = arith.cmpi ult, %1231, %c5_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1234, ^bb212(%1231, %1232, %1233 : i256, i256, i256), ^bb213 loc(#loc7) -// CHECK-NEXT: ^bb212(%1235: i256 loc({{.*}}:47:2), %1236: i256 loc({{.*}}:47:2), %1237: i256 loc({{.*}}:47:2)): // pred: ^bb211 -// CHECK-NEXT: %1238 = arith.shrui %1230, %1237 : i256 loc(#loc7) -// CHECK-NEXT: %1239 = arith.andi %1238, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1240 = arith.cmpi ne, %1239, %c0_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1241 = arith.extui %1240 : i1 to i256 loc(#loc7) -// CHECK-NEXT: %1242 = llvm.inttoptr %1236 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1241, %1242 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1243 = arith.addi %1236, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1244 = arith.addi %1237, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1245 = arith.addi %1235, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb211(%1245, %1243, %1244 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb213: // 2 preds: ^bb209, ^bb211 -// CHECK-NEXT: %1246 = llvm.inttoptr %1184 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1186, %1246 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1247 = arith.addi %1, %c704_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1248 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1249 = llvm.load %1248 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %1250 = llvm.inttoptr %1247 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1249, %1250 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1251 = arith.addi %1, %c736_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1252 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1253 = llvm.load %1252 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %1254 = llvm.inttoptr %1251 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1253, %1254 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1255 = arith.addi %1, %c768_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1256 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1257 = llvm.load %1256 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %1258 = arith.muli %1257, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1259 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1260 = llvm.load %1259 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %1261 = arith.addi %1258, %c63_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1262 = arith.andi %1261, %c-32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1263 = arith.addi %1260, %1262 : i256 loc(#loc7) -// CHECK-NEXT: %1264 = arith.cmpi ugt, %1263, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1265 = arith.cmpi ult, %1263, %1260 : i256 loc(#loc7) -// CHECK-NEXT: %1266 = arith.ori %1264, %1265 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1266, ^bb214, ^bb215 loc(#loc7) -// CHECK-NEXT: ^bb214: // pred: ^bb213 -// CHECK-NEXT: %1267 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1267 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1268 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %1268 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1269 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%1269, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb215 loc(#loc7) -// CHECK-NEXT: ^bb215: // 2 preds: ^bb213, ^bb214 -// CHECK-NEXT: %1270 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1263, %1270 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1271 = llvm.inttoptr %1260 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1257, %1271 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1272 = arith.addi %1260, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1273 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c55_i256, %1273 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1274 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1275 = "llvm.intrcall"(%1274, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb216(%c0_i256 : i256) loc(#loc7) -// CHECK-NEXT: ^bb216(%1276: i256 loc({{.*}}:47:2)): // 2 preds: ^bb215, ^bb217 -// CHECK-NEXT: %1277 = arith.cmpi ult, %1276, %1257 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1277, ^bb217(%1276 : i256), ^bb218 loc(#loc7) -// CHECK-NEXT: ^bb217(%1278: i256 loc({{.*}}:47:2)): // pred: ^bb216 -// CHECK-NEXT: %1279 = arith.addi %1275, %1278 : i256 loc(#loc7) -// CHECK-NEXT: %1280 = arith.muli %1278, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1281 = arith.addi %1272, %1280 : i256 loc(#loc7) -// CHECK-NEXT: %1282 = llvm.inttoptr %1279 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1283 = llvm.load %1282 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %1284 = arith.andi %1283, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1285 = llvm.inttoptr %1281 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1284, %1285 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1286 = arith.addi %1278, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb216(%1286 : i256) loc(#loc7) -// CHECK-NEXT: ^bb218: // pred: ^bb216 -// CHECK-NEXT: %1287 = llvm.inttoptr %1255 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1260, %1287 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1288 = arith.addi %1, %c800_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1289 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1290 = llvm.load %1289 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: %1291 = "llvm.intrcall"(%c0_i256, %1290) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %1292 = "llvm.intrcall"(%c0_i256, %1291) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc7) -// CHECK-NEXT: %1293 = llvm.inttoptr %1288 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1292, %1293 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1294 = arith.addi %1, %c832_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1295 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1296 = llvm.load %1295 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc7) -// CHECK-NEXT: %1297 = arith.addi %1296, %c1056_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1298 = arith.cmpi ugt, %1297, %c18446744073709551615_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1299 = arith.cmpi ult, %1297, %1296 : i256 loc(#loc7) -// CHECK-NEXT: %1300 = arith.ori %1298, %1299 : i1 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1300, ^bb219, ^bb220 loc(#loc7) -// CHECK-NEXT: ^bb219: // pred: ^bb218 -// CHECK-NEXT: %1301 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1301 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1302 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %c65_i256, %1302 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1303 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: "llvm.intrcall"(%1303, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc7) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc7) -// CHECK-NEXT: cf.br ^bb220 loc(#loc7) -// CHECK-NEXT: ^bb220: // 2 preds: ^bb218, ^bb219 -// CHECK-NEXT: %1304 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1297, %1304 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: cf.br ^bb221(%c0_i256, %1296, %c57_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb221(%1305: i256 loc({{.*}}:47:2), %1306: i256 loc({{.*}}:47:2), %1307: i256 loc({{.*}}:47:2), %1308: i256 loc({{.*}}:47:2)): // 2 preds: ^bb220, ^bb225 -// CHECK-NEXT: %1309 = arith.cmpi ult, %1305, %c2_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1309, ^bb222(%1305, %1306, %1307, %1308 : i256, i256, i256, i256), ^bb226(%1306, %1307, %1308 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb222(%1310: i256 loc({{.*}}:47:2), %1311: i256 loc({{.*}}:47:2), %1312: i256 loc({{.*}}:47:2), %1313: i256 loc({{.*}}:47:2)): // pred: ^bb221 -// CHECK-NEXT: %1314 = llvm.inttoptr %1312 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1315 = llvm.load %1314 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb223(%c0_i256, %1311, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb223(%1316: i256 loc({{.*}}:47:2), %1317: i256 loc({{.*}}:47:2), %1318: i256 loc({{.*}}:47:2)): // 2 preds: ^bb222, ^bb224 -// CHECK-NEXT: %1319 = arith.cmpi ult, %1316, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1319, ^bb224(%1316, %1317, %1318 : i256, i256, i256), ^bb225(%1317 : i256) loc(#loc7) -// CHECK-NEXT: ^bb224(%1320: i256 loc({{.*}}:47:2), %1321: i256 loc({{.*}}:47:2), %1322: i256 loc({{.*}}:47:2)): // pred: ^bb223 -// CHECK-NEXT: %1323 = arith.shrui %1315, %1322 : i256 loc(#loc7) -// CHECK-NEXT: %1324 = arith.andi %1323, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1325 = llvm.inttoptr %1321 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1324, %1325 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1326 = arith.addi %1321, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1327 = arith.addi %1322, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1328 = arith.addi %1320, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb223(%1328, %1326, %1327 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb225(%1329: i256 loc({{.*}}:47:2)): // pred: ^bb223 -// CHECK-NEXT: %1330 = arith.addi %1312, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1331 = arith.addi %1313, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1332 = arith.addi %1310, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb221(%1332, %1329, %1330, %1331 : i256, i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb226(%1333: i256 loc({{.*}}:47:2), %1334: i256 loc({{.*}}:47:2), %1335: i256 loc({{.*}}:47:2)): // pred: ^bb221 -// CHECK-NEXT: %1336 = arith.cmpi ult, %1335, %c33_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1336, ^bb227, ^bb230 loc(#loc7) -// CHECK-NEXT: ^bb227: // pred: ^bb226 -// CHECK-NEXT: %1337 = llvm.inttoptr %1334 : i256 to !llvm.ptr<5> loc(#loc7) -// CHECK-NEXT: %1338 = llvm.load %1337 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb228(%1335, %1333, %c0_i256 : i256, i256, i256) loc(#loc7) -// CHECK-NEXT: ^bb228(%1339: i256 loc({{.*}}:47:2), %1340: i256 loc({{.*}}:47:2), %1341: i256 loc({{.*}}:47:2)): // 2 preds: ^bb227, ^bb229 -// CHECK-NEXT: %1342 = arith.cmpi ult, %1339, %c33_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.cond_br %1342, ^bb229(%1339, %1340, %1341 : i256, i256, i256), ^bb230 loc(#loc7) -// CHECK-NEXT: ^bb229(%1343: i256 loc({{.*}}:47:2), %1344: i256 loc({{.*}}:47:2), %1345: i256 loc({{.*}}:47:2)): // pred: ^bb228 -// CHECK-NEXT: %1346 = arith.shrui %1338, %1345 : i256 loc(#loc7) -// CHECK-NEXT: %1347 = arith.andi %1346, %c255_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1348 = llvm.inttoptr %1344 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1347, %1348 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: %1349 = arith.addi %1344, %c32_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1350 = arith.addi %1345, %c8_i256 : i256 loc(#loc7) -// CHECK-NEXT: %1351 = arith.addi %1343, %c1_i256 : i256 loc(#loc7) -// CHECK-NEXT: cf.br ^bb228(%1351, %1349, %1350 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc7) -// CHECK-NEXT: ^bb230: // 2 preds: ^bb226, ^bb228 -// CHECK-NEXT: %1352 = llvm.inttoptr %1294 : i256 to !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: llvm.store %1296, %1352 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc7) -// CHECK-NEXT: return %1 : i256 loc(#loc8) -// CHECK-NEXT: } loc(#loc6) +// CHECK-NEXT: %833 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %826, %833 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb130(%c0_i256, %825, %c41_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb130(%834: i256 loc({{.*}}:47:2), %835: i256 loc({{.*}}:47:2), %836: i256 loc({{.*}}:47:2), %837: i256 loc({{.*}}:47:2)): // 2 preds: ^bb129, ^bb134 +// CHECK-NEXT: %838 = arith.cmpi ult, %834, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %838, ^bb131(%834, %835, %836, %837 : i256, i256, i256, i256), ^bb135(%835, %836, %837 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb131(%839: i256 loc({{.*}}:47:2), %840: i256 loc({{.*}}:47:2), %841: i256 loc({{.*}}:47:2), %842: i256 loc({{.*}}:47:2)): // pred: ^bb130 +// CHECK-NEXT: %843 = llvm.inttoptr %841 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %844 = llvm.load %843 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb132(%c0_i256, %840, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb132(%845: i256 loc({{.*}}:47:2), %846: i256 loc({{.*}}:47:2), %847: i256 loc({{.*}}:47:2)): // 2 preds: ^bb131, ^bb133 +// CHECK-NEXT: %848 = arith.cmpi ult, %845, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %848, ^bb133(%845, %846, %847 : i256, i256, i256), ^bb134(%846 : i256) loc(#loc2) +// CHECK-NEXT: ^bb133(%849: i256 loc({{.*}}:47:2), %850: i256 loc({{.*}}:47:2), %851: i256 loc({{.*}}:47:2)): // pred: ^bb132 +// CHECK-NEXT: %852 = arith.shrui %844, %851 : i256 loc(#loc2) +// CHECK-NEXT: %853 = "llvm.intrcall"(%c8_i256, %852) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %854 = llvm.inttoptr %850 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %853, %854 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %855 = arith.addi %850, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %856 = arith.addi %851, %c72_i256 : i256 loc(#loc2) +// CHECK-NEXT: %857 = arith.addi %849, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb132(%857, %855, %856 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb134(%858: i256 loc({{.*}}:47:2)): // pred: ^bb132 +// CHECK-NEXT: %859 = arith.addi %841, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %860 = arith.addi %842, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: %861 = arith.addi %839, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb130(%861, %858, %859, %860 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb135(%862: i256 loc({{.*}}:47:2), %863: i256 loc({{.*}}:47:2), %864: i256 loc({{.*}}:47:2)): // pred: ^bb130 +// CHECK-NEXT: %865 = arith.cmpi ult, %864, %c7_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %865, ^bb136, ^bb139 loc(#loc2) +// CHECK-NEXT: ^bb136: // pred: ^bb135 +// CHECK-NEXT: %866 = llvm.inttoptr %863 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %867 = llvm.load %866 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb137(%864, %862, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb137(%868: i256 loc({{.*}}:47:2), %869: i256 loc({{.*}}:47:2), %870: i256 loc({{.*}}:47:2)): // 2 preds: ^bb136, ^bb138 +// CHECK-NEXT: %871 = arith.cmpi ult, %868, %c7_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %871, ^bb138(%868, %869, %870 : i256, i256, i256), ^bb139 loc(#loc2) +// CHECK-NEXT: ^bb138(%872: i256 loc({{.*}}:47:2), %873: i256 loc({{.*}}:47:2), %874: i256 loc({{.*}}:47:2)): // pred: ^bb137 +// CHECK-NEXT: %875 = arith.shrui %867, %874 : i256 loc(#loc2) +// CHECK-NEXT: %876 = "llvm.intrcall"(%c8_i256, %875) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %877 = llvm.inttoptr %873 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %876, %877 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %878 = arith.addi %873, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %879 = arith.addi %874, %c72_i256 : i256 loc(#loc2) +// CHECK-NEXT: %880 = arith.addi %872, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb137(%880, %878, %879 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb139: // 2 preds: ^bb135, ^bb137 +// CHECK-NEXT: %881 = llvm.inttoptr %823 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %825, %881 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %882 = arith.addi %1, %c512_i256 : i256 loc(#loc2) +// CHECK-NEXT: %883 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %884 = llvm.load %883 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %885 = arith.shrui %884, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %886 = arith.andi %884, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %887 = arith.cmpi eq, %886, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %888 = arith.andi %885, %c127_i256 : i256 loc(#loc2) +// CHECK-NEXT: %889 = arith.select %887, %888, %885 : i256 loc(#loc2) +// CHECK-NEXT: %890 = arith.cmpi ult, %889, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %891 = arith.extui %890 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %892 = arith.cmpi eq, %886, %891 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %892, ^bb140, ^bb141 loc(#loc2) +// CHECK-NEXT: ^bb140: // pred: ^bb139 +// CHECK-NEXT: %893 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %893 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %894 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c34_i256, %894 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %895 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%895, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb141 loc(#loc2) +// CHECK-NEXT: ^bb141: // 2 preds: ^bb139, ^bb140 +// CHECK-NEXT: %896 = arith.addi %889, %c31_i256 : i256 loc(#loc2) +// CHECK-NEXT: %897 = arith.andi %896, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %898 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %899 = llvm.load %898 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %900 = arith.addi %897, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %901 = arith.andi %900, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %902 = arith.addi %899, %901 : i256 loc(#loc2) +// CHECK-NEXT: %903 = arith.cmpi ugt, %902, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %904 = arith.cmpi ult, %902, %899 : i256 loc(#loc2) +// CHECK-NEXT: %905 = arith.ori %903, %904 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %905, ^bb142, ^bb143 loc(#loc2) +// CHECK-NEXT: ^bb142: // pred: ^bb141 +// CHECK-NEXT: %906 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %906 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %907 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %907 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %908 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%908, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb143 loc(#loc2) +// CHECK-NEXT: ^bb143: // 2 preds: ^bb141, ^bb142 +// CHECK-NEXT: %909 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %902, %909 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %910 = llvm.inttoptr %899 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %889, %910 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %911 = arith.addi %899, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %912 = llvm.inttoptr %899 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %889, %912 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: call @__sol.copy_string_data.storage.memory(%c44_i256, %884, %889, %911) : (i256, i256, i256, i256) -> () loc(#loc2) +// CHECK-NEXT: %913 = llvm.inttoptr %882 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %899, %913 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %914 = arith.addi %1, %c544_i256 : i256 loc(#loc2) +// CHECK-NEXT: %915 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %916 = llvm.load %915 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %917 = arith.addi %916, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %918 = arith.cmpi ugt, %917, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %919 = arith.cmpi ult, %917, %916 : i256 loc(#loc2) +// CHECK-NEXT: %920 = arith.ori %918, %919 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %920, ^bb144, ^bb145 loc(#loc2) +// CHECK-NEXT: ^bb144: // pred: ^bb143 +// CHECK-NEXT: %921 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %921 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %922 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %922 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %923 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%923, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb145 loc(#loc2) +// CHECK-NEXT: ^bb145: // 2 preds: ^bb143, ^bb144 +// CHECK-NEXT: %924 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %917, %924 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb146(%c0_i256, %916, %c45_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb146(%925: i256 loc({{.*}}:47:2), %926: i256 loc({{.*}}:47:2), %927: i256 loc({{.*}}:47:2), %928: i256 loc({{.*}}:47:2)): // 2 preds: ^bb145, ^bb150 +// CHECK-NEXT: %929 = arith.cmpi ult, %925, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %929, ^bb147(%925, %926, %927, %928 : i256, i256, i256, i256), ^bb151(%926, %927, %928 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb147(%930: i256 loc({{.*}}:47:2), %931: i256 loc({{.*}}:47:2), %932: i256 loc({{.*}}:47:2), %933: i256 loc({{.*}}:47:2)): // pred: ^bb146 +// CHECK-NEXT: %934 = llvm.inttoptr %932 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %935 = llvm.load %934 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb148(%c0_i256, %931, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb148(%936: i256 loc({{.*}}:47:2), %937: i256 loc({{.*}}:47:2), %938: i256 loc({{.*}}:47:2)): // 2 preds: ^bb147, ^bb149 +// CHECK-NEXT: %939 = arith.cmpi ult, %936, %c4_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %939, ^bb149(%936, %937, %938 : i256, i256, i256), ^bb150(%937 : i256) loc(#loc2) +// CHECK-NEXT: ^bb149(%940: i256 loc({{.*}}:47:2), %941: i256 loc({{.*}}:47:2), %942: i256 loc({{.*}}:47:2)): // pred: ^bb148 +// CHECK-NEXT: %943 = arith.shrui %935, %942 : i256 loc(#loc2) +// CHECK-NEXT: %944 = arith.shli %943, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %945 = llvm.inttoptr %941 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %944, %945 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %946 = arith.addi %941, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %947 = arith.addi %942, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %948 = arith.addi %940, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb148(%948, %946, %947 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb150(%949: i256 loc({{.*}}:47:2)): // pred: ^bb148 +// CHECK-NEXT: %950 = arith.addi %932, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %951 = arith.addi %933, %c4_i256 : i256 loc(#loc2) +// CHECK-NEXT: %952 = arith.addi %930, %c4_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb146(%952, %949, %950, %951 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb151(%953: i256 loc({{.*}}:47:2), %954: i256 loc({{.*}}:47:2), %955: i256 loc({{.*}}:47:2)): // pred: ^bb146 +// CHECK-NEXT: %956 = arith.cmpi ult, %955, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %956, ^bb152, ^bb155 loc(#loc2) +// CHECK-NEXT: ^bb152: // pred: ^bb151 +// CHECK-NEXT: %957 = llvm.inttoptr %954 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %958 = llvm.load %957 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb153(%955, %953, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb153(%959: i256 loc({{.*}}:47:2), %960: i256 loc({{.*}}:47:2), %961: i256 loc({{.*}}:47:2)): // 2 preds: ^bb152, ^bb154 +// CHECK-NEXT: %962 = arith.cmpi ult, %959, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %962, ^bb154(%959, %960, %961 : i256, i256, i256), ^bb155 loc(#loc2) +// CHECK-NEXT: ^bb154(%963: i256 loc({{.*}}:47:2), %964: i256 loc({{.*}}:47:2), %965: i256 loc({{.*}}:47:2)): // pred: ^bb153 +// CHECK-NEXT: %966 = arith.shrui %958, %965 : i256 loc(#loc2) +// CHECK-NEXT: %967 = arith.shli %966, %c192_i256 : i256 loc(#loc2) +// CHECK-NEXT: %968 = llvm.inttoptr %964 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %967, %968 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %969 = arith.addi %964, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %970 = arith.addi %965, %c64_i256 : i256 loc(#loc2) +// CHECK-NEXT: %971 = arith.addi %963, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb153(%971, %969, %970 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb155: // 2 preds: ^bb151, ^bb153 +// CHECK-NEXT: %972 = llvm.inttoptr %914 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %916, %972 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %973 = arith.addi %1, %c576_i256 : i256 loc(#loc2) +// CHECK-NEXT: %974 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %975 = llvm.load %974 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %976 = arith.addi %975, %c288_i256 : i256 loc(#loc2) +// CHECK-NEXT: %977 = arith.cmpi ugt, %976, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %978 = arith.cmpi ult, %976, %975 : i256 loc(#loc2) +// CHECK-NEXT: %979 = arith.ori %977, %978 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %979, ^bb156, ^bb157 loc(#loc2) +// CHECK-NEXT: ^bb156: // pred: ^bb155 +// CHECK-NEXT: %980 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %980 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %981 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %981 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %982 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%982, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb157 loc(#loc2) +// CHECK-NEXT: ^bb157: // 2 preds: ^bb155, ^bb156 +// CHECK-NEXT: %983 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %976, %983 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb158(%c0_i256, %975, %c47_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb158(%984: i256 loc({{.*}}:47:2), %985: i256 loc({{.*}}:47:2), %986: i256 loc({{.*}}:47:2), %987: i256 loc({{.*}}:47:2)): // 2 preds: ^bb157, ^bb162 +// CHECK-NEXT: %988 = arith.cmpi ult, %984, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %988, ^bb159(%984, %985, %986, %987 : i256, i256, i256, i256), ^bb163(%985, %986, %987 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb159(%989: i256 loc({{.*}}:47:2), %990: i256 loc({{.*}}:47:2), %991: i256 loc({{.*}}:47:2), %992: i256 loc({{.*}}:47:2)): // pred: ^bb158 +// CHECK-NEXT: %993 = llvm.inttoptr %991 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %994 = llvm.load %993 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb160(%c0_i256, %990, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb160(%995: i256 loc({{.*}}:47:2), %996: i256 loc({{.*}}:47:2), %997: i256 loc({{.*}}:47:2)): // 2 preds: ^bb159, ^bb161 +// CHECK-NEXT: %998 = arith.cmpi ult, %995, %c16_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %998, ^bb161(%995, %996, %997 : i256, i256, i256), ^bb162(%996 : i256) loc(#loc2) +// CHECK-NEXT: ^bb161(%999: i256 loc({{.*}}:47:2), %1000: i256 loc({{.*}}:47:2), %1001: i256 loc({{.*}}:47:2)): // pred: ^bb160 +// CHECK-NEXT: %1002 = arith.shrui %994, %1001 : i256 loc(#loc2) +// CHECK-NEXT: %1003 = "llvm.intrcall"(%c1_i256, %1002) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %1004 = llvm.inttoptr %1000 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1003, %1004 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1005 = arith.addi %1000, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1006 = arith.addi %1001, %c16_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1007 = arith.addi %999, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb160(%1007, %1005, %1006 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb162(%1008: i256 loc({{.*}}:47:2)): // pred: ^bb160 +// CHECK-NEXT: %1009 = arith.addi %991, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1010 = arith.addi %992, %c16_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1011 = arith.addi %989, %c16_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb158(%1011, %1008, %1009, %1010 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb163(%1012: i256 loc({{.*}}:47:2), %1013: i256 loc({{.*}}:47:2), %1014: i256 loc({{.*}}:47:2)): // pred: ^bb158 +// CHECK-NEXT: %1015 = arith.cmpi ult, %1014, %c9_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1015, ^bb164, ^bb167 loc(#loc2) +// CHECK-NEXT: ^bb164: // pred: ^bb163 +// CHECK-NEXT: %1016 = llvm.inttoptr %1013 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1017 = llvm.load %1016 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb165(%1014, %1012, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb165(%1018: i256 loc({{.*}}:47:2), %1019: i256 loc({{.*}}:47:2), %1020: i256 loc({{.*}}:47:2)): // 2 preds: ^bb164, ^bb166 +// CHECK-NEXT: %1021 = arith.cmpi ult, %1018, %c9_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1021, ^bb166(%1018, %1019, %1020 : i256, i256, i256), ^bb167 loc(#loc2) +// CHECK-NEXT: ^bb166(%1022: i256 loc({{.*}}:47:2), %1023: i256 loc({{.*}}:47:2), %1024: i256 loc({{.*}}:47:2)): // pred: ^bb165 +// CHECK-NEXT: %1025 = arith.shrui %1017, %1024 : i256 loc(#loc2) +// CHECK-NEXT: %1026 = "llvm.intrcall"(%c1_i256, %1025) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %1027 = llvm.inttoptr %1023 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1026, %1027 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1028 = arith.addi %1023, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1029 = arith.addi %1024, %c16_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1030 = arith.addi %1022, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb165(%1030, %1028, %1029 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb167: // 2 preds: ^bb163, ^bb165 +// CHECK-NEXT: %1031 = llvm.inttoptr %973 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %975, %1031 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1032 = arith.addi %1, %c608_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1033 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1034 = llvm.load %1033 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %1035 = arith.addi %1034, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1036 = arith.cmpi ugt, %1035, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1037 = arith.cmpi ult, %1035, %1034 : i256 loc(#loc2) +// CHECK-NEXT: %1038 = arith.ori %1036, %1037 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1038, ^bb168, ^bb169 loc(#loc2) +// CHECK-NEXT: ^bb168: // pred: ^bb167 +// CHECK-NEXT: %1039 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1039 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1040 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %1040 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1041 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%1041, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb169 loc(#loc2) +// CHECK-NEXT: ^bb169: // 2 preds: ^bb167, ^bb168 +// CHECK-NEXT: %1042 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1035, %1042 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb170(%c0_i256, %1034, %c48_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb170(%1043: i256 loc({{.*}}:47:2), %1044: i256 loc({{.*}}:47:2), %1045: i256 loc({{.*}}:47:2), %1046: i256 loc({{.*}}:47:2)): // 2 preds: ^bb169, ^bb174 +// CHECK-NEXT: %1047 = arith.cmpi ult, %1043, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1047, ^bb171(%1043, %1044, %1045, %1046 : i256, i256, i256, i256), ^bb175(%1044, %1045, %1046 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb171(%1048: i256 loc({{.*}}:47:2), %1049: i256 loc({{.*}}:47:2), %1050: i256 loc({{.*}}:47:2), %1051: i256 loc({{.*}}:47:2)): // pred: ^bb170 +// CHECK-NEXT: %1052 = llvm.inttoptr %1050 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1053 = llvm.load %1052 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb172(%c0_i256, %1049, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb172(%1054: i256 loc({{.*}}:47:2), %1055: i256 loc({{.*}}:47:2), %1056: i256 loc({{.*}}:47:2)): // 2 preds: ^bb171, ^bb173 +// CHECK-NEXT: %1057 = arith.cmpi ult, %1054, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1057, ^bb173(%1054, %1055, %1056 : i256, i256, i256), ^bb174(%1055 : i256) loc(#loc2) +// CHECK-NEXT: ^bb173(%1058: i256 loc({{.*}}:47:2), %1059: i256 loc({{.*}}:47:2), %1060: i256 loc({{.*}}:47:2)): // pred: ^bb172 +// CHECK-NEXT: %1061 = arith.shrui %1053, %1060 : i256 loc(#loc2) +// CHECK-NEXT: %1062 = arith.andi %1061, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1063 = llvm.inttoptr %1059 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1062, %1063 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1064 = arith.addi %1059, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1065 = arith.addi %1060, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1066 = arith.addi %1058, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb172(%1066, %1064, %1065 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb174(%1067: i256 loc({{.*}}:47:2)): // pred: ^bb172 +// CHECK-NEXT: %1068 = arith.addi %1050, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1069 = arith.addi %1051, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1070 = arith.addi %1048, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb170(%1070, %1067, %1068, %1069 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb175(%1071: i256 loc({{.*}}:47:2), %1072: i256 loc({{.*}}:47:2), %1073: i256 loc({{.*}}:47:2)): // pred: ^bb170 +// CHECK-NEXT: %1074 = arith.cmpi ult, %1073, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1074, ^bb176, ^bb179 loc(#loc2) +// CHECK-NEXT: ^bb176: // pred: ^bb175 +// CHECK-NEXT: %1075 = llvm.inttoptr %1072 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1076 = llvm.load %1075 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb177(%1073, %1071, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb177(%1077: i256 loc({{.*}}:47:2), %1078: i256 loc({{.*}}:47:2), %1079: i256 loc({{.*}}:47:2)): // 2 preds: ^bb176, ^bb178 +// CHECK-NEXT: %1080 = arith.cmpi ult, %1077, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1080, ^bb178(%1077, %1078, %1079 : i256, i256, i256), ^bb179 loc(#loc2) +// CHECK-NEXT: ^bb178(%1081: i256 loc({{.*}}:47:2), %1082: i256 loc({{.*}}:47:2), %1083: i256 loc({{.*}}:47:2)): // pred: ^bb177 +// CHECK-NEXT: %1084 = arith.shrui %1076, %1083 : i256 loc(#loc2) +// CHECK-NEXT: %1085 = arith.andi %1084, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1086 = llvm.inttoptr %1082 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1085, %1086 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1087 = arith.addi %1082, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1088 = arith.addi %1083, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1089 = arith.addi %1081, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb177(%1089, %1087, %1088 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb179: // 2 preds: ^bb175, ^bb177 +// CHECK-NEXT: %1090 = llvm.inttoptr %1032 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1034, %1090 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1091 = arith.addi %1, %c640_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1092 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1093 = llvm.load %1092 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %1094 = arith.addi %1093, %c96_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1095 = arith.cmpi ugt, %1094, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1096 = arith.cmpi ult, %1094, %1093 : i256 loc(#loc2) +// CHECK-NEXT: %1097 = arith.ori %1095, %1096 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1097, ^bb180, ^bb181 loc(#loc2) +// CHECK-NEXT: ^bb180: // pred: ^bb179 +// CHECK-NEXT: %1098 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1098 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1099 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %1099 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1100 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%1100, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb181 loc(#loc2) +// CHECK-NEXT: ^bb181: // 2 preds: ^bb179, ^bb180 +// CHECK-NEXT: %1101 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1094, %1101 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb182(%c0_i256, %1093, %c50_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb182(%1102: i256 loc({{.*}}:47:2), %1103: i256 loc({{.*}}:47:2), %1104: i256 loc({{.*}}:47:2), %1105: i256 loc({{.*}}:47:2)): // 2 preds: ^bb181, ^bb186 +// CHECK-NEXT: %1106 = arith.cmpi ult, %1102, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1106, ^bb183(%1102, %1103, %1104, %1105 : i256, i256, i256, i256), ^bb187(%1103, %1104, %1105 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb183(%1107: i256 loc({{.*}}:47:2), %1108: i256 loc({{.*}}:47:2), %1109: i256 loc({{.*}}:47:2), %1110: i256 loc({{.*}}:47:2)): // pred: ^bb182 +// CHECK-NEXT: %1111 = llvm.inttoptr %1109 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1112 = llvm.load %1111 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb184(%c0_i256, %1108, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb184(%1113: i256 loc({{.*}}:47:2), %1114: i256 loc({{.*}}:47:2), %1115: i256 loc({{.*}}:47:2)): // 2 preds: ^bb183, ^bb185 +// CHECK-NEXT: %1116 = arith.cmpi ult, %1113, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1116, ^bb185(%1113, %1114, %1115 : i256, i256, i256), ^bb186(%1114 : i256) loc(#loc2) +// CHECK-NEXT: ^bb185(%1117: i256 loc({{.*}}:47:2), %1118: i256 loc({{.*}}:47:2), %1119: i256 loc({{.*}}:47:2)): // pred: ^bb184 +// CHECK-NEXT: %1120 = arith.shrui %1112, %1119 : i256 loc(#loc2) +// CHECK-NEXT: %1121 = "llvm.intrcall"(%c15_i256, %1120) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %1122 = llvm.inttoptr %1118 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1121, %1122 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1123 = arith.addi %1118, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1124 = arith.addi %1119, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1125 = arith.addi %1117, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb184(%1125, %1123, %1124 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb186(%1126: i256 loc({{.*}}:47:2)): // pred: ^bb184 +// CHECK-NEXT: %1127 = arith.addi %1109, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1128 = arith.addi %1110, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1129 = arith.addi %1107, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb182(%1129, %1126, %1127, %1128 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb187(%1130: i256 loc({{.*}}:47:2), %1131: i256 loc({{.*}}:47:2), %1132: i256 loc({{.*}}:47:2)): // pred: ^bb182 +// CHECK-NEXT: %1133 = arith.cmpi ult, %1132, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1133, ^bb188, ^bb191 loc(#loc2) +// CHECK-NEXT: ^bb188: // pred: ^bb187 +// CHECK-NEXT: %1134 = llvm.inttoptr %1131 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1135 = llvm.load %1134 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb189(%1132, %1130, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb189(%1136: i256 loc({{.*}}:47:2), %1137: i256 loc({{.*}}:47:2), %1138: i256 loc({{.*}}:47:2)): // 2 preds: ^bb188, ^bb190 +// CHECK-NEXT: %1139 = arith.cmpi ult, %1136, %c3_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1139, ^bb190(%1136, %1137, %1138 : i256, i256, i256), ^bb191 loc(#loc2) +// CHECK-NEXT: ^bb190(%1140: i256 loc({{.*}}:47:2), %1141: i256 loc({{.*}}:47:2), %1142: i256 loc({{.*}}:47:2)): // pred: ^bb189 +// CHECK-NEXT: %1143 = arith.shrui %1135, %1142 : i256 loc(#loc2) +// CHECK-NEXT: %1144 = "llvm.intrcall"(%c15_i256, %1143) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %1145 = llvm.inttoptr %1141 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1144, %1145 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1146 = arith.addi %1141, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1147 = arith.addi %1142, %c128_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1148 = arith.addi %1140, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb189(%1148, %1146, %1147 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb191: // 2 preds: ^bb187, ^bb189 +// CHECK-NEXT: %1149 = llvm.inttoptr %1091 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1093, %1149 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1150 = arith.addi %1, %c672_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1151 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1152 = llvm.load %1151 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %1153 = arith.addi %1152, %c160_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1154 = arith.cmpi ugt, %1153, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1155 = arith.cmpi ult, %1153, %1152 : i256 loc(#loc2) +// CHECK-NEXT: %1156 = arith.ori %1154, %1155 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1156, ^bb192, ^bb193 loc(#loc2) +// CHECK-NEXT: ^bb192: // pred: ^bb191 +// CHECK-NEXT: %1157 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1157 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1158 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %1158 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%1159, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb193 loc(#loc2) +// CHECK-NEXT: ^bb193: // 2 preds: ^bb191, ^bb192 +// CHECK-NEXT: %1160 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1153, %1160 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb194(%c0_i256, %1152, %c52_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb194(%1161: i256 loc({{.*}}:47:2), %1162: i256 loc({{.*}}:47:2), %1163: i256 loc({{.*}}:47:2), %1164: i256 loc({{.*}}:47:2)): // 2 preds: ^bb193, ^bb198 +// CHECK-NEXT: %1165 = arith.cmpi ult, %1161, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1165, ^bb195(%1161, %1162, %1163, %1164 : i256, i256, i256, i256), ^bb199(%1162, %1163, %1164 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb195(%1166: i256 loc({{.*}}:47:2), %1167: i256 loc({{.*}}:47:2), %1168: i256 loc({{.*}}:47:2), %1169: i256 loc({{.*}}:47:2)): // pred: ^bb194 +// CHECK-NEXT: %1170 = llvm.inttoptr %1168 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1171 = llvm.load %1170 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb196(%c0_i256, %1167, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb196(%1172: i256 loc({{.*}}:47:2), %1173: i256 loc({{.*}}:47:2), %1174: i256 loc({{.*}}:47:2)): // 2 preds: ^bb195, ^bb197 +// CHECK-NEXT: %1175 = arith.cmpi ult, %1172, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1175, ^bb197(%1172, %1173, %1174 : i256, i256, i256), ^bb198(%1173 : i256) loc(#loc2) +// CHECK-NEXT: ^bb197(%1176: i256 loc({{.*}}:47:2), %1177: i256 loc({{.*}}:47:2), %1178: i256 loc({{.*}}:47:2)): // pred: ^bb196 +// CHECK-NEXT: %1179 = arith.shrui %1171, %1178 : i256 loc(#loc2) +// CHECK-NEXT: %1180 = arith.andi %1179, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1181 = arith.cmpi ne, %1180, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1182 = arith.extui %1181 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %1183 = llvm.inttoptr %1177 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1182, %1183 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1184 = arith.addi %1177, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1185 = arith.addi %1178, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1186 = arith.addi %1176, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb196(%1186, %1184, %1185 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb198(%1187: i256 loc({{.*}}:47:2)): // pred: ^bb196 +// CHECK-NEXT: %1188 = arith.addi %1168, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1189 = arith.addi %1169, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1190 = arith.addi %1166, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb194(%1190, %1187, %1188, %1189 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb199(%1191: i256 loc({{.*}}:47:2), %1192: i256 loc({{.*}}:47:2), %1193: i256 loc({{.*}}:47:2)): // pred: ^bb194 +// CHECK-NEXT: %1194 = arith.cmpi ult, %1193, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1194, ^bb200, ^bb203 loc(#loc2) +// CHECK-NEXT: ^bb200: // pred: ^bb199 +// CHECK-NEXT: %1195 = llvm.inttoptr %1192 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1196 = llvm.load %1195 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb201(%1193, %1191, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb201(%1197: i256 loc({{.*}}:47:2), %1198: i256 loc({{.*}}:47:2), %1199: i256 loc({{.*}}:47:2)): // 2 preds: ^bb200, ^bb202 +// CHECK-NEXT: %1200 = arith.cmpi ult, %1197, %c5_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1200, ^bb202(%1197, %1198, %1199 : i256, i256, i256), ^bb203 loc(#loc2) +// CHECK-NEXT: ^bb202(%1201: i256 loc({{.*}}:47:2), %1202: i256 loc({{.*}}:47:2), %1203: i256 loc({{.*}}:47:2)): // pred: ^bb201 +// CHECK-NEXT: %1204 = arith.shrui %1196, %1203 : i256 loc(#loc2) +// CHECK-NEXT: %1205 = arith.andi %1204, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1206 = arith.cmpi ne, %1205, %c0_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1207 = arith.extui %1206 : i1 to i256 loc(#loc2) +// CHECK-NEXT: %1208 = llvm.inttoptr %1202 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1207, %1208 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1209 = arith.addi %1202, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1210 = arith.addi %1203, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1211 = arith.addi %1201, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb201(%1211, %1209, %1210 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb203: // 2 preds: ^bb199, ^bb201 +// CHECK-NEXT: %1212 = llvm.inttoptr %1150 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1152, %1212 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1213 = arith.addi %1, %c704_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1214 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1215 = llvm.load %1214 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %1216 = llvm.inttoptr %1213 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1215, %1216 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1217 = arith.addi %1, %c736_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1218 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1219 = llvm.load %1218 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %1220 = llvm.inttoptr %1217 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1219, %1220 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1221 = arith.addi %1, %c768_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1222 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1223 = llvm.load %1222 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %1224 = arith.muli %1223, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1225 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1226 = llvm.load %1225 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %1227 = arith.addi %1224, %c63_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1228 = arith.andi %1227, %c-32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1229 = arith.addi %1226, %1228 : i256 loc(#loc2) +// CHECK-NEXT: %1230 = arith.cmpi ugt, %1229, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1231 = arith.cmpi ult, %1229, %1226 : i256 loc(#loc2) +// CHECK-NEXT: %1232 = arith.ori %1230, %1231 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1232, ^bb204, ^bb205 loc(#loc2) +// CHECK-NEXT: ^bb204: // pred: ^bb203 +// CHECK-NEXT: %1233 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1233 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1234 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %1234 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1235 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%1235, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb205 loc(#loc2) +// CHECK-NEXT: ^bb205: // 2 preds: ^bb203, ^bb204 +// CHECK-NEXT: %1236 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1229, %1236 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1237 = llvm.inttoptr %1226 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1223, %1237 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1238 = arith.addi %1226, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1239 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c55_i256, %1239 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1240 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1241 = "llvm.intrcall"(%1240, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb206(%c0_i256 : i256) loc(#loc2) +// CHECK-NEXT: ^bb206(%1242: i256 loc({{.*}}:47:2)): // 2 preds: ^bb205, ^bb207 +// CHECK-NEXT: %1243 = arith.cmpi ult, %1242, %1223 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1243, ^bb207(%1242 : i256), ^bb208 loc(#loc2) +// CHECK-NEXT: ^bb207(%1244: i256 loc({{.*}}:47:2)): // pred: ^bb206 +// CHECK-NEXT: %1245 = arith.addi %1241, %1244 : i256 loc(#loc2) +// CHECK-NEXT: %1246 = arith.muli %1244, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1247 = arith.addi %1238, %1246 : i256 loc(#loc2) +// CHECK-NEXT: %1248 = llvm.inttoptr %1245 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1249 = llvm.load %1248 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %1250 = arith.andi %1249, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1251 = llvm.inttoptr %1247 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1250, %1251 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1252 = arith.addi %1244, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb206(%1252 : i256) loc(#loc2) +// CHECK-NEXT: ^bb208: // pred: ^bb206 +// CHECK-NEXT: %1253 = llvm.inttoptr %1221 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1226, %1253 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1254 = arith.addi %1, %c800_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1255 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1256 = llvm.load %1255 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: %1257 = "llvm.intrcall"(%c0_i256, %1256) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %1258 = "llvm.intrcall"(%c0_i256, %1257) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc2) +// CHECK-NEXT: %1259 = llvm.inttoptr %1254 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1258, %1259 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1260 = arith.addi %1, %c832_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1261 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1262 = llvm.load %1261 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc2) +// CHECK-NEXT: %1263 = arith.addi %1262, %c1056_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1264 = arith.cmpi ugt, %1263, %c18446744073709551615_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1265 = arith.cmpi ult, %1263, %1262 : i256 loc(#loc2) +// CHECK-NEXT: %1266 = arith.ori %1264, %1265 : i1 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1266, ^bb209, ^bb210 loc(#loc2) +// CHECK-NEXT: ^bb209: // pred: ^bb208 +// CHECK-NEXT: %1267 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1267 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1268 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %c65_i256, %1268 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1269 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: "llvm.intrcall"(%1269, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc2) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc2) +// CHECK-NEXT: cf.br ^bb210 loc(#loc2) +// CHECK-NEXT: ^bb210: // 2 preds: ^bb208, ^bb209 +// CHECK-NEXT: %1270 = llvm.inttoptr %c64_i256 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1263, %1270 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: cf.br ^bb211(%c0_i256, %1262, %c57_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb211(%1271: i256 loc({{.*}}:47:2), %1272: i256 loc({{.*}}:47:2), %1273: i256 loc({{.*}}:47:2), %1274: i256 loc({{.*}}:47:2)): // 2 preds: ^bb210, ^bb215 +// CHECK-NEXT: %1275 = arith.cmpi ult, %1271, %c2_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1275, ^bb212(%1271, %1272, %1273, %1274 : i256, i256, i256, i256), ^bb216(%1272, %1273, %1274 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb212(%1276: i256 loc({{.*}}:47:2), %1277: i256 loc({{.*}}:47:2), %1278: i256 loc({{.*}}:47:2), %1279: i256 loc({{.*}}:47:2)): // pred: ^bb211 +// CHECK-NEXT: %1280 = llvm.inttoptr %1278 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1281 = llvm.load %1280 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb213(%c0_i256, %1277, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb213(%1282: i256 loc({{.*}}:47:2), %1283: i256 loc({{.*}}:47:2), %1284: i256 loc({{.*}}:47:2)): // 2 preds: ^bb212, ^bb214 +// CHECK-NEXT: %1285 = arith.cmpi ult, %1282, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1285, ^bb214(%1282, %1283, %1284 : i256, i256, i256), ^bb215(%1283 : i256) loc(#loc2) +// CHECK-NEXT: ^bb214(%1286: i256 loc({{.*}}:47:2), %1287: i256 loc({{.*}}:47:2), %1288: i256 loc({{.*}}:47:2)): // pred: ^bb213 +// CHECK-NEXT: %1289 = arith.shrui %1281, %1288 : i256 loc(#loc2) +// CHECK-NEXT: %1290 = arith.andi %1289, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1291 = llvm.inttoptr %1287 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1290, %1291 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1292 = arith.addi %1287, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1293 = arith.addi %1288, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1294 = arith.addi %1286, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb213(%1294, %1292, %1293 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb215(%1295: i256 loc({{.*}}:47:2)): // pred: ^bb213 +// CHECK-NEXT: %1296 = arith.addi %1278, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1297 = arith.addi %1279, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1298 = arith.addi %1276, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb211(%1298, %1295, %1296, %1297 : i256, i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb216(%1299: i256 loc({{.*}}:47:2), %1300: i256 loc({{.*}}:47:2), %1301: i256 loc({{.*}}:47:2)): // pred: ^bb211 +// CHECK-NEXT: %1302 = arith.cmpi ult, %1301, %c33_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1302, ^bb217, ^bb220 loc(#loc2) +// CHECK-NEXT: ^bb217: // pred: ^bb216 +// CHECK-NEXT: %1303 = llvm.inttoptr %1300 : i256 to !llvm.ptr<5> loc(#loc2) +// CHECK-NEXT: %1304 = llvm.load %1303 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb218(%1301, %1299, %c0_i256 : i256, i256, i256) loc(#loc2) +// CHECK-NEXT: ^bb218(%1305: i256 loc({{.*}}:47:2), %1306: i256 loc({{.*}}:47:2), %1307: i256 loc({{.*}}:47:2)): // 2 preds: ^bb217, ^bb219 +// CHECK-NEXT: %1308 = arith.cmpi ult, %1305, %c33_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.cond_br %1308, ^bb219(%1305, %1306, %1307 : i256, i256, i256), ^bb220 loc(#loc2) +// CHECK-NEXT: ^bb219(%1309: i256 loc({{.*}}:47:2), %1310: i256 loc({{.*}}:47:2), %1311: i256 loc({{.*}}:47:2)): // pred: ^bb218 +// CHECK-NEXT: %1312 = arith.shrui %1304, %1311 : i256 loc(#loc2) +// CHECK-NEXT: %1313 = arith.andi %1312, %c255_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1314 = llvm.inttoptr %1310 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1313, %1314 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: %1315 = arith.addi %1310, %c32_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1316 = arith.addi %1311, %c8_i256 : i256 loc(#loc2) +// CHECK-NEXT: %1317 = arith.addi %1309, %c1_i256 : i256 loc(#loc2) +// CHECK-NEXT: cf.br ^bb218(%1317, %1315, %1316 : i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc2) +// CHECK-NEXT: ^bb220: // 2 preds: ^bb216, ^bb218 +// CHECK-NEXT: %1318 = llvm.inttoptr %1260 : i256 to !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: llvm.store %1262, %1318 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc2) +// CHECK-NEXT: return %1 : i256 loc(#loc11) +// CHECK-NEXT: } loc(#loc10) // CHECK-NEXT: func.func @f3_148(%arg0: i256 loc({{.*}}:58:14)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c57_i256 = arith.constant 57 : i256 loc(#loc) // CHECK-NEXT: %c2144_i256 = arith.constant 2144 : i256 loc(#loc) @@ -8619,9 +8970,6 @@ contract Test { // CHECK-NEXT: %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 = arith.constant -1766847064778384329583297500742918515827483896875618958121606201292619776 : i256 loc(#loc) // CHECK-NEXT: %c232_i256 = arith.constant 232 : i256 loc(#loc) // CHECK-NEXT: %c26959946667150639794667015087019630673637144422540572481103610249215_i256 = arith.constant 26959946667150639794667015087019630673637144422540572481103610249215 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 = arith.constant -6901746346790563787434755862277025452451108972170386555162524223799296 : i256 loc(#loc) // CHECK-NEXT: %c200_i256 = arith.constant 200 : i256 loc(#loc) // CHECK-NEXT: %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 = arith.constant -26959946667150639794667015087019630673637144422540572481103610249216 : i256 loc(#loc) @@ -8655,2733 +9003,2525 @@ contract Test { // CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc10) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc10) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc11) -// CHECK-NEXT: %2 = llvm.inttoptr %1 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %4 = arith.andi %3, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %5 = arith.cmpi ne, %3, %4 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc12) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc13) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc13) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc14) +// CHECK-NEXT: %2 = llvm.inttoptr %1 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %4 = arith.andi %3, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %5 = arith.cmpi ne, %3, %4 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %5, ^bb1, ^bb2 loc(#loc3) // CHECK-NEXT: ^bb1: // pred: ^bb0 -// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%6, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb2 loc(#loc12) +// CHECK-NEXT: %6 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%6, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb2 loc(#loc3) // CHECK-NEXT: ^bb2: // 2 preds: ^bb0, ^bb1 -// CHECK-NEXT: %7 = arith.addi %1, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %8 = llvm.inttoptr %7 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %9 = llvm.load %8 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %10 = arith.andi %9, %c-20282409603651670423947251286016_i256 : i256 loc(#loc12) -// CHECK-NEXT: %11 = arith.cmpi ne, %9, %10 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %11, ^bb3, ^bb4 loc(#loc12) +// CHECK-NEXT: %7 = arith.addi %1, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %8 = llvm.inttoptr %7 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %9 = llvm.load %8 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %10 = arith.andi %9, %c-20282409603651670423947251286016_i256 : i256 loc(#loc3) +// CHECK-NEXT: %11 = arith.cmpi ne, %9, %10 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %11, ^bb3, ^bb4 loc(#loc3) // CHECK-NEXT: ^bb3: // pred: ^bb2 -// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%12, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb4 loc(#loc12) +// CHECK-NEXT: %12 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%12, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb4 loc(#loc3) // CHECK-NEXT: ^bb4: // 2 preds: ^bb2, ^bb3 -// CHECK-NEXT: %13 = arith.shrui %10, %c104_i256 : i256 loc(#loc12) -// CHECK-NEXT: %14 = arith.shli %13, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %15 = arith.ori %4, %14 : i256 loc(#loc12) -// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %18 = arith.andi %17, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc12) -// CHECK-NEXT: %19 = arith.ori %18, %15 : i256 loc(#loc12) -// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %19, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %21 = arith.addi %1, %c64_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb5(%c0_i256, %21, %c1_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %13 = arith.shrui %10, %c104_i256 : i256 loc(#loc3) +// CHECK-NEXT: %14 = arith.shli %13, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %15 = arith.ori %4, %14 : i256 loc(#loc3) +// CHECK-NEXT: %16 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %17 = llvm.load %16 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %18 = arith.andi %17, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc3) +// CHECK-NEXT: %19 = arith.ori %18, %15 : i256 loc(#loc3) +// CHECK-NEXT: %20 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %19, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %21 = arith.addi %1, %c64_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb5(%c0_i256, %21, %c1_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb5(%22: i256 loc({{.*}}:59:4), %23: i256 loc({{.*}}:59:4), %24: i256 loc({{.*}}:59:4), %25: i256 loc({{.*}}:59:4)): // 2 preds: ^bb4, ^bb11 -// CHECK-NEXT: %26 = arith.cmpi ult, %22, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %26, ^bb6(%22, %23, %24, %25 : i256, i256, i256, i256), ^bb12(%23, %24, %25 : i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %26 = arith.cmpi ult, %22, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %26, ^bb6(%22, %23, %24, %25 : i256, i256, i256, i256), ^bb12(%23, %24, %25 : i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb6(%27: i256 loc({{.*}}:59:4), %28: i256 loc({{.*}}:59:4), %29: i256 loc({{.*}}:59:4), %30: i256 loc({{.*}}:59:4)): // pred: ^bb5 -// CHECK-NEXT: cf.br ^bb7(%c0_i256, %28, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: cf.br ^bb7(%c0_i256, %28, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb7(%31: i256 loc({{.*}}:59:4), %32: i256 loc({{.*}}:59:4), %33: i256 loc({{.*}}:59:4), %34: i256 loc({{.*}}:59:4)): // 2 preds: ^bb6, ^bb10 -// CHECK-NEXT: %35 = arith.cmpi ult, %31, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %35, ^bb8(%31, %32, %33, %34 : i256, i256, i256, i256), ^bb11(%32, %34 : i256, i256) loc(#loc12) +// CHECK-NEXT: %35 = arith.cmpi ult, %31, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %35, ^bb8(%31, %32, %33, %34 : i256, i256, i256, i256), ^bb11(%32, %34 : i256, i256) loc(#loc3) // CHECK-NEXT: ^bb8(%36: i256 loc({{.*}}:59:4), %37: i256 loc({{.*}}:59:4), %38: i256 loc({{.*}}:59:4), %39: i256 loc({{.*}}:59:4)): // pred: ^bb7 -// CHECK-NEXT: %40 = llvm.inttoptr %37 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %42 = arith.andi %41, %c4722366482869645213695_i256 : i256 loc(#loc12) -// CHECK-NEXT: %43 = arith.cmpi ne, %41, %42 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %43, ^bb9, ^bb10 loc(#loc12) +// CHECK-NEXT: %40 = llvm.inttoptr %37 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %41 = llvm.load %40 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %42 = arith.andi %41, %c4722366482869645213695_i256 : i256 loc(#loc3) +// CHECK-NEXT: %43 = arith.cmpi ne, %41, %42 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %43, ^bb9, ^bb10 loc(#loc3) // CHECK-NEXT: ^bb9: // pred: ^bb8 -// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%44, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb10 loc(#loc12) +// CHECK-NEXT: %44 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%44, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb10 loc(#loc3) // CHECK-NEXT: ^bb10: // 2 preds: ^bb8, ^bb9 -// CHECK-NEXT: %45 = arith.shli %42, %38 : i256 loc(#loc12) -// CHECK-NEXT: %46 = arith.ori %39, %45 : i256 loc(#loc12) -// CHECK-NEXT: %47 = arith.addi %37, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %48 = arith.addi %38, %c72_i256 : i256 loc(#loc12) -// CHECK-NEXT: %49 = arith.addi %36, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb7(%49, %47, %48, %46 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) +// CHECK-NEXT: %45 = arith.shli %42, %38 : i256 loc(#loc3) +// CHECK-NEXT: %46 = arith.ori %39, %45 : i256 loc(#loc3) +// CHECK-NEXT: %47 = arith.addi %37, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %48 = arith.addi %38, %c72_i256 : i256 loc(#loc3) +// CHECK-NEXT: %49 = arith.addi %36, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb7(%49, %47, %48, %46 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) // CHECK-NEXT: ^bb11(%50: i256 loc({{.*}}:59:4), %51: i256 loc({{.*}}:59:4)): // pred: ^bb7 -// CHECK-NEXT: %52 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %53 = arith.addi %29, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %54 = arith.addi %30, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: %55 = arith.addi %27, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb5(%55, %50, %53, %54 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %52 = llvm.inttoptr %29 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %51, %52 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %53 = arith.addi %29, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %54 = arith.addi %30, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: %55 = arith.addi %27, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb5(%55, %50, %53, %54 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb12(%56: i256 loc({{.*}}:59:4), %57: i256 loc({{.*}}:59:4), %58: i256 loc({{.*}}:59:4)): // pred: ^bb5 -// CHECK-NEXT: %59 = arith.cmpi ult, %58, %c7_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %59, ^bb13(%58, %56, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb18 loc(#loc12) +// CHECK-NEXT: %59 = arith.cmpi ult, %58, %c7_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %59, ^bb13(%58, %56, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb18 loc(#loc3) // CHECK-NEXT: ^bb13(%60: i256 loc({{.*}}:59:4), %61: i256 loc({{.*}}:59:4), %62: i256 loc({{.*}}:59:4), %63: i256 loc({{.*}}:59:4)): // 2 preds: ^bb12, ^bb16 -// CHECK-NEXT: %64 = arith.cmpi ult, %60, %c7_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %64, ^bb14(%60, %61, %62, %63 : i256, i256, i256, i256), ^bb17(%63 : i256) loc(#loc12) +// CHECK-NEXT: %64 = arith.cmpi ult, %60, %c7_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %64, ^bb14(%60, %61, %62, %63 : i256, i256, i256, i256), ^bb17(%63 : i256) loc(#loc3) // CHECK-NEXT: ^bb14(%65: i256 loc({{.*}}:59:4), %66: i256 loc({{.*}}:59:4), %67: i256 loc({{.*}}:59:4), %68: i256 loc({{.*}}:59:4)): // pred: ^bb13 -// CHECK-NEXT: %69 = llvm.inttoptr %66 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %70 = llvm.load %69 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %71 = arith.andi %70, %c4722366482869645213695_i256 : i256 loc(#loc12) -// CHECK-NEXT: %72 = arith.cmpi ne, %70, %71 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %72, ^bb15, ^bb16 loc(#loc12) +// CHECK-NEXT: %69 = llvm.inttoptr %66 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %70 = llvm.load %69 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %71 = arith.andi %70, %c4722366482869645213695_i256 : i256 loc(#loc3) +// CHECK-NEXT: %72 = arith.cmpi ne, %70, %71 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %72, ^bb15, ^bb16 loc(#loc3) // CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %73 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%73, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb16 loc(#loc12) +// CHECK-NEXT: %73 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%73, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb16 loc(#loc3) // CHECK-NEXT: ^bb16: // 2 preds: ^bb14, ^bb15 -// CHECK-NEXT: %74 = arith.shli %71, %67 : i256 loc(#loc12) -// CHECK-NEXT: %75 = arith.ori %68, %74 : i256 loc(#loc12) -// CHECK-NEXT: %76 = arith.addi %66, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %77 = arith.addi %67, %c72_i256 : i256 loc(#loc12) -// CHECK-NEXT: %78 = arith.addi %65, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb13(%78, %76, %77, %75 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) +// CHECK-NEXT: %74 = arith.shli %71, %67 : i256 loc(#loc3) +// CHECK-NEXT: %75 = arith.ori %68, %74 : i256 loc(#loc3) +// CHECK-NEXT: %76 = arith.addi %66, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %77 = arith.addi %67, %c72_i256 : i256 loc(#loc3) +// CHECK-NEXT: %78 = arith.addi %65, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb13(%78, %76, %77, %75 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) // CHECK-NEXT: ^bb17(%79: i256 loc({{.*}}:59:4)): // pred: ^bb13 -// CHECK-NEXT: %80 = llvm.inttoptr %57 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %79, %80 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb18 loc(#loc12) +// CHECK-NEXT: %80 = llvm.inttoptr %57 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %79, %80 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb18 loc(#loc3) // CHECK-NEXT: ^bb18: // 2 preds: ^bb12, ^bb17 -// CHECK-NEXT: %81 = arith.addi %1, %c288_i256 : i256 loc(#loc12) -// CHECK-NEXT: %82 = llvm.inttoptr %81 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %83 = llvm.load %82 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %84 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %85 = arith.subi %84, %1 : i256 loc(#loc12) -// CHECK-NEXT: %86 = arith.subi %85, %c95_i256 : i256 loc(#loc12) -// CHECK-NEXT: %87 = arith.cmpi sge, %83, %86 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %87, ^bb19, ^bb20 loc(#loc12) +// CHECK-NEXT: %81 = arith.addi %1, %c288_i256 : i256 loc(#loc3) +// CHECK-NEXT: %82 = llvm.inttoptr %81 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %83 = llvm.load %82 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %84 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %85 = arith.subi %84, %1 : i256 loc(#loc3) +// CHECK-NEXT: %86 = arith.subi %85, %c95_i256 : i256 loc(#loc3) +// CHECK-NEXT: %87 = arith.cmpi sge, %83, %86 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %87, ^bb19, ^bb20 loc(#loc3) // CHECK-NEXT: ^bb19: // pred: ^bb18 -// CHECK-NEXT: %88 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%88, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb20 loc(#loc12) +// CHECK-NEXT: %88 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%88, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb20 loc(#loc3) // CHECK-NEXT: ^bb20: // 2 preds: ^bb18, ^bb19 -// CHECK-NEXT: %89 = arith.addi %1, %83 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb21(%c0_i256 : i256) loc(#loc12) +// CHECK-NEXT: %89 = arith.addi %1, %83 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb21(%c0_i256 : i256) loc(#loc3) // CHECK-NEXT: ^bb21(%90: i256 loc({{.*}}:59:4)): // 2 preds: ^bb20, ^bb86 -// CHECK-NEXT: %91 = arith.cmpi ult, %90, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %91, ^bb22(%90 : i256), ^bb87 loc(#loc12) +// CHECK-NEXT: %91 = arith.cmpi ult, %90, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %91, ^bb22(%90 : i256), ^bb87 loc(#loc3) // CHECK-NEXT: ^bb22(%92: i256 loc({{.*}}:59:4)): // pred: ^bb21 -// CHECK-NEXT: %93 = arith.muli %92, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %94 = arith.addi %89, %93 : i256 loc(#loc12) -// CHECK-NEXT: %95 = arith.muli %92, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: %96 = arith.addi %95, %c4_i256 : i256 loc(#loc12) -// CHECK-NEXT: %97 = llvm.inttoptr %94 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %98 = llvm.load %97 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %99 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %100 = arith.subi %99, %89 : i256 loc(#loc12) -// CHECK-NEXT: %101 = arith.subi %100, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %102 = arith.cmpi sge, %98, %101 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %102, ^bb23, ^bb24 loc(#loc12) +// CHECK-NEXT: %93 = arith.muli %92, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %94 = arith.addi %89, %93 : i256 loc(#loc3) +// CHECK-NEXT: %95 = arith.muli %92, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: %96 = arith.addi %95, %c4_i256 : i256 loc(#loc3) +// CHECK-NEXT: %97 = llvm.inttoptr %94 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %98 = llvm.load %97 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %99 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %100 = arith.subi %99, %89 : i256 loc(#loc3) +// CHECK-NEXT: %101 = arith.subi %100, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %102 = arith.cmpi sge, %98, %101 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %102, ^bb23, ^bb24 loc(#loc3) // CHECK-NEXT: ^bb23: // pred: ^bb22 -// CHECK-NEXT: %103 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%103, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb24 loc(#loc12) +// CHECK-NEXT: %103 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%103, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb24 loc(#loc3) // CHECK-NEXT: ^bb24: // 2 preds: ^bb22, ^bb23 -// CHECK-NEXT: %104 = arith.addi %89, %98 : i256 loc(#loc12) -// CHECK-NEXT: %105 = llvm.inttoptr %104 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %106 = llvm.load %105 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %107 = "llvm.intrcall"(%c8_i256, %106) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %108 = arith.cmpi ne, %106, %107 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %108, ^bb25, ^bb26 loc(#loc12) +// CHECK-NEXT: %104 = arith.addi %89, %98 : i256 loc(#loc3) +// CHECK-NEXT: %105 = llvm.inttoptr %104 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %106 = llvm.load %105 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %107 = "llvm.intrcall"(%c8_i256, %106) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %108 = arith.cmpi ne, %106, %107 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %108, ^bb25, ^bb26 loc(#loc3) // CHECK-NEXT: ^bb25: // pred: ^bb24 -// CHECK-NEXT: %109 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%109, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb26 loc(#loc12) +// CHECK-NEXT: %109 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%109, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb26 loc(#loc3) // CHECK-NEXT: ^bb26: // 2 preds: ^bb24, ^bb25 -// CHECK-NEXT: %110 = arith.andi %107, %c4722366482869645213695_i256 : i256 loc(#loc12) -// CHECK-NEXT: %111 = arith.addi %104, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %112 = llvm.inttoptr %111 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %113 = llvm.load %112 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %114 = arith.andi %113, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %115 = arith.cmpi ne, %113, %114 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %115, ^bb27, ^bb28 loc(#loc12) +// CHECK-NEXT: %110 = arith.andi %107, %c4722366482869645213695_i256 : i256 loc(#loc3) +// CHECK-NEXT: %111 = arith.addi %104, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %112 = llvm.inttoptr %111 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %113 = llvm.load %112 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %114 = arith.andi %113, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %115 = arith.cmpi ne, %113, %114 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %115, ^bb27, ^bb28 loc(#loc3) // CHECK-NEXT: ^bb27: // pred: ^bb26 -// CHECK-NEXT: %116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%116, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb28 loc(#loc12) +// CHECK-NEXT: %116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%116, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb28 loc(#loc3) // CHECK-NEXT: ^bb28: // 2 preds: ^bb26, ^bb27 -// CHECK-NEXT: %117 = arith.shli %114, %c72_i256 : i256 loc(#loc12) -// CHECK-NEXT: %118 = arith.ori %110, %117 : i256 loc(#loc12) -// CHECK-NEXT: %119 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %120 = llvm.load %119 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %121 = arith.andi %120, %c-1208925819614629174706176_i256 : i256 loc(#loc12) -// CHECK-NEXT: %122 = arith.ori %121, %118 : i256 loc(#loc12) -// CHECK-NEXT: %123 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %122, %123 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %124 = arith.addi %104, %c64_i256 : i256 loc(#loc12) -// CHECK-NEXT: %125 = llvm.inttoptr %124 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %126 = llvm.load %125 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %127 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %128 = arith.subi %127, %104 : i256 loc(#loc12) -// CHECK-NEXT: %129 = arith.subi %128, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %130 = arith.cmpi sge, %126, %129 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %130, ^bb29, ^bb30 loc(#loc12) +// CHECK-NEXT: %117 = arith.shli %114, %c72_i256 : i256 loc(#loc3) +// CHECK-NEXT: %118 = arith.ori %110, %117 : i256 loc(#loc3) +// CHECK-NEXT: %119 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %120 = llvm.load %119 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %121 = arith.andi %120, %c-1208925819614629174706176_i256 : i256 loc(#loc3) +// CHECK-NEXT: %122 = arith.ori %121, %118 : i256 loc(#loc3) +// CHECK-NEXT: %123 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %122, %123 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %124 = arith.addi %104, %c64_i256 : i256 loc(#loc3) +// CHECK-NEXT: %125 = llvm.inttoptr %124 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %126 = llvm.load %125 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %127 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %128 = arith.subi %127, %104 : i256 loc(#loc3) +// CHECK-NEXT: %129 = arith.subi %128, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %130 = arith.cmpi sge, %126, %129 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %130, ^bb29, ^bb30 loc(#loc3) // CHECK-NEXT: ^bb29: // pred: ^bb28 -// CHECK-NEXT: %131 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%131, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb30 loc(#loc12) +// CHECK-NEXT: %131 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%131, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb30 loc(#loc3) // CHECK-NEXT: ^bb30: // 2 preds: ^bb28, ^bb29 -// CHECK-NEXT: %132 = arith.addi %104, %126 : i256 loc(#loc12) -// CHECK-NEXT: %133 = llvm.inttoptr %132 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %134 = llvm.load %133 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %135 = arith.addi %132, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %136 = arith.cmpi ugt, %134, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %136, ^bb31, ^bb32 loc(#loc12) +// CHECK-NEXT: %132 = arith.addi %104, %126 : i256 loc(#loc3) +// CHECK-NEXT: %133 = llvm.inttoptr %132 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %134 = llvm.load %133 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %135 = arith.addi %132, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %136 = arith.cmpi ugt, %134, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %136, ^bb31, ^bb32 loc(#loc3) // CHECK-NEXT: ^bb31: // pred: ^bb30 -// CHECK-NEXT: %137 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%137, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb32 loc(#loc12) +// CHECK-NEXT: %137 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%137, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb32 loc(#loc3) // CHECK-NEXT: ^bb32: // 2 preds: ^bb30, ^bb31 -// CHECK-NEXT: %138 = arith.muli %134, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %139 = arith.subi %127, %138 : i256 loc(#loc12) -// CHECK-NEXT: %140 = arith.cmpi sgt, %135, %139 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %140, ^bb33, ^bb34 loc(#loc12) +// CHECK-NEXT: %138 = arith.muli %134, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %139 = arith.subi %127, %138 : i256 loc(#loc3) +// CHECK-NEXT: %140 = arith.cmpi sgt, %135, %139 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %140, ^bb33, ^bb34 loc(#loc3) // CHECK-NEXT: ^bb33: // pred: ^bb32 -// CHECK-NEXT: %141 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%141, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb34 loc(#loc12) +// CHECK-NEXT: %141 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%141, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb34 loc(#loc3) // CHECK-NEXT: ^bb34: // 2 preds: ^bb32, ^bb33 -// CHECK-NEXT: %142 = arith.addi %95, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: %143 = arith.cmpi ugt, %134, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %143, ^bb35, ^bb36 loc(#loc12) +// CHECK-NEXT: %142 = arith.addi %95, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: %143 = arith.cmpi ugt, %134, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %143, ^bb35, ^bb36 loc(#loc3) // CHECK-NEXT: ^bb35: // pred: ^bb34 -// CHECK-NEXT: %144 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %144 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %145 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %145 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %146 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%146, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb36 loc(#loc12) +// CHECK-NEXT: %144 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %144 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %145 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %145 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %146 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%146, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb36 loc(#loc3) // CHECK-NEXT: ^bb36: // 2 preds: ^bb34, ^bb35 -// CHECK-NEXT: %147 = llvm.inttoptr %142 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %148 = llvm.load %147 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %149 = llvm.inttoptr %142 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %134, %149 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %150 = arith.cmpi ult, %134, %148 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %150, ^bb37, ^bb44 loc(#loc12) +// CHECK-NEXT: %147 = llvm.inttoptr %142 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %148 = llvm.load %147 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %149 = llvm.inttoptr %142 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %134, %149 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %150 = arith.cmpi ult, %134, %148 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %150, ^bb37, ^bb44 loc(#loc3) // CHECK-NEXT: ^bb37: // pred: ^bb36 -// CHECK-NEXT: %151 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %142, %151 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %152 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %153 = "llvm.intrcall"(%152, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %154 = arith.addi %153, %134 : i256 loc(#loc12) -// CHECK-NEXT: %155 = arith.addi %153, %148 : i256 loc(#loc12) -// CHECK-NEXT: %156 = arith.subi %155, %154 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb38(%c0_i256 : i256) loc(#loc12) +// CHECK-NEXT: %151 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %142, %151 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %152 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %153 = "llvm.intrcall"(%152, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %154 = arith.addi %153, %134 : i256 loc(#loc3) +// CHECK-NEXT: %155 = arith.addi %153, %148 : i256 loc(#loc3) +// CHECK-NEXT: %156 = arith.subi %155, %154 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb38(%c0_i256 : i256) loc(#loc3) // CHECK-NEXT: ^bb38(%157: i256 loc({{.*}}:59:4)): // 2 preds: ^bb37, ^bb43 -// CHECK-NEXT: %158 = arith.cmpi ult, %157, %156 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %158, ^bb39(%157 : i256), ^bb44 loc(#loc12) +// CHECK-NEXT: %158 = arith.cmpi ult, %157, %156 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %158, ^bb39(%157 : i256), ^bb44 loc(#loc3) // CHECK-NEXT: ^bb39(%159: i256 loc({{.*}}:59:4)): // pred: ^bb38 -// CHECK-NEXT: %160 = arith.addi %154, %159 : i256 loc(#loc12) -// CHECK-NEXT: %161 = llvm.inttoptr %160 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %162 = llvm.load %161 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %163 = llvm.inttoptr %160 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %163 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %164 = arith.cmpi ugt, %162, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %164, ^bb40, ^bb43(%159 : i256) loc(#loc12) +// CHECK-NEXT: %160 = arith.addi %154, %159 : i256 loc(#loc3) +// CHECK-NEXT: %161 = llvm.inttoptr %160 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %162 = llvm.load %161 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %163 = llvm.inttoptr %160 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %163 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %164 = arith.cmpi ugt, %162, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %164, ^bb40, ^bb43(%159 : i256) loc(#loc3) // CHECK-NEXT: ^bb40: // pred: ^bb39 -// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %160, %165 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %166 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %167 = "llvm.intrcall"(%166, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %168 = arith.addi %162, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %169 = arith.divui %168, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb41(%c0_i256 : i256) loc(#loc12) +// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %160, %165 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %166 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %167 = "llvm.intrcall"(%166, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %168 = arith.addi %162, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %169 = arith.divui %168, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb41(%c0_i256 : i256) loc(#loc3) // CHECK-NEXT: ^bb41(%170: i256 loc({{.*}}:59:4)): // 2 preds: ^bb40, ^bb42 -// CHECK-NEXT: %171 = arith.cmpi ult, %170, %169 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %171, ^bb42(%170 : i256), ^bb43(%159 : i256) loc(#loc12) +// CHECK-NEXT: %171 = arith.cmpi ult, %170, %169 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %171, ^bb42(%170 : i256), ^bb43(%159 : i256) loc(#loc3) // CHECK-NEXT: ^bb42(%172: i256 loc({{.*}}:59:4)): // pred: ^bb41 -// CHECK-NEXT: %173 = arith.addi %167, %172 : i256 loc(#loc12) -// CHECK-NEXT: %174 = llvm.inttoptr %173 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %174 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %175 = arith.addi %172, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb41(%175 : i256) loc(#loc12) +// CHECK-NEXT: %173 = arith.addi %167, %172 : i256 loc(#loc3) +// CHECK-NEXT: %174 = llvm.inttoptr %173 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %174 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %175 = arith.addi %172, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb41(%175 : i256) loc(#loc3) // CHECK-NEXT: ^bb43(%176: i256 loc({{.*}}:59:4)): // 2 preds: ^bb39, ^bb41 -// CHECK-NEXT: %177 = arith.addi %176, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb38(%177 : i256) loc(#loc12) +// CHECK-NEXT: %177 = arith.addi %176, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb38(%177 : i256) loc(#loc3) // CHECK-NEXT: ^bb44: // 2 preds: ^bb36, ^bb38 -// CHECK-NEXT: %178 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %142, %178 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %179 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %180 = "llvm.intrcall"(%179, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb45(%c0_i256 : i256) loc(#loc12) +// CHECK-NEXT: %178 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %142, %178 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %179 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %180 = "llvm.intrcall"(%179, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb45(%c0_i256 : i256) loc(#loc3) // CHECK-NEXT: ^bb45(%181: i256 loc({{.*}}:59:4)): // 2 preds: ^bb44, ^bb74 -// CHECK-NEXT: %182 = arith.cmpi ult, %181, %134 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %182, ^bb46(%181 : i256), ^bb75 loc(#loc12) +// CHECK-NEXT: %182 = arith.cmpi ult, %181, %134 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %182, ^bb46(%181 : i256), ^bb75 loc(#loc3) // CHECK-NEXT: ^bb46(%183: i256 loc({{.*}}:59:4)): // pred: ^bb45 -// CHECK-NEXT: %184 = arith.muli %183, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %185 = arith.addi %135, %184 : i256 loc(#loc12) -// CHECK-NEXT: %186 = arith.addi %180, %183 : i256 loc(#loc12) -// CHECK-NEXT: %187 = llvm.inttoptr %185 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %188 = llvm.load %187 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %189 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %190 = arith.subi %189, %135 : i256 loc(#loc12) -// CHECK-NEXT: %191 = arith.subi %190, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %192 = arith.cmpi sge, %188, %191 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %192, ^bb47, ^bb48 loc(#loc12) +// CHECK-NEXT: %184 = arith.muli %183, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %185 = arith.addi %135, %184 : i256 loc(#loc3) +// CHECK-NEXT: %186 = arith.addi %180, %183 : i256 loc(#loc3) +// CHECK-NEXT: %187 = llvm.inttoptr %185 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %188 = llvm.load %187 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %189 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %190 = arith.subi %189, %135 : i256 loc(#loc3) +// CHECK-NEXT: %191 = arith.subi %190, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %192 = arith.cmpi sge, %188, %191 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %192, ^bb47, ^bb48 loc(#loc3) // CHECK-NEXT: ^bb47: // pred: ^bb46 -// CHECK-NEXT: %193 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%193, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb48 loc(#loc12) +// CHECK-NEXT: %193 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%193, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb48 loc(#loc3) // CHECK-NEXT: ^bb48: // 2 preds: ^bb46, ^bb47 -// CHECK-NEXT: %194 = arith.addi %135, %188 : i256 loc(#loc12) -// CHECK-NEXT: %195 = llvm.inttoptr %194 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %196 = llvm.load %195 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %197 = arith.addi %194, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %198 = arith.cmpi ugt, %196, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %198, ^bb49, ^bb50 loc(#loc12) +// CHECK-NEXT: %194 = arith.addi %135, %188 : i256 loc(#loc3) +// CHECK-NEXT: %195 = llvm.inttoptr %194 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %196 = llvm.load %195 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %197 = arith.addi %194, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %198 = arith.cmpi ugt, %196, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %198, ^bb49, ^bb50 loc(#loc3) // CHECK-NEXT: ^bb49: // pred: ^bb48 -// CHECK-NEXT: %199 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%199, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb50 loc(#loc12) +// CHECK-NEXT: %199 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%199, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb50 loc(#loc3) // CHECK-NEXT: ^bb50: // 2 preds: ^bb48, ^bb49 -// CHECK-NEXT: %200 = arith.muli %196, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %201 = arith.subi %189, %200 : i256 loc(#loc12) -// CHECK-NEXT: %202 = arith.cmpi sgt, %197, %201 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %202, ^bb51, ^bb52 loc(#loc12) +// CHECK-NEXT: %200 = arith.muli %196, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %201 = arith.subi %189, %200 : i256 loc(#loc3) +// CHECK-NEXT: %202 = arith.cmpi sgt, %197, %201 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %202, ^bb51, ^bb52 loc(#loc3) // CHECK-NEXT: ^bb51: // pred: ^bb50 -// CHECK-NEXT: %203 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%203, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb52 loc(#loc12) +// CHECK-NEXT: %203 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%203, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb52 loc(#loc3) // CHECK-NEXT: ^bb52: // 2 preds: ^bb50, ^bb51 -// CHECK-NEXT: %204 = arith.cmpi ugt, %196, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %204, ^bb53, ^bb54 loc(#loc12) +// CHECK-NEXT: %204 = arith.cmpi ugt, %196, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %204, ^bb53, ^bb54 loc(#loc3) // CHECK-NEXT: ^bb53: // pred: ^bb52 -// CHECK-NEXT: %205 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %205 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %206 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %206 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %207 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%207, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb54 loc(#loc12) +// CHECK-NEXT: %205 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %205 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %206 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %206 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %207 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%207, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb54 loc(#loc3) // CHECK-NEXT: ^bb54: // 2 preds: ^bb52, ^bb53 -// CHECK-NEXT: %208 = llvm.inttoptr %186 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %209 = llvm.load %208 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %210 = llvm.inttoptr %186 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %196, %210 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %211 = arith.cmpi ult, %196, %209 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %211, ^bb55, ^bb60 loc(#loc12) +// CHECK-NEXT: %208 = llvm.inttoptr %186 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %209 = llvm.load %208 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %210 = llvm.inttoptr %186 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %196, %210 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %211 = arith.cmpi ult, %196, %209 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %211, ^bb55, ^bb60 loc(#loc3) // CHECK-NEXT: ^bb55: // pred: ^bb54 -// CHECK-NEXT: %212 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %186, %212 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %213 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %214 = "llvm.intrcall"(%213, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %215 = arith.addi %196, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %216 = arith.divui %215, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %217 = arith.addi %214, %216 : i256 loc(#loc12) -// CHECK-NEXT: %218 = arith.remui %196, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %219 = arith.cmpi ne, %218, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %219, ^bb56, ^bb57 loc(#loc12) +// CHECK-NEXT: %212 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %186, %212 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %213 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %214 = "llvm.intrcall"(%213, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %215 = arith.addi %196, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %216 = arith.divui %215, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %217 = arith.addi %214, %216 : i256 loc(#loc3) +// CHECK-NEXT: %218 = arith.remui %196, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %219 = arith.cmpi ne, %218, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %219, ^bb56, ^bb57 loc(#loc3) // CHECK-NEXT: ^bb56: // pred: ^bb55 -// CHECK-NEXT: %220 = arith.muli %218, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %221 = arith.subi %c256_i256, %220 : i256 loc(#loc12) -// CHECK-NEXT: %222 = arith.shrui %c-1_i256, %221 : i256 loc(#loc12) -// CHECK-NEXT: %223 = arith.subi %217, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %224 = llvm.inttoptr %223 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %225 = llvm.load %224 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %226 = arith.andi %225, %222 : i256 loc(#loc12) -// CHECK-NEXT: %227 = llvm.inttoptr %223 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %226, %227 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb57 loc(#loc12) +// CHECK-NEXT: %220 = arith.muli %218, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %221 = arith.subi %c256_i256, %220 : i256 loc(#loc3) +// CHECK-NEXT: %222 = arith.shrui %c-1_i256, %221 : i256 loc(#loc3) +// CHECK-NEXT: %223 = arith.subi %217, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %224 = llvm.inttoptr %223 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %225 = llvm.load %224 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %226 = arith.andi %225, %222 : i256 loc(#loc3) +// CHECK-NEXT: %227 = llvm.inttoptr %223 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %226, %227 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb57 loc(#loc3) // CHECK-NEXT: ^bb57: // 2 preds: ^bb55, ^bb56 -// CHECK-NEXT: %228 = arith.addi %209, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %229 = arith.divui %228, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %230 = arith.addi %214, %229 : i256 loc(#loc12) -// CHECK-NEXT: %231 = arith.subi %230, %217 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb58(%c0_i256 : i256) loc(#loc12) +// CHECK-NEXT: %228 = arith.addi %209, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %229 = arith.divui %228, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %230 = arith.addi %214, %229 : i256 loc(#loc3) +// CHECK-NEXT: %231 = arith.subi %230, %217 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb58(%c0_i256 : i256) loc(#loc3) // CHECK-NEXT: ^bb58(%232: i256 loc({{.*}}:59:4)): // 2 preds: ^bb57, ^bb59 -// CHECK-NEXT: %233 = arith.cmpi ult, %232, %231 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %233, ^bb59(%232 : i256), ^bb60 loc(#loc12) +// CHECK-NEXT: %233 = arith.cmpi ult, %232, %231 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %233, ^bb59(%232 : i256), ^bb60 loc(#loc3) // CHECK-NEXT: ^bb59(%234: i256 loc({{.*}}:59:4)): // pred: ^bb58 -// CHECK-NEXT: %235 = arith.addi %217, %234 : i256 loc(#loc12) -// CHECK-NEXT: %236 = llvm.inttoptr %235 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %236 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %237 = arith.addi %234, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb58(%237 : i256) loc(#loc12) +// CHECK-NEXT: %235 = arith.addi %217, %234 : i256 loc(#loc3) +// CHECK-NEXT: %236 = llvm.inttoptr %235 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %236 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %237 = arith.addi %234, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb58(%237 : i256) loc(#loc3) // CHECK-NEXT: ^bb60: // 2 preds: ^bb54, ^bb58 -// CHECK-NEXT: %238 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %186, %238 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %239 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %240 = "llvm.intrcall"(%239, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %241 = arith.cmpi uge, %196, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %242 = arith.subi %196, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %243 = arith.select %241, %242, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb61(%c0_i256, %197, %240, %c0_i256 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %238 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %186, %238 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %239 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %240 = "llvm.intrcall"(%239, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %241 = arith.cmpi uge, %196, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %242 = arith.subi %196, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %243 = arith.select %241, %242, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb61(%c0_i256, %197, %240, %c0_i256 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb61(%244: i256 loc({{.*}}:59:4), %245: i256 loc({{.*}}:59:4), %246: i256 loc({{.*}}:59:4), %247: i256 loc({{.*}}:59:4)): // 2 preds: ^bb60, ^bb67 -// CHECK-NEXT: %248 = arith.cmpi ult, %244, %243 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %248, ^bb62(%244, %245, %246, %247 : i256, i256, i256, i256), ^bb68(%245, %246, %247 : i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %248 = arith.cmpi ult, %244, %243 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %248, ^bb62(%244, %245, %246, %247 : i256, i256, i256, i256), ^bb68(%245, %246, %247 : i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb62(%249: i256 loc({{.*}}:59:4), %250: i256 loc({{.*}}:59:4), %251: i256 loc({{.*}}:59:4), %252: i256 loc({{.*}}:59:4)): // pred: ^bb61 -// CHECK-NEXT: cf.br ^bb63(%c0_i256, %250, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: cf.br ^bb63(%c0_i256, %250, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb63(%253: i256 loc({{.*}}:59:4), %254: i256 loc({{.*}}:59:4), %255: i256 loc({{.*}}:59:4), %256: i256 loc({{.*}}:59:4)): // 2 preds: ^bb62, ^bb66 -// CHECK-NEXT: %257 = arith.cmpi ult, %253, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %257, ^bb64(%253, %254, %255, %256 : i256, i256, i256, i256), ^bb67(%254, %256 : i256, i256) loc(#loc12) +// CHECK-NEXT: %257 = arith.cmpi ult, %253, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %257, ^bb64(%253, %254, %255, %256 : i256, i256, i256, i256), ^bb67(%254, %256 : i256, i256) loc(#loc3) // CHECK-NEXT: ^bb64(%258: i256 loc({{.*}}:59:4), %259: i256 loc({{.*}}:59:4), %260: i256 loc({{.*}}:59:4), %261: i256 loc({{.*}}:59:4)): // pred: ^bb63 -// CHECK-NEXT: %262 = llvm.inttoptr %259 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %263 = llvm.load %262 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %264 = arith.cmpi ne, %263, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %265 = arith.extui %264 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %266 = arith.cmpi ne, %263, %265 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %266, ^bb65, ^bb66 loc(#loc12) +// CHECK-NEXT: %262 = llvm.inttoptr %259 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %263 = llvm.load %262 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %264 = arith.cmpi ne, %263, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %265 = arith.extui %264 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %266 = arith.cmpi ne, %263, %265 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %266, ^bb65, ^bb66 loc(#loc3) // CHECK-NEXT: ^bb65: // pred: ^bb64 -// CHECK-NEXT: %267 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%267, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb66 loc(#loc12) +// CHECK-NEXT: %267 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%267, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb66 loc(#loc3) // CHECK-NEXT: ^bb66: // 2 preds: ^bb64, ^bb65 -// CHECK-NEXT: %268 = arith.andi %265, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %269 = arith.shli %268, %260 : i256 loc(#loc12) -// CHECK-NEXT: %270 = arith.ori %261, %269 : i256 loc(#loc12) -// CHECK-NEXT: %271 = arith.addi %259, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %272 = arith.addi %260, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %273 = arith.addi %258, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb63(%273, %271, %272, %270 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %268 = arith.andi %265, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %269 = arith.shli %268, %260 : i256 loc(#loc3) +// CHECK-NEXT: %270 = arith.ori %261, %269 : i256 loc(#loc3) +// CHECK-NEXT: %271 = arith.addi %259, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %272 = arith.addi %260, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %273 = arith.addi %258, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb63(%273, %271, %272, %270 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb67(%274: i256 loc({{.*}}:59:4), %275: i256 loc({{.*}}:59:4)): // pred: ^bb63 -// CHECK-NEXT: %276 = llvm.inttoptr %251 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %275, %276 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %277 = arith.addi %251, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %278 = arith.addi %252, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %279 = arith.addi %249, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb61(%279, %274, %277, %278 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %276 = llvm.inttoptr %251 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %275, %276 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %277 = arith.addi %251, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %278 = arith.addi %252, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %279 = arith.addi %249, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb61(%279, %274, %277, %278 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb68(%280: i256 loc({{.*}}:59:4), %281: i256 loc({{.*}}:59:4), %282: i256 loc({{.*}}:59:4)): // pred: ^bb61 -// CHECK-NEXT: %283 = arith.cmpi ult, %282, %196 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %283, ^bb69(%282, %280, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb74(%183 : i256) loc(#loc12) +// CHECK-NEXT: %283 = arith.cmpi ult, %282, %196 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %283, ^bb69(%282, %280, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb74(%183 : i256) loc(#loc3) // CHECK-NEXT: ^bb69(%284: i256 loc({{.*}}:59:4), %285: i256 loc({{.*}}:59:4), %286: i256 loc({{.*}}:59:4), %287: i256 loc({{.*}}:59:4)): // 2 preds: ^bb68, ^bb72 -// CHECK-NEXT: %288 = arith.cmpi ult, %284, %196 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %288, ^bb70(%284, %285, %286, %287 : i256, i256, i256, i256), ^bb73(%287 : i256) loc(#loc12) +// CHECK-NEXT: %288 = arith.cmpi ult, %284, %196 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %288, ^bb70(%284, %285, %286, %287 : i256, i256, i256, i256), ^bb73(%287 : i256) loc(#loc3) // CHECK-NEXT: ^bb70(%289: i256 loc({{.*}}:59:4), %290: i256 loc({{.*}}:59:4), %291: i256 loc({{.*}}:59:4), %292: i256 loc({{.*}}:59:4)): // pred: ^bb69 -// CHECK-NEXT: %293 = llvm.inttoptr %290 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %294 = llvm.load %293 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %295 = arith.cmpi ne, %294, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %296 = arith.extui %295 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %297 = arith.cmpi ne, %294, %296 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %297, ^bb71, ^bb72 loc(#loc12) +// CHECK-NEXT: %293 = llvm.inttoptr %290 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %294 = llvm.load %293 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %295 = arith.cmpi ne, %294, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %296 = arith.extui %295 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %297 = arith.cmpi ne, %294, %296 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %297, ^bb71, ^bb72 loc(#loc3) // CHECK-NEXT: ^bb71: // pred: ^bb70 -// CHECK-NEXT: %298 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%298, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb72 loc(#loc12) +// CHECK-NEXT: %298 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%298, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb72 loc(#loc3) // CHECK-NEXT: ^bb72: // 2 preds: ^bb70, ^bb71 -// CHECK-NEXT: %299 = arith.andi %296, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %300 = arith.shli %299, %291 : i256 loc(#loc12) -// CHECK-NEXT: %301 = arith.ori %292, %300 : i256 loc(#loc12) -// CHECK-NEXT: %302 = arith.addi %290, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %303 = arith.addi %291, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %304 = arith.addi %289, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb69(%304, %302, %303, %301 : i256, i256, i256, i256) loc(#loc12) +// CHECK-NEXT: %299 = arith.andi %296, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %300 = arith.shli %299, %291 : i256 loc(#loc3) +// CHECK-NEXT: %301 = arith.ori %292, %300 : i256 loc(#loc3) +// CHECK-NEXT: %302 = arith.addi %290, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %303 = arith.addi %291, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %304 = arith.addi %289, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb69(%304, %302, %303, %301 : i256, i256, i256, i256) loc(#loc3) // CHECK-NEXT: ^bb73(%305: i256 loc({{.*}}:59:4)): // pred: ^bb69 -// CHECK-NEXT: %306 = llvm.inttoptr %281 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %305, %306 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb74(%183 : i256) loc(#loc12) +// CHECK-NEXT: %306 = llvm.inttoptr %281 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %305, %306 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb74(%183 : i256) loc(#loc3) // CHECK-NEXT: ^bb74(%307: i256 loc({{.*}}:59:4)): // 2 preds: ^bb68, ^bb73 -// CHECK-NEXT: %308 = arith.addi %307, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb45(%308 : i256) loc(#loc12) +// CHECK-NEXT: %308 = arith.addi %307, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb45(%308 : i256) loc(#loc3) // CHECK-NEXT: ^bb75: // pred: ^bb45 -// CHECK-NEXT: %309 = arith.addi %104, %c96_i256 : i256 loc(#loc12) -// CHECK-NEXT: %310 = arith.addi %95, %c6_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb76(%c0_i256 : i256) loc(#loc12) +// CHECK-NEXT: %309 = arith.addi %104, %c96_i256 : i256 loc(#loc3) +// CHECK-NEXT: %310 = arith.addi %95, %c6_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb76(%c0_i256 : i256) loc(#loc3) // CHECK-NEXT: ^bb76(%311: i256 loc({{.*}}:59:4)): // 2 preds: ^bb75, ^bb79 -// CHECK-NEXT: %312 = arith.cmpi ult, %311, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %312, ^bb77(%311 : i256), ^bb80 loc(#loc12) +// CHECK-NEXT: %312 = arith.cmpi ult, %311, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %312, ^bb77(%311 : i256), ^bb80 loc(#loc3) // CHECK-NEXT: ^bb77(%313: i256 loc({{.*}}:59:4)): // pred: ^bb76 -// CHECK-NEXT: %314 = arith.muli %313, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %315 = arith.addi %309, %314 : i256 loc(#loc12) -// CHECK-NEXT: %316 = arith.addi %310, %313 : i256 loc(#loc12) -// CHECK-NEXT: %317 = llvm.inttoptr %315 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %318 = llvm.load %317 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %319 = arith.andi %318, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc12) -// CHECK-NEXT: %320 = arith.cmpi ne, %318, %319 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %320, ^bb78, ^bb79 loc(#loc12) +// CHECK-NEXT: %314 = arith.muli %313, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %315 = arith.addi %309, %314 : i256 loc(#loc3) +// CHECK-NEXT: %316 = arith.addi %310, %313 : i256 loc(#loc3) +// CHECK-NEXT: %317 = llvm.inttoptr %315 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %318 = llvm.load %317 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %319 = arith.andi %318, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc3) +// CHECK-NEXT: %320 = arith.cmpi ne, %318, %319 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %320, ^bb78, ^bb79 loc(#loc3) // CHECK-NEXT: ^bb78: // pred: ^bb77 -// CHECK-NEXT: %321 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%321, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb79 loc(#loc12) +// CHECK-NEXT: %321 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%321, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb79 loc(#loc3) // CHECK-NEXT: ^bb79: // 2 preds: ^bb77, ^bb78 -// CHECK-NEXT: %322 = llvm.inttoptr %316 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %319, %322 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %323 = arith.addi %313, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb76(%323 : i256) loc(#loc12) +// CHECK-NEXT: %322 = llvm.inttoptr %316 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %319, %322 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %323 = arith.addi %313, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb76(%323 : i256) loc(#loc3) // CHECK-NEXT: ^bb80: // pred: ^bb76 -// CHECK-NEXT: %324 = arith.addi %104, %c160_i256 : i256 loc(#loc12) -// CHECK-NEXT: %325 = llvm.inttoptr %324 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %326 = llvm.load %325 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %327 = "llvm.intrcall"(%c23_i256, %326) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %328 = arith.cmpi ne, %326, %327 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %328, ^bb81, ^bb82 loc(#loc12) +// CHECK-NEXT: %324 = arith.addi %104, %c160_i256 : i256 loc(#loc3) +// CHECK-NEXT: %325 = llvm.inttoptr %324 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %326 = llvm.load %325 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %327 = "llvm.intrcall"(%c23_i256, %326) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %328 = arith.cmpi ne, %326, %327 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %328, ^bb81, ^bb82 loc(#loc3) // CHECK-NEXT: ^bb81: // pred: ^bb80 -// CHECK-NEXT: %329 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%329, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb82 loc(#loc12) +// CHECK-NEXT: %329 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%329, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb82 loc(#loc3) // CHECK-NEXT: ^bb82: // 2 preds: ^bb80, ^bb81 -// CHECK-NEXT: %330 = arith.andi %327, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc12) -// CHECK-NEXT: %331 = arith.addi %104, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %332 = llvm.inttoptr %331 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %333 = llvm.load %332 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %334 = arith.andi %333, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %335 = arith.cmpi ne, %333, %334 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %335, ^bb83, ^bb84 loc(#loc12) +// CHECK-NEXT: %330 = arith.andi %327, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc3) +// CHECK-NEXT: %331 = arith.addi %104, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %332 = llvm.inttoptr %331 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %333 = llvm.load %332 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %334 = arith.andi %333, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %335 = arith.cmpi ne, %333, %334 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %335, ^bb83, ^bb84 loc(#loc3) // CHECK-NEXT: ^bb83: // pred: ^bb82 -// CHECK-NEXT: %336 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%336, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb84 loc(#loc12) +// CHECK-NEXT: %336 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%336, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb84 loc(#loc3) // CHECK-NEXT: ^bb84: // 2 preds: ^bb82, ^bb83 -// CHECK-NEXT: %337 = arith.shli %334, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %338 = arith.ori %330, %337 : i256 loc(#loc12) -// CHECK-NEXT: %339 = arith.addi %104, %c224_i256 : i256 loc(#loc12) -// CHECK-NEXT: %340 = llvm.inttoptr %339 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %341 = llvm.load %340 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %342 = arith.andi %341, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc12) -// CHECK-NEXT: %343 = arith.cmpi ne, %341, %342 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %343, ^bb85, ^bb86 loc(#loc12) +// CHECK-NEXT: %337 = arith.shli %334, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %338 = arith.ori %330, %337 : i256 loc(#loc3) +// CHECK-NEXT: %339 = arith.addi %104, %c224_i256 : i256 loc(#loc3) +// CHECK-NEXT: %340 = llvm.inttoptr %339 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %341 = llvm.load %340 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %342 = arith.andi %341, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc3) +// CHECK-NEXT: %343 = arith.cmpi ne, %341, %342 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %343, ^bb85, ^bb86 loc(#loc3) // CHECK-NEXT: ^bb85: // pred: ^bb84 -// CHECK-NEXT: %344 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%344, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb86 loc(#loc12) +// CHECK-NEXT: %344 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%344, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb86 loc(#loc3) // CHECK-NEXT: ^bb86: // 2 preds: ^bb84, ^bb85 -// CHECK-NEXT: %345 = arith.shrui %342, %c224_i256 : i256 loc(#loc12) -// CHECK-NEXT: %346 = arith.shli %345, %c200_i256 : i256 loc(#loc12) -// CHECK-NEXT: %347 = arith.ori %338, %346 : i256 loc(#loc12) -// CHECK-NEXT: %348 = arith.addi %95, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %349 = llvm.inttoptr %348 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %350 = llvm.load %349 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %351 = arith.andi %350, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc12) -// CHECK-NEXT: %352 = arith.ori %351, %347 : i256 loc(#loc12) -// CHECK-NEXT: %353 = llvm.inttoptr %348 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %352, %353 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %354 = arith.addi %92, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb21(%354 : i256) loc(#loc12) +// CHECK-NEXT: %345 = arith.shrui %342, %c224_i256 : i256 loc(#loc3) +// CHECK-NEXT: %346 = arith.shli %345, %c200_i256 : i256 loc(#loc3) +// CHECK-NEXT: %347 = arith.ori %338, %346 : i256 loc(#loc3) +// CHECK-NEXT: %348 = arith.addi %95, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %349 = llvm.inttoptr %348 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %350 = llvm.load %349 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %351 = arith.andi %350, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc3) +// CHECK-NEXT: %352 = arith.ori %351, %347 : i256 loc(#loc3) +// CHECK-NEXT: %353 = llvm.inttoptr %348 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %352, %353 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %354 = arith.addi %92, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb21(%354 : i256) loc(#loc3) // CHECK-NEXT: ^bb87: // pred: ^bb21 -// CHECK-NEXT: %355 = arith.addi %1, %c320_i256 : i256 loc(#loc12) -// CHECK-NEXT: %356 = llvm.inttoptr %355 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %357 = llvm.load %356 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %358 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %359 = arith.subi %358, %1 : i256 loc(#loc12) -// CHECK-NEXT: %360 = arith.subi %359, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %361 = arith.cmpi sge, %357, %360 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %361, ^bb88, ^bb89 loc(#loc12) +// CHECK-NEXT: %355 = arith.addi %1, %c320_i256 : i256 loc(#loc3) +// CHECK-NEXT: %356 = llvm.inttoptr %355 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %357 = llvm.load %356 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %358 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %359 = arith.subi %358, %1 : i256 loc(#loc3) +// CHECK-NEXT: %360 = arith.subi %359, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %361 = arith.cmpi sge, %357, %360 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %361, ^bb88, ^bb89 loc(#loc3) // CHECK-NEXT: ^bb88: // pred: ^bb87 -// CHECK-NEXT: %362 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%362, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb89 loc(#loc12) +// CHECK-NEXT: %362 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%362, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb89 loc(#loc3) // CHECK-NEXT: ^bb89: // 2 preds: ^bb87, ^bb88 -// CHECK-NEXT: %363 = arith.addi %1, %357 : i256 loc(#loc12) -// CHECK-NEXT: %364 = llvm.inttoptr %363 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %365 = llvm.load %364 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %366 = arith.addi %363, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %367 = arith.cmpi ugt, %365, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %367, ^bb90, ^bb91 loc(#loc12) +// CHECK-NEXT: %363 = arith.addi %1, %357 : i256 loc(#loc3) +// CHECK-NEXT: %364 = llvm.inttoptr %363 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %365 = llvm.load %364 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %366 = arith.addi %363, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %367 = arith.cmpi ugt, %365, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %367, ^bb90, ^bb91 loc(#loc3) // CHECK-NEXT: ^bb90: // pred: ^bb89 -// CHECK-NEXT: %368 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%368, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb91 loc(#loc12) +// CHECK-NEXT: %368 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%368, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb91 loc(#loc3) // CHECK-NEXT: ^bb91: // 2 preds: ^bb89, ^bb90 -// CHECK-NEXT: %369 = arith.subi %358, %365 : i256 loc(#loc12) -// CHECK-NEXT: %370 = arith.cmpi sgt, %366, %369 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %370, ^bb92, ^bb93 loc(#loc12) +// CHECK-NEXT: %369 = arith.subi %358, %365 : i256 loc(#loc3) +// CHECK-NEXT: %370 = arith.cmpi sgt, %366, %369 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %370, ^bb92, ^bb93 loc(#loc3) // CHECK-NEXT: ^bb92: // pred: ^bb91 -// CHECK-NEXT: %371 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%371, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb93 loc(#loc12) +// CHECK-NEXT: %371 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%371, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb93 loc(#loc3) // CHECK-NEXT: ^bb93: // 2 preds: ^bb91, ^bb92 -// CHECK-NEXT: %372 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %373 = llvm.load %372 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %374 = arith.shrui %373, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %375 = arith.andi %373, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %376 = arith.cmpi eq, %375, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %377 = arith.andi %374, %c127_i256 : i256 loc(#loc12) -// CHECK-NEXT: %378 = arith.select %376, %377, %374 : i256 loc(#loc12) -// CHECK-NEXT: %379 = arith.cmpi ult, %378, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %380 = arith.extui %379 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %381 = arith.cmpi eq, %375, %380 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %381, ^bb94, ^bb95 loc(#loc12) +// CHECK-NEXT: call @__sol.copy.calldata.storage.string(%366, %365, %c19_i256) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %372 = arith.addi %1, %c352_i256 : i256 loc(#loc3) +// CHECK-NEXT: %373 = llvm.inttoptr %372 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %374 = llvm.load %373 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %375 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %376 = arith.subi %375, %1 : i256 loc(#loc3) +// CHECK-NEXT: %377 = arith.subi %376, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %378 = arith.cmpi sge, %374, %377 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %378, ^bb94, ^bb95 loc(#loc3) // CHECK-NEXT: ^bb94: // pred: ^bb93 -// CHECK-NEXT: %382 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %382 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %383 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c34_i256, %383 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %384 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%384, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb95 loc(#loc12) +// CHECK-NEXT: %379 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%379, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb95 loc(#loc3) // CHECK-NEXT: ^bb95: // 2 preds: ^bb93, ^bb94 -// CHECK-NEXT: %385 = arith.cmpi ugt, %378, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %385, ^bb96, ^bb99 loc(#loc12) +// CHECK-NEXT: %380 = arith.addi %1, %374 : i256 loc(#loc3) +// CHECK-NEXT: %381 = llvm.inttoptr %380 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %382 = llvm.load %381 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %383 = arith.addi %380, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %384 = arith.cmpi ugt, %382, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %384, ^bb96, ^bb97 loc(#loc3) // CHECK-NEXT: ^bb96: // pred: ^bb95 -// CHECK-NEXT: %386 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c19_i256, %386 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %387 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %388 = "llvm.intrcall"(%387, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %389 = arith.addi %365, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %390 = arith.divui %389, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %391 = arith.addi %388, %390 : i256 loc(#loc12) -// CHECK-NEXT: %392 = arith.cmpi ult, %365, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %393 = arith.select %392, %388, %391 : i256 loc(#loc12) -// CHECK-NEXT: %394 = arith.addi %378, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %395 = arith.divui %394, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %396 = arith.addi %388, %395 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb97(%393 : i256) loc(#loc12) -// CHECK-NEXT: ^bb97(%397: i256 loc({{.*}}:59:4)): // 2 preds: ^bb96, ^bb98 -// CHECK-NEXT: %398 = arith.cmpi ult, %397, %396 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %398, ^bb98(%397 : i256), ^bb99 loc(#loc12) -// CHECK-NEXT: ^bb98(%399: i256 loc({{.*}}:59:4)): // pred: ^bb97 -// CHECK-NEXT: %400 = llvm.inttoptr %399 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %400 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %401 = arith.addi %399, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb97(%401 : i256) loc(#loc12) -// CHECK-NEXT: ^bb99: // 2 preds: ^bb95, ^bb97 -// CHECK-NEXT: %402 = arith.cmpi ugt, %365, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %402, ^bb103, ^bb100 loc(#loc12) +// CHECK-NEXT: %385 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%385, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb97 loc(#loc3) +// CHECK-NEXT: ^bb97: // 2 preds: ^bb95, ^bb96 +// CHECK-NEXT: %386 = arith.muli %382, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %387 = arith.subi %375, %386 : i256 loc(#loc3) +// CHECK-NEXT: %388 = arith.cmpi sgt, %383, %387 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %388, ^bb98, ^bb99 loc(#loc3) +// CHECK-NEXT: ^bb98: // pred: ^bb97 +// CHECK-NEXT: %389 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%389, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb99 loc(#loc3) +// CHECK-NEXT: ^bb99: // 2 preds: ^bb97, ^bb98 +// CHECK-NEXT: %390 = arith.cmpi ugt, %382, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %390, ^bb100, ^bb101 loc(#loc3) // CHECK-NEXT: ^bb100: // pred: ^bb99 -// CHECK-NEXT: %403 = arith.cmpi ne, %365, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %403, ^bb102, ^bb101 loc(#loc12) -// CHECK-NEXT: ^bb101: // pred: ^bb100 -// CHECK-NEXT: %404 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %404 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb109 loc(#loc12) -// CHECK-NEXT: ^bb102: // pred: ^bb100 -// CHECK-NEXT: %405 = llvm.inttoptr %366 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %406 = llvm.load %405 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %407 = arith.muli %365, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %408 = arith.subi %c256_i256, %407 : i256 loc(#loc12) -// CHECK-NEXT: %409 = arith.shli %c-1_i256, %408 : i256 loc(#loc12) -// CHECK-NEXT: %410 = arith.andi %406, %409 : i256 loc(#loc12) -// CHECK-NEXT: %411 = arith.muli %365, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %412 = arith.ori %410, %411 : i256 loc(#loc12) -// CHECK-NEXT: %413 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %412, %413 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb109 loc(#loc12) -// CHECK-NEXT: ^bb103: // pred: ^bb99 -// CHECK-NEXT: %414 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c19_i256, %414 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %415 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %416 = "llvm.intrcall"(%415, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %417 = arith.andi %365, %c-32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb104(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb104(%418: i256 loc({{.*}}:59:4)): // 2 preds: ^bb103, ^bb105 -// CHECK-NEXT: %419 = arith.cmpi ult, %418, %417 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %419, ^bb105(%418 : i256), ^bb106 loc(#loc12) -// CHECK-NEXT: ^bb105(%420: i256 loc({{.*}}:59:4)): // pred: ^bb104 -// CHECK-NEXT: %421 = arith.divui %420, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %422 = arith.addi %366, %420 : i256 loc(#loc12) -// CHECK-NEXT: %423 = llvm.inttoptr %422 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %424 = llvm.load %423 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %425 = arith.addi %416, %421 : i256 loc(#loc12) -// CHECK-NEXT: %426 = llvm.inttoptr %425 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %424, %426 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %427 = arith.addi %420, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb104(%427 : i256) loc(#loc12) -// CHECK-NEXT: ^bb106: // pred: ^bb104 -// CHECK-NEXT: %428 = arith.cmpi ult, %417, %365 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %428, ^bb107, ^bb108 loc(#loc12) -// CHECK-NEXT: ^bb107: // pred: ^bb106 -// CHECK-NEXT: %429 = arith.andi %365, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %430 = arith.divui %417, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %431 = arith.addi %366, %417 : i256 loc(#loc12) -// CHECK-NEXT: %432 = llvm.inttoptr %431 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %433 = llvm.load %432 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %434 = arith.muli %429, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %435 = arith.subi %c256_i256, %434 : i256 loc(#loc12) -// CHECK-NEXT: %436 = arith.shli %c-1_i256, %435 : i256 loc(#loc12) -// CHECK-NEXT: %437 = arith.andi %433, %436 : i256 loc(#loc12) -// CHECK-NEXT: %438 = arith.addi %416, %430 : i256 loc(#loc12) -// CHECK-NEXT: %439 = llvm.inttoptr %438 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %437, %439 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb108 loc(#loc12) -// CHECK-NEXT: ^bb108: // 2 preds: ^bb106, ^bb107 -// CHECK-NEXT: %440 = arith.muli %365, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %441 = arith.ori %440, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %442 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %441, %442 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb109 loc(#loc12) -// CHECK-NEXT: ^bb109: // 3 preds: ^bb101, ^bb102, ^bb108 -// CHECK-NEXT: %443 = arith.addi %1, %c352_i256 : i256 loc(#loc12) -// CHECK-NEXT: %444 = llvm.inttoptr %443 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %445 = llvm.load %444 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %446 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %447 = arith.subi %446, %1 : i256 loc(#loc12) -// CHECK-NEXT: %448 = arith.subi %447, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %449 = arith.cmpi sge, %445, %448 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %449, ^bb110, ^bb111 loc(#loc12) -// CHECK-NEXT: ^bb110: // pred: ^bb109 -// CHECK-NEXT: %450 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%450, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb111 loc(#loc12) -// CHECK-NEXT: ^bb111: // 2 preds: ^bb109, ^bb110 -// CHECK-NEXT: %451 = arith.addi %1, %445 : i256 loc(#loc12) -// CHECK-NEXT: %452 = llvm.inttoptr %451 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %453 = llvm.load %452 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %454 = arith.addi %451, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %455 = arith.cmpi ugt, %453, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %455, ^bb112, ^bb113 loc(#loc12) -// CHECK-NEXT: ^bb112: // pred: ^bb111 -// CHECK-NEXT: %456 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%456, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb113 loc(#loc12) -// CHECK-NEXT: ^bb113: // 2 preds: ^bb111, ^bb112 -// CHECK-NEXT: %457 = arith.muli %453, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %458 = arith.subi %446, %457 : i256 loc(#loc12) -// CHECK-NEXT: %459 = arith.cmpi sgt, %454, %458 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %459, ^bb114, ^bb115 loc(#loc12) -// CHECK-NEXT: ^bb114: // pred: ^bb113 -// CHECK-NEXT: %460 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%460, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb115 loc(#loc12) -// CHECK-NEXT: ^bb115: // 2 preds: ^bb113, ^bb114 -// CHECK-NEXT: %461 = arith.cmpi ugt, %453, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %461, ^bb116, ^bb117 loc(#loc12) -// CHECK-NEXT: ^bb116: // pred: ^bb115 -// CHECK-NEXT: %462 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %462 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %463 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %463 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %464 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%464, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb117 loc(#loc12) -// CHECK-NEXT: ^bb117: // 2 preds: ^bb115, ^bb116 -// CHECK-NEXT: %465 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %466 = llvm.load %465 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %467 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %453, %467 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %468 = arith.cmpi ult, %453, %466 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %468, ^bb118, ^bb121 loc(#loc12) -// CHECK-NEXT: ^bb118: // pred: ^bb117 -// CHECK-NEXT: %469 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c20_i256, %469 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %470 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %471 = "llvm.intrcall"(%470, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %472 = arith.addi %471, %453 : i256 loc(#loc12) -// CHECK-NEXT: %473 = arith.addi %471, %466 : i256 loc(#loc12) -// CHECK-NEXT: %474 = arith.subi %473, %472 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb119(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb119(%475: i256 loc({{.*}}:59:4)): // 2 preds: ^bb118, ^bb120 -// CHECK-NEXT: %476 = arith.cmpi ult, %475, %474 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %476, ^bb120(%475 : i256), ^bb121 loc(#loc12) -// CHECK-NEXT: ^bb120(%477: i256 loc({{.*}}:59:4)): // pred: ^bb119 -// CHECK-NEXT: %478 = arith.addi %472, %477 : i256 loc(#loc12) -// CHECK-NEXT: %479 = llvm.inttoptr %478 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %479 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %480 = arith.addi %477, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb119(%480 : i256) loc(#loc12) -// CHECK-NEXT: ^bb121: // 2 preds: ^bb117, ^bb119 -// CHECK-NEXT: %481 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c20_i256, %481 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %482 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %483 = "llvm.intrcall"(%482, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb122(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb122(%484: i256 loc({{.*}}:59:4)): // 2 preds: ^bb121, ^bb123 -// CHECK-NEXT: %485 = arith.cmpi ult, %484, %453 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %485, ^bb123(%484 : i256), ^bb124 loc(#loc12) -// CHECK-NEXT: ^bb123(%486: i256 loc({{.*}}:59:4)): // pred: ^bb122 -// CHECK-NEXT: %487 = arith.muli %486, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %488 = arith.addi %454, %487 : i256 loc(#loc12) -// CHECK-NEXT: %489 = arith.addi %483, %486 : i256 loc(#loc12) -// CHECK-NEXT: %490 = llvm.inttoptr %488 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %491 = llvm.load %490 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %492 = llvm.inttoptr %489 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %491, %492 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %493 = arith.addi %486, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb122(%493 : i256) loc(#loc12) -// CHECK-NEXT: ^bb124: // pred: ^bb122 -// CHECK-NEXT: %494 = arith.addi %1, %c384_i256 : i256 loc(#loc12) -// CHECK-NEXT: %495 = llvm.inttoptr %494 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %496 = llvm.load %495 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %497 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %496, %497 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %498 = arith.addi %1, %c416_i256 : i256 loc(#loc12) -// CHECK-NEXT: %499 = llvm.inttoptr %498 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %500 = llvm.load %499 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %501 = arith.andi %500, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc12) -// CHECK-NEXT: %502 = arith.cmpi ne, %500, %501 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %502, ^bb125, ^bb126 loc(#loc12) +// CHECK-NEXT: %391 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %391 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %392 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %392 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %393 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%393, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb101 loc(#loc3) +// CHECK-NEXT: ^bb101: // 2 preds: ^bb99, ^bb100 +// CHECK-NEXT: %394 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %395 = llvm.load %394 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %396 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %382, %396 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %397 = arith.cmpi ult, %382, %395 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %397, ^bb102, ^bb105 loc(#loc3) +// CHECK-NEXT: ^bb102: // pred: ^bb101 +// CHECK-NEXT: %398 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c20_i256, %398 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %399 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %400 = "llvm.intrcall"(%399, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %401 = arith.addi %400, %382 : i256 loc(#loc3) +// CHECK-NEXT: %402 = arith.addi %400, %395 : i256 loc(#loc3) +// CHECK-NEXT: %403 = arith.subi %402, %401 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb103(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb103(%404: i256 loc({{.*}}:59:4)): // 2 preds: ^bb102, ^bb104 +// CHECK-NEXT: %405 = arith.cmpi ult, %404, %403 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %405, ^bb104(%404 : i256), ^bb105 loc(#loc3) +// CHECK-NEXT: ^bb104(%406: i256 loc({{.*}}:59:4)): // pred: ^bb103 +// CHECK-NEXT: %407 = arith.addi %401, %406 : i256 loc(#loc3) +// CHECK-NEXT: %408 = llvm.inttoptr %407 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %408 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %409 = arith.addi %406, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb103(%409 : i256) loc(#loc3) +// CHECK-NEXT: ^bb105: // 2 preds: ^bb101, ^bb103 +// CHECK-NEXT: %410 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c20_i256, %410 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %411 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %412 = "llvm.intrcall"(%411, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb106(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb106(%413: i256 loc({{.*}}:59:4)): // 2 preds: ^bb105, ^bb107 +// CHECK-NEXT: %414 = arith.cmpi ult, %413, %382 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %414, ^bb107(%413 : i256), ^bb108 loc(#loc3) +// CHECK-NEXT: ^bb107(%415: i256 loc({{.*}}:59:4)): // pred: ^bb106 +// CHECK-NEXT: %416 = arith.muli %415, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %417 = arith.addi %383, %416 : i256 loc(#loc3) +// CHECK-NEXT: %418 = arith.addi %412, %415 : i256 loc(#loc3) +// CHECK-NEXT: %419 = llvm.inttoptr %417 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %420 = llvm.load %419 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %421 = llvm.inttoptr %418 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %420, %421 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %422 = arith.addi %415, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb106(%422 : i256) loc(#loc3) +// CHECK-NEXT: ^bb108: // pred: ^bb106 +// CHECK-NEXT: %423 = arith.addi %1, %c384_i256 : i256 loc(#loc3) +// CHECK-NEXT: %424 = llvm.inttoptr %423 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %425 = llvm.load %424 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %426 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %425, %426 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %427 = arith.addi %1, %c416_i256 : i256 loc(#loc3) +// CHECK-NEXT: %428 = llvm.inttoptr %427 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %429 = llvm.load %428 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %430 = arith.andi %429, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc3) +// CHECK-NEXT: %431 = arith.cmpi ne, %429, %430 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %431, ^bb109, ^bb110 loc(#loc3) +// CHECK-NEXT: ^bb109: // pred: ^bb108 +// CHECK-NEXT: %432 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%432, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb110 loc(#loc3) +// CHECK-NEXT: ^bb110: // 2 preds: ^bb108, ^bb109 +// CHECK-NEXT: %433 = arith.addi %1, %c448_i256 : i256 loc(#loc3) +// CHECK-NEXT: %434 = llvm.inttoptr %433 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %435 = llvm.load %434 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %436 = arith.cmpi ne, %435, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %437 = arith.extui %436 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %438 = arith.cmpi ne, %435, %437 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %438, ^bb111, ^bb112 loc(#loc3) +// CHECK-NEXT: ^bb111: // pred: ^bb110 +// CHECK-NEXT: %439 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%439, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb112 loc(#loc3) +// CHECK-NEXT: ^bb112: // 2 preds: ^bb110, ^bb111 +// CHECK-NEXT: %440 = arith.shli %437, %c224_i256 : i256 loc(#loc3) +// CHECK-NEXT: %441 = arith.ori %430, %440 : i256 loc(#loc3) +// CHECK-NEXT: %442 = arith.addi %1, %c480_i256 : i256 loc(#loc3) +// CHECK-NEXT: %443 = llvm.inttoptr %442 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %444 = llvm.load %443 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %445 = arith.cmpi ugt, %444, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %445, ^bb113, ^bb114 loc(#loc3) +// CHECK-NEXT: ^bb113: // pred: ^bb112 +// CHECK-NEXT: %446 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%446, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb114 loc(#loc3) +// CHECK-NEXT: ^bb114: // 2 preds: ^bb112, ^bb113 +// CHECK-NEXT: %447 = arith.shli %444, %c232_i256 : i256 loc(#loc3) +// CHECK-NEXT: %448 = arith.ori %441, %447 : i256 loc(#loc3) +// CHECK-NEXT: %449 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %450 = llvm.load %449 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %451 = arith.andi %450, %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 : i256 loc(#loc3) +// CHECK-NEXT: %452 = arith.ori %451, %448 : i256 loc(#loc3) +// CHECK-NEXT: %453 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %452, %453 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %454 = arith.addi %1, %c512_i256 : i256 loc(#loc3) +// CHECK-NEXT: %455 = llvm.inttoptr %454 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %456 = llvm.load %455 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %457 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %458 = arith.subi %457, %1 : i256 loc(#loc3) +// CHECK-NEXT: %459 = arith.subi %458, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %460 = arith.cmpi sge, %456, %459 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %460, ^bb115, ^bb116 loc(#loc3) +// CHECK-NEXT: ^bb115: // pred: ^bb114 +// CHECK-NEXT: %461 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%461, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb116 loc(#loc3) +// CHECK-NEXT: ^bb116: // 2 preds: ^bb114, ^bb115 +// CHECK-NEXT: %462 = arith.addi %1, %456 : i256 loc(#loc3) +// CHECK-NEXT: %463 = llvm.inttoptr %462 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %464 = llvm.load %463 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %465 = "llvm.intrcall"(%c8_i256, %464) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %466 = arith.cmpi ne, %464, %465 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %466, ^bb117, ^bb118 loc(#loc3) +// CHECK-NEXT: ^bb117: // pred: ^bb116 +// CHECK-NEXT: %467 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%467, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb118 loc(#loc3) +// CHECK-NEXT: ^bb118: // 2 preds: ^bb116, ^bb117 +// CHECK-NEXT: %468 = arith.andi %465, %c4722366482869645213695_i256 : i256 loc(#loc3) +// CHECK-NEXT: %469 = arith.addi %462, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %470 = llvm.inttoptr %469 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %471 = llvm.load %470 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %472 = arith.andi %471, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %473 = arith.cmpi ne, %471, %472 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %473, ^bb119, ^bb120 loc(#loc3) +// CHECK-NEXT: ^bb119: // pred: ^bb118 +// CHECK-NEXT: %474 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%474, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb120 loc(#loc3) +// CHECK-NEXT: ^bb120: // 2 preds: ^bb118, ^bb119 +// CHECK-NEXT: %475 = arith.shli %472, %c72_i256 : i256 loc(#loc3) +// CHECK-NEXT: %476 = arith.ori %468, %475 : i256 loc(#loc3) +// CHECK-NEXT: %477 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %478 = llvm.load %477 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %479 = arith.andi %478, %c-1208925819614629174706176_i256 : i256 loc(#loc3) +// CHECK-NEXT: %480 = arith.ori %479, %476 : i256 loc(#loc3) +// CHECK-NEXT: %481 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %480, %481 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %482 = arith.addi %462, %c64_i256 : i256 loc(#loc3) +// CHECK-NEXT: %483 = llvm.inttoptr %482 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %484 = llvm.load %483 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %485 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %486 = arith.subi %485, %462 : i256 loc(#loc3) +// CHECK-NEXT: %487 = arith.subi %486, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %488 = arith.cmpi sge, %484, %487 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %488, ^bb121, ^bb122 loc(#loc3) +// CHECK-NEXT: ^bb121: // pred: ^bb120 +// CHECK-NEXT: %489 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%489, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb122 loc(#loc3) +// CHECK-NEXT: ^bb122: // 2 preds: ^bb120, ^bb121 +// CHECK-NEXT: %490 = arith.addi %462, %484 : i256 loc(#loc3) +// CHECK-NEXT: %491 = llvm.inttoptr %490 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %492 = llvm.load %491 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %493 = arith.addi %490, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %494 = arith.cmpi ugt, %492, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %494, ^bb123, ^bb124 loc(#loc3) +// CHECK-NEXT: ^bb123: // pred: ^bb122 +// CHECK-NEXT: %495 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%495, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb124 loc(#loc3) +// CHECK-NEXT: ^bb124: // 2 preds: ^bb122, ^bb123 +// CHECK-NEXT: %496 = arith.muli %492, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %497 = arith.subi %485, %496 : i256 loc(#loc3) +// CHECK-NEXT: %498 = arith.cmpi sgt, %493, %497 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %498, ^bb125, ^bb126 loc(#loc3) // CHECK-NEXT: ^bb125: // pred: ^bb124 -// CHECK-NEXT: %503 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%503, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb126 loc(#loc12) +// CHECK-NEXT: %499 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%499, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb126 loc(#loc3) // CHECK-NEXT: ^bb126: // 2 preds: ^bb124, ^bb125 -// CHECK-NEXT: %504 = arith.addi %1, %c448_i256 : i256 loc(#loc12) -// CHECK-NEXT: %505 = llvm.inttoptr %504 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %506 = llvm.load %505 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %507 = arith.cmpi ne, %506, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %508 = arith.extui %507 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %509 = arith.cmpi ne, %506, %508 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %509, ^bb127, ^bb128 loc(#loc12) +// CHECK-NEXT: %500 = arith.cmpi ugt, %492, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %500, ^bb127, ^bb128 loc(#loc3) // CHECK-NEXT: ^bb127: // pred: ^bb126 -// CHECK-NEXT: %510 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%510, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb128 loc(#loc12) +// CHECK-NEXT: %501 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %501 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %502 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %502 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %503 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%503, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb128 loc(#loc3) // CHECK-NEXT: ^bb128: // 2 preds: ^bb126, ^bb127 -// CHECK-NEXT: %511 = arith.shli %508, %c224_i256 : i256 loc(#loc12) -// CHECK-NEXT: %512 = arith.ori %501, %511 : i256 loc(#loc12) -// CHECK-NEXT: %513 = arith.addi %1, %c480_i256 : i256 loc(#loc12) -// CHECK-NEXT: %514 = llvm.inttoptr %513 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %515 = llvm.load %514 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %516 = arith.cmpi ugt, %515, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %516, ^bb129, ^bb130 loc(#loc12) +// CHECK-NEXT: %504 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %505 = llvm.load %504 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %506 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %492, %506 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %507 = arith.cmpi ult, %492, %505 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %507, ^bb129, ^bb136 loc(#loc3) // CHECK-NEXT: ^bb129: // pred: ^bb128 -// CHECK-NEXT: %517 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%517, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb130 loc(#loc12) -// CHECK-NEXT: ^bb130: // 2 preds: ^bb128, ^bb129 -// CHECK-NEXT: %518 = arith.shli %515, %c232_i256 : i256 loc(#loc12) -// CHECK-NEXT: %519 = arith.ori %512, %518 : i256 loc(#loc12) -// CHECK-NEXT: %520 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %521 = llvm.load %520 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %522 = arith.andi %521, %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 : i256 loc(#loc12) -// CHECK-NEXT: %523 = arith.ori %522, %519 : i256 loc(#loc12) -// CHECK-NEXT: %524 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %523, %524 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %525 = arith.addi %1, %c512_i256 : i256 loc(#loc12) -// CHECK-NEXT: %526 = llvm.inttoptr %525 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %527 = llvm.load %526 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %528 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %529 = arith.subi %528, %1 : i256 loc(#loc12) -// CHECK-NEXT: %530 = arith.subi %529, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %531 = arith.cmpi sge, %527, %530 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %531, ^bb131, ^bb132 loc(#loc12) -// CHECK-NEXT: ^bb131: // pred: ^bb130 -// CHECK-NEXT: %532 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%532, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb132 loc(#loc12) -// CHECK-NEXT: ^bb132: // 2 preds: ^bb130, ^bb131 -// CHECK-NEXT: %533 = arith.addi %1, %527 : i256 loc(#loc12) -// CHECK-NEXT: %534 = llvm.inttoptr %533 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %535 = llvm.load %534 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %536 = "llvm.intrcall"(%c8_i256, %535) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %537 = arith.cmpi ne, %535, %536 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %537, ^bb133, ^bb134 loc(#loc12) -// CHECK-NEXT: ^bb133: // pred: ^bb132 -// CHECK-NEXT: %538 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%538, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb134 loc(#loc12) -// CHECK-NEXT: ^bb134: // 2 preds: ^bb132, ^bb133 -// CHECK-NEXT: %539 = arith.andi %536, %c4722366482869645213695_i256 : i256 loc(#loc12) -// CHECK-NEXT: %540 = arith.addi %533, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %541 = llvm.inttoptr %540 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %542 = llvm.load %541 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %543 = arith.andi %542, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %544 = arith.cmpi ne, %542, %543 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %544, ^bb135, ^bb136 loc(#loc12) -// CHECK-NEXT: ^bb135: // pred: ^bb134 -// CHECK-NEXT: %545 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%545, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb136 loc(#loc12) -// CHECK-NEXT: ^bb136: // 2 preds: ^bb134, ^bb135 -// CHECK-NEXT: %546 = arith.shli %543, %c72_i256 : i256 loc(#loc12) -// CHECK-NEXT: %547 = arith.ori %539, %546 : i256 loc(#loc12) -// CHECK-NEXT: %548 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %549 = llvm.load %548 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %550 = arith.andi %549, %c-1208925819614629174706176_i256 : i256 loc(#loc12) -// CHECK-NEXT: %551 = arith.ori %550, %547 : i256 loc(#loc12) -// CHECK-NEXT: %552 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %551, %552 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %553 = arith.addi %533, %c64_i256 : i256 loc(#loc12) -// CHECK-NEXT: %554 = llvm.inttoptr %553 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %555 = llvm.load %554 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %556 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %557 = arith.subi %556, %533 : i256 loc(#loc12) -// CHECK-NEXT: %558 = arith.subi %557, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %559 = arith.cmpi sge, %555, %558 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %559, ^bb137, ^bb138 loc(#loc12) -// CHECK-NEXT: ^bb137: // pred: ^bb136 -// CHECK-NEXT: %560 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%560, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb138 loc(#loc12) -// CHECK-NEXT: ^bb138: // 2 preds: ^bb136, ^bb137 -// CHECK-NEXT: %561 = arith.addi %533, %555 : i256 loc(#loc12) -// CHECK-NEXT: %562 = llvm.inttoptr %561 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %563 = llvm.load %562 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %564 = arith.addi %561, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %565 = arith.cmpi ugt, %563, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %565, ^bb139, ^bb140 loc(#loc12) +// CHECK-NEXT: %508 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c24_i256, %508 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %509 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %510 = "llvm.intrcall"(%509, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %511 = arith.addi %510, %492 : i256 loc(#loc3) +// CHECK-NEXT: %512 = arith.addi %510, %505 : i256 loc(#loc3) +// CHECK-NEXT: %513 = arith.subi %512, %511 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb130(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb130(%514: i256 loc({{.*}}:59:4)): // 2 preds: ^bb129, ^bb135 +// CHECK-NEXT: %515 = arith.cmpi ult, %514, %513 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %515, ^bb131(%514 : i256), ^bb136 loc(#loc3) +// CHECK-NEXT: ^bb131(%516: i256 loc({{.*}}:59:4)): // pred: ^bb130 +// CHECK-NEXT: %517 = arith.addi %511, %516 : i256 loc(#loc3) +// CHECK-NEXT: %518 = llvm.inttoptr %517 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %519 = llvm.load %518 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %520 = llvm.inttoptr %517 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %520 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %521 = arith.cmpi ugt, %519, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %521, ^bb132, ^bb135(%516 : i256) loc(#loc3) +// CHECK-NEXT: ^bb132: // pred: ^bb131 +// CHECK-NEXT: %522 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %517, %522 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %523 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %524 = "llvm.intrcall"(%523, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %525 = arith.addi %519, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %526 = arith.divui %525, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb133(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb133(%527: i256 loc({{.*}}:59:4)): // 2 preds: ^bb132, ^bb134 +// CHECK-NEXT: %528 = arith.cmpi ult, %527, %526 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %528, ^bb134(%527 : i256), ^bb135(%516 : i256) loc(#loc3) +// CHECK-NEXT: ^bb134(%529: i256 loc({{.*}}:59:4)): // pred: ^bb133 +// CHECK-NEXT: %530 = arith.addi %524, %529 : i256 loc(#loc3) +// CHECK-NEXT: %531 = llvm.inttoptr %530 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %531 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %532 = arith.addi %529, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb133(%532 : i256) loc(#loc3) +// CHECK-NEXT: ^bb135(%533: i256 loc({{.*}}:59:4)): // 2 preds: ^bb131, ^bb133 +// CHECK-NEXT: %534 = arith.addi %533, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb130(%534 : i256) loc(#loc3) +// CHECK-NEXT: ^bb136: // 2 preds: ^bb128, ^bb130 +// CHECK-NEXT: %535 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c24_i256, %535 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %536 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %537 = "llvm.intrcall"(%536, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb137(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb137(%538: i256 loc({{.*}}:59:4)): // 2 preds: ^bb136, ^bb166 +// CHECK-NEXT: %539 = arith.cmpi ult, %538, %492 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %539, ^bb138(%538 : i256), ^bb167 loc(#loc3) +// CHECK-NEXT: ^bb138(%540: i256 loc({{.*}}:59:4)): // pred: ^bb137 +// CHECK-NEXT: %541 = arith.muli %540, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %542 = arith.addi %493, %541 : i256 loc(#loc3) +// CHECK-NEXT: %543 = arith.addi %537, %540 : i256 loc(#loc3) +// CHECK-NEXT: %544 = llvm.inttoptr %542 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %545 = llvm.load %544 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %546 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %547 = arith.subi %546, %493 : i256 loc(#loc3) +// CHECK-NEXT: %548 = arith.subi %547, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %549 = arith.cmpi sge, %545, %548 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %549, ^bb139, ^bb140 loc(#loc3) // CHECK-NEXT: ^bb139: // pred: ^bb138 -// CHECK-NEXT: %566 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%566, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb140 loc(#loc12) +// CHECK-NEXT: %550 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%550, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb140 loc(#loc3) // CHECK-NEXT: ^bb140: // 2 preds: ^bb138, ^bb139 -// CHECK-NEXT: %567 = arith.muli %563, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %568 = arith.subi %556, %567 : i256 loc(#loc12) -// CHECK-NEXT: %569 = arith.cmpi sgt, %564, %568 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %569, ^bb141, ^bb142 loc(#loc12) +// CHECK-NEXT: %551 = arith.addi %493, %545 : i256 loc(#loc3) +// CHECK-NEXT: %552 = llvm.inttoptr %551 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %553 = llvm.load %552 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %554 = arith.addi %551, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %555 = arith.cmpi ugt, %553, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %555, ^bb141, ^bb142 loc(#loc3) // CHECK-NEXT: ^bb141: // pred: ^bb140 -// CHECK-NEXT: %570 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%570, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb142 loc(#loc12) +// CHECK-NEXT: %556 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%556, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb142 loc(#loc3) // CHECK-NEXT: ^bb142: // 2 preds: ^bb140, ^bb141 -// CHECK-NEXT: %571 = arith.cmpi ugt, %563, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %571, ^bb143, ^bb144 loc(#loc12) +// CHECK-NEXT: %557 = arith.muli %553, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %558 = arith.subi %546, %557 : i256 loc(#loc3) +// CHECK-NEXT: %559 = arith.cmpi sgt, %554, %558 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %559, ^bb143, ^bb144 loc(#loc3) // CHECK-NEXT: ^bb143: // pred: ^bb142 -// CHECK-NEXT: %572 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %572 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %573 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %573 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %574 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%574, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb144 loc(#loc12) +// CHECK-NEXT: %560 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%560, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb144 loc(#loc3) // CHECK-NEXT: ^bb144: // 2 preds: ^bb142, ^bb143 -// CHECK-NEXT: %575 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %576 = llvm.load %575 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %577 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %563, %577 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %578 = arith.cmpi ult, %563, %576 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %578, ^bb145, ^bb152 loc(#loc12) +// CHECK-NEXT: %561 = arith.cmpi ugt, %553, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %561, ^bb145, ^bb146 loc(#loc3) // CHECK-NEXT: ^bb145: // pred: ^bb144 -// CHECK-NEXT: %579 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c24_i256, %579 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %580 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %581 = "llvm.intrcall"(%580, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %582 = arith.addi %581, %563 : i256 loc(#loc12) -// CHECK-NEXT: %583 = arith.addi %581, %576 : i256 loc(#loc12) -// CHECK-NEXT: %584 = arith.subi %583, %582 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb146(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb146(%585: i256 loc({{.*}}:59:4)): // 2 preds: ^bb145, ^bb151 -// CHECK-NEXT: %586 = arith.cmpi ult, %585, %584 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %586, ^bb147(%585 : i256), ^bb152 loc(#loc12) -// CHECK-NEXT: ^bb147(%587: i256 loc({{.*}}:59:4)): // pred: ^bb146 -// CHECK-NEXT: %588 = arith.addi %582, %587 : i256 loc(#loc12) -// CHECK-NEXT: %589 = llvm.inttoptr %588 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %590 = llvm.load %589 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %591 = llvm.inttoptr %588 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %591 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %592 = arith.cmpi ugt, %590, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %592, ^bb148, ^bb151(%587 : i256) loc(#loc12) +// CHECK-NEXT: %562 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %562 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %563 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %563 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %564 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%564, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb146 loc(#loc3) +// CHECK-NEXT: ^bb146: // 2 preds: ^bb144, ^bb145 +// CHECK-NEXT: %565 = llvm.inttoptr %543 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %566 = llvm.load %565 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %567 = llvm.inttoptr %543 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %553, %567 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %568 = arith.cmpi ult, %553, %566 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %568, ^bb147, ^bb152 loc(#loc3) +// CHECK-NEXT: ^bb147: // pred: ^bb146 +// CHECK-NEXT: %569 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %543, %569 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %570 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %571 = "llvm.intrcall"(%570, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %572 = arith.addi %553, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %573 = arith.divui %572, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %574 = arith.addi %571, %573 : i256 loc(#loc3) +// CHECK-NEXT: %575 = arith.remui %553, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %576 = arith.cmpi ne, %575, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %576, ^bb148, ^bb149 loc(#loc3) // CHECK-NEXT: ^bb148: // pred: ^bb147 -// CHECK-NEXT: %593 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %588, %593 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %594 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %595 = "llvm.intrcall"(%594, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %596 = arith.addi %590, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %597 = arith.divui %596, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb149(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb149(%598: i256 loc({{.*}}:59:4)): // 2 preds: ^bb148, ^bb150 -// CHECK-NEXT: %599 = arith.cmpi ult, %598, %597 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %599, ^bb150(%598 : i256), ^bb151(%587 : i256) loc(#loc12) -// CHECK-NEXT: ^bb150(%600: i256 loc({{.*}}:59:4)): // pred: ^bb149 -// CHECK-NEXT: %601 = arith.addi %595, %600 : i256 loc(#loc12) -// CHECK-NEXT: %602 = llvm.inttoptr %601 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %602 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %603 = arith.addi %600, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb149(%603 : i256) loc(#loc12) -// CHECK-NEXT: ^bb151(%604: i256 loc({{.*}}:59:4)): // 2 preds: ^bb147, ^bb149 -// CHECK-NEXT: %605 = arith.addi %604, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb146(%605 : i256) loc(#loc12) -// CHECK-NEXT: ^bb152: // 2 preds: ^bb144, ^bb146 -// CHECK-NEXT: %606 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c24_i256, %606 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %607 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %608 = "llvm.intrcall"(%607, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb153(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb153(%609: i256 loc({{.*}}:59:4)): // 2 preds: ^bb152, ^bb182 -// CHECK-NEXT: %610 = arith.cmpi ult, %609, %563 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %610, ^bb154(%609 : i256), ^bb183 loc(#loc12) -// CHECK-NEXT: ^bb154(%611: i256 loc({{.*}}:59:4)): // pred: ^bb153 -// CHECK-NEXT: %612 = arith.muli %611, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %613 = arith.addi %564, %612 : i256 loc(#loc12) -// CHECK-NEXT: %614 = arith.addi %608, %611 : i256 loc(#loc12) -// CHECK-NEXT: %615 = llvm.inttoptr %613 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %616 = llvm.load %615 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %617 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %618 = arith.subi %617, %564 : i256 loc(#loc12) -// CHECK-NEXT: %619 = arith.subi %618, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %620 = arith.cmpi sge, %616, %619 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %620, ^bb155, ^bb156 loc(#loc12) -// CHECK-NEXT: ^bb155: // pred: ^bb154 -// CHECK-NEXT: %621 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%621, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb156 loc(#loc12) -// CHECK-NEXT: ^bb156: // 2 preds: ^bb154, ^bb155 -// CHECK-NEXT: %622 = arith.addi %564, %616 : i256 loc(#loc12) -// CHECK-NEXT: %623 = llvm.inttoptr %622 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %624 = llvm.load %623 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %625 = arith.addi %622, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %626 = arith.cmpi ugt, %624, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %626, ^bb157, ^bb158 loc(#loc12) +// CHECK-NEXT: %577 = arith.muli %575, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %578 = arith.subi %c256_i256, %577 : i256 loc(#loc3) +// CHECK-NEXT: %579 = arith.shrui %c-1_i256, %578 : i256 loc(#loc3) +// CHECK-NEXT: %580 = arith.subi %574, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %581 = llvm.inttoptr %580 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %582 = llvm.load %581 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %583 = arith.andi %582, %579 : i256 loc(#loc3) +// CHECK-NEXT: %584 = llvm.inttoptr %580 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %583, %584 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb149 loc(#loc3) +// CHECK-NEXT: ^bb149: // 2 preds: ^bb147, ^bb148 +// CHECK-NEXT: %585 = arith.addi %566, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %586 = arith.divui %585, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %587 = arith.addi %571, %586 : i256 loc(#loc3) +// CHECK-NEXT: %588 = arith.subi %587, %574 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb150(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb150(%589: i256 loc({{.*}}:59:4)): // 2 preds: ^bb149, ^bb151 +// CHECK-NEXT: %590 = arith.cmpi ult, %589, %588 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %590, ^bb151(%589 : i256), ^bb152 loc(#loc3) +// CHECK-NEXT: ^bb151(%591: i256 loc({{.*}}:59:4)): // pred: ^bb150 +// CHECK-NEXT: %592 = arith.addi %574, %591 : i256 loc(#loc3) +// CHECK-NEXT: %593 = llvm.inttoptr %592 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %593 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %594 = arith.addi %591, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb150(%594 : i256) loc(#loc3) +// CHECK-NEXT: ^bb152: // 2 preds: ^bb146, ^bb150 +// CHECK-NEXT: %595 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %543, %595 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %596 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %597 = "llvm.intrcall"(%596, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %598 = arith.cmpi uge, %553, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %599 = arith.subi %553, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %600 = arith.select %598, %599, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb153(%c0_i256, %554, %597, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb153(%601: i256 loc({{.*}}:59:4), %602: i256 loc({{.*}}:59:4), %603: i256 loc({{.*}}:59:4), %604: i256 loc({{.*}}:59:4)): // 2 preds: ^bb152, ^bb159 +// CHECK-NEXT: %605 = arith.cmpi ult, %601, %600 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %605, ^bb154(%601, %602, %603, %604 : i256, i256, i256, i256), ^bb160(%602, %603, %604 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb154(%606: i256 loc({{.*}}:59:4), %607: i256 loc({{.*}}:59:4), %608: i256 loc({{.*}}:59:4), %609: i256 loc({{.*}}:59:4)): // pred: ^bb153 +// CHECK-NEXT: cf.br ^bb155(%c0_i256, %607, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb155(%610: i256 loc({{.*}}:59:4), %611: i256 loc({{.*}}:59:4), %612: i256 loc({{.*}}:59:4), %613: i256 loc({{.*}}:59:4)): // 2 preds: ^bb154, ^bb158 +// CHECK-NEXT: %614 = arith.cmpi ult, %610, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %614, ^bb156(%610, %611, %612, %613 : i256, i256, i256, i256), ^bb159(%611, %613 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb156(%615: i256 loc({{.*}}:59:4), %616: i256 loc({{.*}}:59:4), %617: i256 loc({{.*}}:59:4), %618: i256 loc({{.*}}:59:4)): // pred: ^bb155 +// CHECK-NEXT: %619 = llvm.inttoptr %616 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %620 = llvm.load %619 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %621 = arith.cmpi ne, %620, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %622 = arith.extui %621 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %623 = arith.cmpi ne, %620, %622 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %623, ^bb157, ^bb158 loc(#loc3) // CHECK-NEXT: ^bb157: // pred: ^bb156 -// CHECK-NEXT: %627 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%627, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb158 loc(#loc12) +// CHECK-NEXT: %624 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%624, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb158 loc(#loc3) // CHECK-NEXT: ^bb158: // 2 preds: ^bb156, ^bb157 -// CHECK-NEXT: %628 = arith.muli %624, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %629 = arith.subi %617, %628 : i256 loc(#loc12) -// CHECK-NEXT: %630 = arith.cmpi sgt, %625, %629 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %630, ^bb159, ^bb160 loc(#loc12) -// CHECK-NEXT: ^bb159: // pred: ^bb158 -// CHECK-NEXT: %631 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%631, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb160 loc(#loc12) -// CHECK-NEXT: ^bb160: // 2 preds: ^bb158, ^bb159 -// CHECK-NEXT: %632 = arith.cmpi ugt, %624, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %632, ^bb161, ^bb162 loc(#loc12) -// CHECK-NEXT: ^bb161: // pred: ^bb160 -// CHECK-NEXT: %633 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %633 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %634 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %634 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %635 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%635, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb162 loc(#loc12) -// CHECK-NEXT: ^bb162: // 2 preds: ^bb160, ^bb161 -// CHECK-NEXT: %636 = llvm.inttoptr %614 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %637 = llvm.load %636 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %638 = llvm.inttoptr %614 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %624, %638 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %639 = arith.cmpi ult, %624, %637 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %639, ^bb163, ^bb168 loc(#loc12) +// CHECK-NEXT: %625 = arith.andi %622, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %626 = arith.shli %625, %617 : i256 loc(#loc3) +// CHECK-NEXT: %627 = arith.ori %618, %626 : i256 loc(#loc3) +// CHECK-NEXT: %628 = arith.addi %616, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %629 = arith.addi %617, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %630 = arith.addi %615, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb155(%630, %628, %629, %627 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb159(%631: i256 loc({{.*}}:59:4), %632: i256 loc({{.*}}:59:4)): // pred: ^bb155 +// CHECK-NEXT: %633 = llvm.inttoptr %608 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %632, %633 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %634 = arith.addi %608, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %635 = arith.addi %609, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %636 = arith.addi %606, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb153(%636, %631, %634, %635 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb160(%637: i256 loc({{.*}}:59:4), %638: i256 loc({{.*}}:59:4), %639: i256 loc({{.*}}:59:4)): // pred: ^bb153 +// CHECK-NEXT: %640 = arith.cmpi ult, %639, %553 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %640, ^bb161(%639, %637, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb166(%540 : i256) loc(#loc3) +// CHECK-NEXT: ^bb161(%641: i256 loc({{.*}}:59:4), %642: i256 loc({{.*}}:59:4), %643: i256 loc({{.*}}:59:4), %644: i256 loc({{.*}}:59:4)): // 2 preds: ^bb160, ^bb164 +// CHECK-NEXT: %645 = arith.cmpi ult, %641, %553 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %645, ^bb162(%641, %642, %643, %644 : i256, i256, i256, i256), ^bb165(%644 : i256) loc(#loc3) +// CHECK-NEXT: ^bb162(%646: i256 loc({{.*}}:59:4), %647: i256 loc({{.*}}:59:4), %648: i256 loc({{.*}}:59:4), %649: i256 loc({{.*}}:59:4)): // pred: ^bb161 +// CHECK-NEXT: %650 = llvm.inttoptr %647 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %651 = llvm.load %650 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %652 = arith.cmpi ne, %651, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %653 = arith.extui %652 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %654 = arith.cmpi ne, %651, %653 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %654, ^bb163, ^bb164 loc(#loc3) // CHECK-NEXT: ^bb163: // pred: ^bb162 -// CHECK-NEXT: %640 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %614, %640 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %641 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %642 = "llvm.intrcall"(%641, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %643 = arith.addi %624, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %644 = arith.divui %643, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %645 = arith.addi %642, %644 : i256 loc(#loc12) -// CHECK-NEXT: %646 = arith.remui %624, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %647 = arith.cmpi ne, %646, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %647, ^bb164, ^bb165 loc(#loc12) -// CHECK-NEXT: ^bb164: // pred: ^bb163 -// CHECK-NEXT: %648 = arith.muli %646, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %649 = arith.subi %c256_i256, %648 : i256 loc(#loc12) -// CHECK-NEXT: %650 = arith.shrui %c-1_i256, %649 : i256 loc(#loc12) -// CHECK-NEXT: %651 = arith.subi %645, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %652 = llvm.inttoptr %651 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %653 = llvm.load %652 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %654 = arith.andi %653, %650 : i256 loc(#loc12) -// CHECK-NEXT: %655 = llvm.inttoptr %651 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %654, %655 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb165 loc(#loc12) -// CHECK-NEXT: ^bb165: // 2 preds: ^bb163, ^bb164 -// CHECK-NEXT: %656 = arith.addi %637, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %657 = arith.divui %656, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %658 = arith.addi %642, %657 : i256 loc(#loc12) -// CHECK-NEXT: %659 = arith.subi %658, %645 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb166(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb166(%660: i256 loc({{.*}}:59:4)): // 2 preds: ^bb165, ^bb167 -// CHECK-NEXT: %661 = arith.cmpi ult, %660, %659 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %661, ^bb167(%660 : i256), ^bb168 loc(#loc12) -// CHECK-NEXT: ^bb167(%662: i256 loc({{.*}}:59:4)): // pred: ^bb166 -// CHECK-NEXT: %663 = arith.addi %645, %662 : i256 loc(#loc12) -// CHECK-NEXT: %664 = llvm.inttoptr %663 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %664 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %665 = arith.addi %662, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb166(%665 : i256) loc(#loc12) -// CHECK-NEXT: ^bb168: // 2 preds: ^bb162, ^bb166 -// CHECK-NEXT: %666 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %614, %666 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %667 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %668 = "llvm.intrcall"(%667, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %669 = arith.cmpi uge, %624, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %670 = arith.subi %624, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %671 = arith.select %669, %670, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb169(%c0_i256, %625, %668, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb169(%672: i256 loc({{.*}}:59:4), %673: i256 loc({{.*}}:59:4), %674: i256 loc({{.*}}:59:4), %675: i256 loc({{.*}}:59:4)): // 2 preds: ^bb168, ^bb175 -// CHECK-NEXT: %676 = arith.cmpi ult, %672, %671 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %676, ^bb170(%672, %673, %674, %675 : i256, i256, i256, i256), ^bb176(%673, %674, %675 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb170(%677: i256 loc({{.*}}:59:4), %678: i256 loc({{.*}}:59:4), %679: i256 loc({{.*}}:59:4), %680: i256 loc({{.*}}:59:4)): // pred: ^bb169 -// CHECK-NEXT: cf.br ^bb171(%c0_i256, %678, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb171(%681: i256 loc({{.*}}:59:4), %682: i256 loc({{.*}}:59:4), %683: i256 loc({{.*}}:59:4), %684: i256 loc({{.*}}:59:4)): // 2 preds: ^bb170, ^bb174 -// CHECK-NEXT: %685 = arith.cmpi ult, %681, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %685, ^bb172(%681, %682, %683, %684 : i256, i256, i256, i256), ^bb175(%682, %684 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb172(%686: i256 loc({{.*}}:59:4), %687: i256 loc({{.*}}:59:4), %688: i256 loc({{.*}}:59:4), %689: i256 loc({{.*}}:59:4)): // pred: ^bb171 -// CHECK-NEXT: %690 = llvm.inttoptr %687 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %691 = llvm.load %690 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %692 = arith.cmpi ne, %691, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %693 = arith.extui %692 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %694 = arith.cmpi ne, %691, %693 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %694, ^bb173, ^bb174 loc(#loc12) +// CHECK-NEXT: %655 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%655, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb164 loc(#loc3) +// CHECK-NEXT: ^bb164: // 2 preds: ^bb162, ^bb163 +// CHECK-NEXT: %656 = arith.andi %653, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %657 = arith.shli %656, %648 : i256 loc(#loc3) +// CHECK-NEXT: %658 = arith.ori %649, %657 : i256 loc(#loc3) +// CHECK-NEXT: %659 = arith.addi %647, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %660 = arith.addi %648, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %661 = arith.addi %646, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb161(%661, %659, %660, %658 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb165(%662: i256 loc({{.*}}:59:4)): // pred: ^bb161 +// CHECK-NEXT: %663 = llvm.inttoptr %638 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %662, %663 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb166(%540 : i256) loc(#loc3) +// CHECK-NEXT: ^bb166(%664: i256 loc({{.*}}:59:4)): // 2 preds: ^bb160, ^bb165 +// CHECK-NEXT: %665 = arith.addi %664, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb137(%665 : i256) loc(#loc3) +// CHECK-NEXT: ^bb167: // pred: ^bb137 +// CHECK-NEXT: %666 = arith.addi %462, %c96_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb168(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb168(%667: i256 loc({{.*}}:59:4)): // 2 preds: ^bb167, ^bb171 +// CHECK-NEXT: %668 = arith.cmpi ult, %667, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %668, ^bb169(%667 : i256), ^bb172 loc(#loc3) +// CHECK-NEXT: ^bb169(%669: i256 loc({{.*}}:59:4)): // pred: ^bb168 +// CHECK-NEXT: %670 = arith.muli %669, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %671 = arith.addi %666, %670 : i256 loc(#loc3) +// CHECK-NEXT: %672 = arith.addi %669, %c25_i256 : i256 loc(#loc3) +// CHECK-NEXT: %673 = llvm.inttoptr %671 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %674 = llvm.load %673 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %675 = arith.andi %674, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc3) +// CHECK-NEXT: %676 = arith.cmpi ne, %674, %675 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %676, ^bb170, ^bb171 loc(#loc3) +// CHECK-NEXT: ^bb170: // pred: ^bb169 +// CHECK-NEXT: %677 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%677, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb171 loc(#loc3) +// CHECK-NEXT: ^bb171: // 2 preds: ^bb169, ^bb170 +// CHECK-NEXT: %678 = llvm.inttoptr %672 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %675, %678 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %679 = arith.addi %669, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb168(%679 : i256) loc(#loc3) +// CHECK-NEXT: ^bb172: // pred: ^bb168 +// CHECK-NEXT: %680 = arith.addi %462, %c160_i256 : i256 loc(#loc3) +// CHECK-NEXT: %681 = llvm.inttoptr %680 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %682 = llvm.load %681 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %683 = "llvm.intrcall"(%c23_i256, %682) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %684 = arith.cmpi ne, %682, %683 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %684, ^bb173, ^bb174 loc(#loc3) // CHECK-NEXT: ^bb173: // pred: ^bb172 -// CHECK-NEXT: %695 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%695, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb174 loc(#loc12) +// CHECK-NEXT: %685 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%685, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb174 loc(#loc3) // CHECK-NEXT: ^bb174: // 2 preds: ^bb172, ^bb173 -// CHECK-NEXT: %696 = arith.andi %693, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %697 = arith.shli %696, %688 : i256 loc(#loc12) -// CHECK-NEXT: %698 = arith.ori %689, %697 : i256 loc(#loc12) -// CHECK-NEXT: %699 = arith.addi %687, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %700 = arith.addi %688, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %701 = arith.addi %686, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb171(%701, %699, %700, %698 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb175(%702: i256 loc({{.*}}:59:4), %703: i256 loc({{.*}}:59:4)): // pred: ^bb171 -// CHECK-NEXT: %704 = llvm.inttoptr %679 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %703, %704 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %705 = arith.addi %679, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %706 = arith.addi %680, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %707 = arith.addi %677, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb169(%707, %702, %705, %706 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb176(%708: i256 loc({{.*}}:59:4), %709: i256 loc({{.*}}:59:4), %710: i256 loc({{.*}}:59:4)): // pred: ^bb169 -// CHECK-NEXT: %711 = arith.cmpi ult, %710, %624 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %711, ^bb177(%710, %708, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb182(%611 : i256) loc(#loc12) -// CHECK-NEXT: ^bb177(%712: i256 loc({{.*}}:59:4), %713: i256 loc({{.*}}:59:4), %714: i256 loc({{.*}}:59:4), %715: i256 loc({{.*}}:59:4)): // 2 preds: ^bb176, ^bb180 -// CHECK-NEXT: %716 = arith.cmpi ult, %712, %624 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %716, ^bb178(%712, %713, %714, %715 : i256, i256, i256, i256), ^bb181(%715 : i256) loc(#loc12) -// CHECK-NEXT: ^bb178(%717: i256 loc({{.*}}:59:4), %718: i256 loc({{.*}}:59:4), %719: i256 loc({{.*}}:59:4), %720: i256 loc({{.*}}:59:4)): // pred: ^bb177 -// CHECK-NEXT: %721 = llvm.inttoptr %718 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %722 = llvm.load %721 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %723 = arith.cmpi ne, %722, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %724 = arith.extui %723 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %725 = arith.cmpi ne, %722, %724 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %725, ^bb179, ^bb180 loc(#loc12) -// CHECK-NEXT: ^bb179: // pred: ^bb178 -// CHECK-NEXT: %726 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%726, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb180 loc(#loc12) -// CHECK-NEXT: ^bb180: // 2 preds: ^bb178, ^bb179 -// CHECK-NEXT: %727 = arith.andi %724, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %728 = arith.shli %727, %719 : i256 loc(#loc12) -// CHECK-NEXT: %729 = arith.ori %720, %728 : i256 loc(#loc12) -// CHECK-NEXT: %730 = arith.addi %718, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %731 = arith.addi %719, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %732 = arith.addi %717, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb177(%732, %730, %731, %729 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb181(%733: i256 loc({{.*}}:59:4)): // pred: ^bb177 -// CHECK-NEXT: %734 = llvm.inttoptr %709 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %733, %734 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb182(%611 : i256) loc(#loc12) -// CHECK-NEXT: ^bb182(%735: i256 loc({{.*}}:59:4)): // 2 preds: ^bb176, ^bb181 -// CHECK-NEXT: %736 = arith.addi %735, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb153(%736 : i256) loc(#loc12) -// CHECK-NEXT: ^bb183: // pred: ^bb153 -// CHECK-NEXT: %737 = arith.addi %533, %c96_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb184(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb184(%738: i256 loc({{.*}}:59:4)): // 2 preds: ^bb183, ^bb187 -// CHECK-NEXT: %739 = arith.cmpi ult, %738, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %739, ^bb185(%738 : i256), ^bb188 loc(#loc12) -// CHECK-NEXT: ^bb185(%740: i256 loc({{.*}}:59:4)): // pred: ^bb184 -// CHECK-NEXT: %741 = arith.muli %740, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %742 = arith.addi %737, %741 : i256 loc(#loc12) -// CHECK-NEXT: %743 = arith.addi %740, %c25_i256 : i256 loc(#loc12) -// CHECK-NEXT: %744 = llvm.inttoptr %742 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %745 = llvm.load %744 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %746 = arith.andi %745, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc12) -// CHECK-NEXT: %747 = arith.cmpi ne, %745, %746 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %747, ^bb186, ^bb187 loc(#loc12) +// CHECK-NEXT: %686 = arith.andi %683, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc3) +// CHECK-NEXT: %687 = arith.addi %462, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %688 = llvm.inttoptr %687 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %689 = llvm.load %688 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %690 = arith.andi %689, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %691 = arith.cmpi ne, %689, %690 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %691, ^bb175, ^bb176 loc(#loc3) +// CHECK-NEXT: ^bb175: // pred: ^bb174 +// CHECK-NEXT: %692 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%692, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb176 loc(#loc3) +// CHECK-NEXT: ^bb176: // 2 preds: ^bb174, ^bb175 +// CHECK-NEXT: %693 = arith.shli %690, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %694 = arith.ori %686, %693 : i256 loc(#loc3) +// CHECK-NEXT: %695 = arith.addi %462, %c224_i256 : i256 loc(#loc3) +// CHECK-NEXT: %696 = llvm.inttoptr %695 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %697 = llvm.load %696 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %698 = arith.andi %697, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc3) +// CHECK-NEXT: %699 = arith.cmpi ne, %697, %698 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %699, ^bb177, ^bb178 loc(#loc3) +// CHECK-NEXT: ^bb177: // pred: ^bb176 +// CHECK-NEXT: %700 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%700, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb178 loc(#loc3) +// CHECK-NEXT: ^bb178: // 2 preds: ^bb176, ^bb177 +// CHECK-NEXT: %701 = arith.shrui %698, %c224_i256 : i256 loc(#loc3) +// CHECK-NEXT: %702 = arith.shli %701, %c200_i256 : i256 loc(#loc3) +// CHECK-NEXT: %703 = arith.ori %694, %702 : i256 loc(#loc3) +// CHECK-NEXT: %704 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %705 = llvm.load %704 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %706 = arith.andi %705, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc3) +// CHECK-NEXT: %707 = arith.ori %706, %703 : i256 loc(#loc3) +// CHECK-NEXT: %708 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %707, %708 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %709 = arith.addi %1, %c544_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb179(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb179(%710: i256 loc({{.*}}:59:4)): // 2 preds: ^bb178, ^bb182 +// CHECK-NEXT: %711 = arith.cmpi ult, %710, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %711, ^bb180(%710 : i256), ^bb183 loc(#loc3) +// CHECK-NEXT: ^bb180(%712: i256 loc({{.*}}:59:4)): // pred: ^bb179 +// CHECK-NEXT: %713 = arith.muli %712, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %714 = arith.addi %709, %713 : i256 loc(#loc3) +// CHECK-NEXT: %715 = arith.addi %712, %c28_i256 : i256 loc(#loc3) +// CHECK-NEXT: %716 = llvm.inttoptr %714 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %717 = llvm.load %716 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %718 = arith.andi %717, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc3) +// CHECK-NEXT: %719 = arith.cmpi ne, %717, %718 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %719, ^bb181, ^bb182 loc(#loc3) +// CHECK-NEXT: ^bb181: // pred: ^bb180 +// CHECK-NEXT: %720 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%720, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb182 loc(#loc3) +// CHECK-NEXT: ^bb182: // 2 preds: ^bb180, ^bb181 +// CHECK-NEXT: %721 = llvm.inttoptr %715 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %718, %721 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %722 = arith.addi %712, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb179(%722 : i256) loc(#loc3) +// CHECK-NEXT: ^bb183: // pred: ^bb179 +// CHECK-NEXT: %723 = arith.addi %1, %c608_i256 : i256 loc(#loc3) +// CHECK-NEXT: %724 = llvm.inttoptr %723 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %725 = llvm.load %724 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %726 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %727 = arith.subi %726, %1 : i256 loc(#loc3) +// CHECK-NEXT: %728 = arith.subi %727, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %729 = arith.cmpi sge, %725, %728 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %729, ^bb184, ^bb185 loc(#loc3) +// CHECK-NEXT: ^bb184: // pred: ^bb183 +// CHECK-NEXT: %730 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%730, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb185 loc(#loc3) +// CHECK-NEXT: ^bb185: // 2 preds: ^bb183, ^bb184 +// CHECK-NEXT: %731 = arith.addi %1, %725 : i256 loc(#loc3) +// CHECK-NEXT: %732 = llvm.inttoptr %731 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %733 = llvm.load %732 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %734 = arith.addi %731, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %735 = arith.cmpi ugt, %733, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %735, ^bb186, ^bb187 loc(#loc3) // CHECK-NEXT: ^bb186: // pred: ^bb185 -// CHECK-NEXT: %748 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%748, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb187 loc(#loc12) +// CHECK-NEXT: %736 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%736, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb187 loc(#loc3) // CHECK-NEXT: ^bb187: // 2 preds: ^bb185, ^bb186 -// CHECK-NEXT: %749 = llvm.inttoptr %743 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %746, %749 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %750 = arith.addi %740, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb184(%750 : i256) loc(#loc12) -// CHECK-NEXT: ^bb188: // pred: ^bb184 -// CHECK-NEXT: %751 = arith.addi %533, %c160_i256 : i256 loc(#loc12) -// CHECK-NEXT: %752 = llvm.inttoptr %751 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %753 = llvm.load %752 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %754 = "llvm.intrcall"(%c23_i256, %753) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %755 = arith.cmpi ne, %753, %754 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %755, ^bb189, ^bb190 loc(#loc12) -// CHECK-NEXT: ^bb189: // pred: ^bb188 -// CHECK-NEXT: %756 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%756, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb190 loc(#loc12) -// CHECK-NEXT: ^bb190: // 2 preds: ^bb188, ^bb189 -// CHECK-NEXT: %757 = arith.andi %754, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc12) -// CHECK-NEXT: %758 = arith.addi %533, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %759 = llvm.inttoptr %758 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %760 = llvm.load %759 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %761 = arith.andi %760, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %762 = arith.cmpi ne, %760, %761 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %762, ^bb191, ^bb192 loc(#loc12) -// CHECK-NEXT: ^bb191: // pred: ^bb190 -// CHECK-NEXT: %763 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%763, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb192 loc(#loc12) -// CHECK-NEXT: ^bb192: // 2 preds: ^bb190, ^bb191 -// CHECK-NEXT: %764 = arith.shli %761, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %765 = arith.ori %757, %764 : i256 loc(#loc12) -// CHECK-NEXT: %766 = arith.addi %533, %c224_i256 : i256 loc(#loc12) -// CHECK-NEXT: %767 = llvm.inttoptr %766 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %768 = llvm.load %767 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %769 = arith.andi %768, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc12) -// CHECK-NEXT: %770 = arith.cmpi ne, %768, %769 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %770, ^bb193, ^bb194 loc(#loc12) -// CHECK-NEXT: ^bb193: // pred: ^bb192 -// CHECK-NEXT: %771 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%771, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb194 loc(#loc12) -// CHECK-NEXT: ^bb194: // 2 preds: ^bb192, ^bb193 -// CHECK-NEXT: %772 = arith.shrui %769, %c224_i256 : i256 loc(#loc12) -// CHECK-NEXT: %773 = arith.shli %772, %c200_i256 : i256 loc(#loc12) -// CHECK-NEXT: %774 = arith.ori %765, %773 : i256 loc(#loc12) -// CHECK-NEXT: %775 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %776 = llvm.load %775 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %777 = arith.andi %776, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc12) -// CHECK-NEXT: %778 = arith.ori %777, %774 : i256 loc(#loc12) -// CHECK-NEXT: %779 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %778, %779 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %780 = arith.addi %1, %c544_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb195(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb195(%781: i256 loc({{.*}}:59:4)): // 2 preds: ^bb194, ^bb198 -// CHECK-NEXT: %782 = arith.cmpi ult, %781, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %782, ^bb196(%781 : i256), ^bb199 loc(#loc12) -// CHECK-NEXT: ^bb196(%783: i256 loc({{.*}}:59:4)): // pred: ^bb195 -// CHECK-NEXT: %784 = arith.muli %783, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %785 = arith.addi %780, %784 : i256 loc(#loc12) -// CHECK-NEXT: %786 = arith.addi %783, %c28_i256 : i256 loc(#loc12) -// CHECK-NEXT: %787 = llvm.inttoptr %785 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %788 = llvm.load %787 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %789 = arith.andi %788, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc12) -// CHECK-NEXT: %790 = arith.cmpi ne, %788, %789 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %790, ^bb197, ^bb198 loc(#loc12) -// CHECK-NEXT: ^bb197: // pred: ^bb196 -// CHECK-NEXT: %791 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%791, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb198 loc(#loc12) -// CHECK-NEXT: ^bb198: // 2 preds: ^bb196, ^bb197 -// CHECK-NEXT: %792 = llvm.inttoptr %786 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %789, %792 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %793 = arith.addi %783, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb195(%793 : i256) loc(#loc12) -// CHECK-NEXT: ^bb199: // pred: ^bb195 -// CHECK-NEXT: %794 = arith.addi %1, %c608_i256 : i256 loc(#loc12) -// CHECK-NEXT: %795 = llvm.inttoptr %794 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %796 = llvm.load %795 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %797 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %798 = arith.subi %797, %1 : i256 loc(#loc12) -// CHECK-NEXT: %799 = arith.subi %798, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %800 = arith.cmpi sge, %796, %799 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %800, ^bb200, ^bb201 loc(#loc12) -// CHECK-NEXT: ^bb200: // pred: ^bb199 -// CHECK-NEXT: %801 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%801, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb201 loc(#loc12) -// CHECK-NEXT: ^bb201: // 2 preds: ^bb199, ^bb200 -// CHECK-NEXT: %802 = arith.addi %1, %796 : i256 loc(#loc12) -// CHECK-NEXT: %803 = llvm.inttoptr %802 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %804 = llvm.load %803 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %805 = arith.addi %802, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %806 = arith.cmpi ugt, %804, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %806, ^bb202, ^bb203 loc(#loc12) -// CHECK-NEXT: ^bb202: // pred: ^bb201 -// CHECK-NEXT: %807 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%807, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb203 loc(#loc12) -// CHECK-NEXT: ^bb203: // 2 preds: ^bb201, ^bb202 -// CHECK-NEXT: %808 = arith.muli %804, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %809 = arith.subi %797, %808 : i256 loc(#loc12) -// CHECK-NEXT: %810 = arith.cmpi sgt, %805, %809 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %810, ^bb204, ^bb205 loc(#loc12) -// CHECK-NEXT: ^bb204: // pred: ^bb203 -// CHECK-NEXT: %811 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%811, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb205 loc(#loc12) -// CHECK-NEXT: ^bb205: // 2 preds: ^bb203, ^bb204 -// CHECK-NEXT: %812 = arith.cmpi ugt, %804, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %812, ^bb206, ^bb207 loc(#loc12) -// CHECK-NEXT: ^bb206: // pred: ^bb205 -// CHECK-NEXT: %813 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %813 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %814 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %814 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %815 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%815, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb207 loc(#loc12) -// CHECK-NEXT: ^bb207: // 2 preds: ^bb205, ^bb206 -// CHECK-NEXT: %816 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %817 = llvm.load %816 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %818 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %804, %818 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %819 = arith.cmpi ult, %804, %817 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %819, ^bb208, ^bb223 loc(#loc12) -// CHECK-NEXT: ^bb208: // pred: ^bb207 -// CHECK-NEXT: %820 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c30_i256, %820 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %821 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %822 = "llvm.intrcall"(%821, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %823 = arith.addi %822, %804 : i256 loc(#loc12) -// CHECK-NEXT: %824 = arith.addi %822, %817 : i256 loc(#loc12) -// CHECK-NEXT: %825 = arith.subi %824, %823 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb209(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb209(%826: i256 loc({{.*}}:59:4)): // 2 preds: ^bb208, ^bb222 -// CHECK-NEXT: %827 = arith.cmpi ult, %826, %825 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %827, ^bb210(%826 : i256), ^bb223 loc(#loc12) -// CHECK-NEXT: ^bb210(%828: i256 loc({{.*}}:59:4)): // pred: ^bb209 -// CHECK-NEXT: %829 = arith.addi %823, %828 : i256 loc(#loc12) -// CHECK-NEXT: %830 = llvm.inttoptr %829 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %831 = llvm.load %830 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %832 = llvm.inttoptr %829 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %832 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %833 = arith.cmpi ugt, %831, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %833, ^bb211, ^bb222(%828 : i256) loc(#loc12) -// CHECK-NEXT: ^bb211: // pred: ^bb210 -// CHECK-NEXT: %834 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %829, %834 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %835 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %836 = "llvm.intrcall"(%835, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %837 = arith.muli %831, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb212(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb212(%838: i256 loc({{.*}}:59:4)): // 2 preds: ^bb211, ^bb221 -// CHECK-NEXT: %839 = arith.cmpi ult, %838, %837 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %839, ^bb213(%838 : i256), ^bb222(%828 : i256) loc(#loc12) -// CHECK-NEXT: ^bb213(%840: i256 loc({{.*}}:59:4)): // pred: ^bb212 -// CHECK-NEXT: %841 = arith.addi %836, %840 : i256 loc(#loc12) -// CHECK-NEXT: %842 = llvm.inttoptr %841 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %842 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %843 = arith.addi %841, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %844 = llvm.inttoptr %843 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %845 = llvm.load %844 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %846 = llvm.inttoptr %843 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %846 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %847 = arith.cmpi ugt, %845, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %847, ^bb214, ^bb221 loc(#loc12) -// CHECK-NEXT: ^bb214: // pred: ^bb213 -// CHECK-NEXT: %848 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %843, %848 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %849 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %850 = "llvm.intrcall"(%849, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb215(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb215(%851: i256 loc({{.*}}:59:4)): // 2 preds: ^bb214, ^bb220 -// CHECK-NEXT: %852 = arith.cmpi ult, %851, %845 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %852, ^bb216(%851 : i256), ^bb221 loc(#loc12) -// CHECK-NEXT: ^bb216(%853: i256 loc({{.*}}:59:4)): // pred: ^bb215 -// CHECK-NEXT: %854 = arith.addi %850, %853 : i256 loc(#loc12) -// CHECK-NEXT: %855 = llvm.inttoptr %854 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %856 = llvm.load %855 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %857 = llvm.inttoptr %854 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %857 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %858 = arith.cmpi ugt, %856, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %858, ^bb217, ^bb220(%853 : i256) loc(#loc12) +// CHECK-NEXT: %737 = arith.muli %733, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %738 = arith.subi %726, %737 : i256 loc(#loc3) +// CHECK-NEXT: %739 = arith.cmpi sgt, %734, %738 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %739, ^bb188, ^bb189 loc(#loc3) +// CHECK-NEXT: ^bb188: // pred: ^bb187 +// CHECK-NEXT: %740 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%740, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb189 loc(#loc3) +// CHECK-NEXT: ^bb189: // 2 preds: ^bb187, ^bb188 +// CHECK-NEXT: %741 = arith.cmpi ugt, %733, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %741, ^bb190, ^bb191 loc(#loc3) +// CHECK-NEXT: ^bb190: // pred: ^bb189 +// CHECK-NEXT: %742 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %742 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %743 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %743 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %744 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%744, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb191 loc(#loc3) +// CHECK-NEXT: ^bb191: // 2 preds: ^bb189, ^bb190 +// CHECK-NEXT: %745 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %746 = llvm.load %745 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %747 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %733, %747 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %748 = arith.cmpi ult, %733, %746 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %748, ^bb192, ^bb210 loc(#loc3) +// CHECK-NEXT: ^bb192: // pred: ^bb191 +// CHECK-NEXT: %749 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c30_i256, %749 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %750 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %751 = "llvm.intrcall"(%750, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %752 = arith.addi %751, %733 : i256 loc(#loc3) +// CHECK-NEXT: %753 = arith.addi %751, %746 : i256 loc(#loc3) +// CHECK-NEXT: %754 = arith.subi %753, %752 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb193(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb193(%755: i256 loc({{.*}}:59:4)): // 2 preds: ^bb192, ^bb209 +// CHECK-NEXT: %756 = arith.cmpi ult, %755, %754 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %756, ^bb194(%755 : i256), ^bb210 loc(#loc3) +// CHECK-NEXT: ^bb194(%757: i256 loc({{.*}}:59:4)): // pred: ^bb193 +// CHECK-NEXT: %758 = arith.addi %752, %757 : i256 loc(#loc3) +// CHECK-NEXT: %759 = llvm.inttoptr %758 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %760 = llvm.load %759 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %761 = llvm.inttoptr %758 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %761 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %762 = arith.cmpi ugt, %760, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %762, ^bb195, ^bb209(%757 : i256) loc(#loc3) +// CHECK-NEXT: ^bb195: // pred: ^bb194 +// CHECK-NEXT: %763 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %758, %763 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %764 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %765 = "llvm.intrcall"(%764, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %766 = arith.muli %760, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb196(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb196(%767: i256 loc({{.*}}:59:4)): // 2 preds: ^bb195, ^bb208 +// CHECK-NEXT: %768 = arith.cmpi ult, %767, %766 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %768, ^bb197(%767 : i256), ^bb209(%757 : i256) loc(#loc3) +// CHECK-NEXT: ^bb197(%769: i256 loc({{.*}}:59:4)): // pred: ^bb196 +// CHECK-NEXT: %770 = arith.addi %765, %769 : i256 loc(#loc3) +// CHECK-NEXT: %771 = llvm.inttoptr %770 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %771 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %772 = arith.addi %770, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %773 = llvm.inttoptr %772 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %774 = llvm.load %773 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %775 = llvm.inttoptr %772 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %775 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %776 = arith.cmpi ugt, %774, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %776, ^bb198, ^bb205 loc(#loc3) +// CHECK-NEXT: ^bb198: // pred: ^bb197 +// CHECK-NEXT: %777 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %772, %777 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %778 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %779 = "llvm.intrcall"(%778, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb199(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb199(%780: i256 loc({{.*}}:59:4)): // 2 preds: ^bb198, ^bb204 +// CHECK-NEXT: %781 = arith.cmpi ult, %780, %774 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %781, ^bb200(%780 : i256), ^bb205 loc(#loc3) +// CHECK-NEXT: ^bb200(%782: i256 loc({{.*}}:59:4)): // pred: ^bb199 +// CHECK-NEXT: %783 = arith.addi %779, %782 : i256 loc(#loc3) +// CHECK-NEXT: %784 = llvm.inttoptr %783 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %785 = llvm.load %784 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %786 = llvm.inttoptr %783 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %786 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %787 = arith.cmpi ugt, %785, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %787, ^bb201, ^bb204(%782 : i256) loc(#loc3) +// CHECK-NEXT: ^bb201: // pred: ^bb200 +// CHECK-NEXT: %788 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %783, %788 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %789 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %790 = "llvm.intrcall"(%789, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %791 = arith.addi %785, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %792 = arith.divui %791, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb202(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb202(%793: i256 loc({{.*}}:59:4)): // 2 preds: ^bb201, ^bb203 +// CHECK-NEXT: %794 = arith.cmpi ult, %793, %792 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %794, ^bb203(%793 : i256), ^bb204(%782 : i256) loc(#loc3) +// CHECK-NEXT: ^bb203(%795: i256 loc({{.*}}:59:4)): // pred: ^bb202 +// CHECK-NEXT: %796 = arith.addi %790, %795 : i256 loc(#loc3) +// CHECK-NEXT: %797 = llvm.inttoptr %796 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %797 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %798 = arith.addi %795, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb202(%798 : i256) loc(#loc3) +// CHECK-NEXT: ^bb204(%799: i256 loc({{.*}}:59:4)): // 2 preds: ^bb200, ^bb202 +// CHECK-NEXT: %800 = arith.addi %799, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb199(%800 : i256) loc(#loc3) +// CHECK-NEXT: ^bb205: // 2 preds: ^bb197, ^bb199 +// CHECK-NEXT: %801 = arith.addi %770, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb206(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb206(%802: i256 loc({{.*}}:59:4)): // 2 preds: ^bb205, ^bb207 +// CHECK-NEXT: %803 = arith.cmpi ult, %802, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %803, ^bb207(%802 : i256), ^bb208 loc(#loc3) +// CHECK-NEXT: ^bb207(%804: i256 loc({{.*}}:59:4)): // pred: ^bb206 +// CHECK-NEXT: %805 = arith.addi %801, %804 : i256 loc(#loc3) +// CHECK-NEXT: %806 = llvm.inttoptr %805 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %806 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %807 = arith.addi %804, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb206(%807 : i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb208: // pred: ^bb206 +// CHECK-NEXT: %808 = arith.addi %770, %c4_i256 : i256 loc(#loc3) +// CHECK-NEXT: %809 = llvm.inttoptr %808 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %809 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %810 = arith.addi %769, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb196(%810 : i256) loc(#loc3) +// CHECK-NEXT: ^bb209(%811: i256 loc({{.*}}:59:4)): // 2 preds: ^bb194, ^bb196 +// CHECK-NEXT: %812 = arith.addi %811, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb193(%812 : i256) loc(#loc3) +// CHECK-NEXT: ^bb210: // 2 preds: ^bb191, ^bb193 +// CHECK-NEXT: %813 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c30_i256, %813 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %814 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %815 = "llvm.intrcall"(%814, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb211(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb211(%816: i256 loc({{.*}}:59:4)): // 2 preds: ^bb210, ^bb302 +// CHECK-NEXT: %817 = arith.cmpi ult, %816, %733 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %817, ^bb212(%816 : i256), ^bb303 loc(#loc3) +// CHECK-NEXT: ^bb212(%818: i256 loc({{.*}}:59:4)): // pred: ^bb211 +// CHECK-NEXT: %819 = arith.muli %818, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %820 = arith.addi %734, %819 : i256 loc(#loc3) +// CHECK-NEXT: %821 = arith.addi %815, %818 : i256 loc(#loc3) +// CHECK-NEXT: %822 = llvm.inttoptr %820 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %823 = llvm.load %822 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %824 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %825 = arith.subi %824, %734 : i256 loc(#loc3) +// CHECK-NEXT: %826 = arith.subi %825, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %827 = arith.cmpi sge, %823, %826 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %827, ^bb213, ^bb214 loc(#loc3) +// CHECK-NEXT: ^bb213: // pred: ^bb212 +// CHECK-NEXT: %828 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%828, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb214 loc(#loc3) +// CHECK-NEXT: ^bb214: // 2 preds: ^bb212, ^bb213 +// CHECK-NEXT: %829 = arith.addi %734, %823 : i256 loc(#loc3) +// CHECK-NEXT: %830 = llvm.inttoptr %829 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %831 = llvm.load %830 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %832 = arith.addi %829, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %833 = arith.cmpi ugt, %831, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %833, ^bb215, ^bb216 loc(#loc3) +// CHECK-NEXT: ^bb215: // pred: ^bb214 +// CHECK-NEXT: %834 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%834, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb216 loc(#loc3) +// CHECK-NEXT: ^bb216: // 2 preds: ^bb214, ^bb215 +// CHECK-NEXT: %835 = arith.muli %831, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %836 = arith.subi %824, %835 : i256 loc(#loc3) +// CHECK-NEXT: %837 = arith.cmpi sgt, %832, %836 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %837, ^bb217, ^bb218 loc(#loc3) // CHECK-NEXT: ^bb217: // pred: ^bb216 -// CHECK-NEXT: %859 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %854, %859 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %860 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %861 = "llvm.intrcall"(%860, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %862 = arith.addi %856, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %863 = arith.divui %862, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb218(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb218(%864: i256 loc({{.*}}:59:4)): // 2 preds: ^bb217, ^bb219 -// CHECK-NEXT: %865 = arith.cmpi ult, %864, %863 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %865, ^bb219(%864 : i256), ^bb220(%853 : i256) loc(#loc12) -// CHECK-NEXT: ^bb219(%866: i256 loc({{.*}}:59:4)): // pred: ^bb218 -// CHECK-NEXT: %867 = arith.addi %861, %866 : i256 loc(#loc12) -// CHECK-NEXT: %868 = llvm.inttoptr %867 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %868 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %869 = arith.addi %866, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb218(%869 : i256) loc(#loc12) -// CHECK-NEXT: ^bb220(%870: i256 loc({{.*}}:59:4)): // 2 preds: ^bb216, ^bb218 -// CHECK-NEXT: %871 = arith.addi %870, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb215(%871 : i256) loc(#loc12) -// CHECK-NEXT: ^bb221: // 2 preds: ^bb213, ^bb215 -// CHECK-NEXT: %872 = arith.addi %841, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %873 = llvm.inttoptr %872 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %873 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %874 = arith.addi %841, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: %875 = llvm.inttoptr %874 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %875 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %876 = arith.addi %841, %c4_i256 : i256 loc(#loc12) -// CHECK-NEXT: %877 = llvm.inttoptr %876 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %877 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %878 = arith.addi %840, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb212(%878 : i256) loc(#loc12) -// CHECK-NEXT: ^bb222(%879: i256 loc({{.*}}:59:4)): // 2 preds: ^bb210, ^bb212 -// CHECK-NEXT: %880 = arith.addi %879, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb209(%880 : i256) loc(#loc12) -// CHECK-NEXT: ^bb223: // 2 preds: ^bb207, ^bb209 -// CHECK-NEXT: %881 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c30_i256, %881 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %882 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %883 = "llvm.intrcall"(%882, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb224(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb224(%884: i256 loc({{.*}}:59:4)): // 2 preds: ^bb223, ^bb312 -// CHECK-NEXT: %885 = arith.cmpi ult, %884, %804 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %885, ^bb225(%884 : i256), ^bb313 loc(#loc12) -// CHECK-NEXT: ^bb225(%886: i256 loc({{.*}}:59:4)): // pred: ^bb224 -// CHECK-NEXT: %887 = arith.muli %886, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %888 = arith.addi %805, %887 : i256 loc(#loc12) -// CHECK-NEXT: %889 = arith.addi %883, %886 : i256 loc(#loc12) -// CHECK-NEXT: %890 = llvm.inttoptr %888 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %891 = llvm.load %890 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %892 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %893 = arith.subi %892, %805 : i256 loc(#loc12) -// CHECK-NEXT: %894 = arith.subi %893, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %895 = arith.cmpi sge, %891, %894 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %895, ^bb226, ^bb227 loc(#loc12) -// CHECK-NEXT: ^bb226: // pred: ^bb225 -// CHECK-NEXT: %896 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%896, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb227 loc(#loc12) -// CHECK-NEXT: ^bb227: // 2 preds: ^bb225, ^bb226 -// CHECK-NEXT: %897 = arith.addi %805, %891 : i256 loc(#loc12) -// CHECK-NEXT: %898 = llvm.inttoptr %897 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %899 = llvm.load %898 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %900 = arith.addi %897, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %901 = arith.cmpi ugt, %899, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %901, ^bb228, ^bb229 loc(#loc12) -// CHECK-NEXT: ^bb228: // pred: ^bb227 -// CHECK-NEXT: %902 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%902, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb229 loc(#loc12) -// CHECK-NEXT: ^bb229: // 2 preds: ^bb227, ^bb228 -// CHECK-NEXT: %903 = arith.muli %899, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %904 = arith.subi %892, %903 : i256 loc(#loc12) -// CHECK-NEXT: %905 = arith.cmpi sgt, %900, %904 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %905, ^bb230, ^bb231 loc(#loc12) -// CHECK-NEXT: ^bb230: // pred: ^bb229 -// CHECK-NEXT: %906 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%906, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb231 loc(#loc12) -// CHECK-NEXT: ^bb231: // 2 preds: ^bb229, ^bb230 -// CHECK-NEXT: %907 = arith.cmpi ugt, %899, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %907, ^bb232, ^bb233 loc(#loc12) -// CHECK-NEXT: ^bb232: // pred: ^bb231 -// CHECK-NEXT: %908 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %908 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %909 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %909 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %910 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%910, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb233 loc(#loc12) -// CHECK-NEXT: ^bb233: // 2 preds: ^bb231, ^bb232 -// CHECK-NEXT: %911 = llvm.inttoptr %889 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %912 = llvm.load %911 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %913 = llvm.inttoptr %889 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %899, %913 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %914 = arith.cmpi ult, %899, %912 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %914, ^bb234, ^bb245 loc(#loc12) -// CHECK-NEXT: ^bb234: // pred: ^bb233 -// CHECK-NEXT: %915 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %889, %915 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %916 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %917 = "llvm.intrcall"(%916, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %918 = arith.muli %899, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: %919 = arith.addi %917, %918 : i256 loc(#loc12) -// CHECK-NEXT: %920 = arith.muli %912, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: %921 = arith.addi %917, %920 : i256 loc(#loc12) -// CHECK-NEXT: %922 = arith.subi %921, %919 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb235(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb235(%923: i256 loc({{.*}}:59:4)): // 2 preds: ^bb234, ^bb244 -// CHECK-NEXT: %924 = arith.cmpi ult, %923, %922 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %924, ^bb236(%923 : i256), ^bb245 loc(#loc12) -// CHECK-NEXT: ^bb236(%925: i256 loc({{.*}}:59:4)): // pred: ^bb235 -// CHECK-NEXT: %926 = arith.addi %919, %925 : i256 loc(#loc12) -// CHECK-NEXT: %927 = llvm.inttoptr %926 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %927 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %928 = arith.addi %926, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %929 = llvm.inttoptr %928 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %930 = llvm.load %929 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %931 = llvm.inttoptr %928 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %931 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %932 = arith.cmpi ugt, %930, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %932, ^bb237, ^bb244 loc(#loc12) -// CHECK-NEXT: ^bb237: // pred: ^bb236 -// CHECK-NEXT: %933 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %928, %933 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %934 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %935 = "llvm.intrcall"(%934, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb238(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb238(%936: i256 loc({{.*}}:59:4)): // 2 preds: ^bb237, ^bb243 -// CHECK-NEXT: %937 = arith.cmpi ult, %936, %930 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %937, ^bb239(%936 : i256), ^bb244 loc(#loc12) -// CHECK-NEXT: ^bb239(%938: i256 loc({{.*}}:59:4)): // pred: ^bb238 -// CHECK-NEXT: %939 = arith.addi %935, %938 : i256 loc(#loc12) -// CHECK-NEXT: %940 = llvm.inttoptr %939 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %941 = llvm.load %940 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %942 = llvm.inttoptr %939 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %942 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %943 = arith.cmpi ugt, %941, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %943, ^bb240, ^bb243(%938 : i256) loc(#loc12) +// CHECK-NEXT: %838 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%838, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb218 loc(#loc3) +// CHECK-NEXT: ^bb218: // 2 preds: ^bb216, ^bb217 +// CHECK-NEXT: %839 = arith.cmpi ugt, %831, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %839, ^bb219, ^bb220 loc(#loc3) +// CHECK-NEXT: ^bb219: // pred: ^bb218 +// CHECK-NEXT: %840 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %840 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %841 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %841 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %842 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%842, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb220 loc(#loc3) +// CHECK-NEXT: ^bb220: // 2 preds: ^bb218, ^bb219 +// CHECK-NEXT: %843 = llvm.inttoptr %821 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %844 = llvm.load %843 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %845 = llvm.inttoptr %821 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %831, %845 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %846 = arith.cmpi ult, %831, %844 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %846, ^bb221, ^bb235 loc(#loc3) +// CHECK-NEXT: ^bb221: // pred: ^bb220 +// CHECK-NEXT: %847 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %821, %847 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %848 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %849 = "llvm.intrcall"(%848, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %850 = arith.muli %831, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: %851 = arith.addi %849, %850 : i256 loc(#loc3) +// CHECK-NEXT: %852 = arith.muli %844, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: %853 = arith.addi %849, %852 : i256 loc(#loc3) +// CHECK-NEXT: %854 = arith.subi %853, %851 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb222(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb222(%855: i256 loc({{.*}}:59:4)): // 2 preds: ^bb221, ^bb234 +// CHECK-NEXT: %856 = arith.cmpi ult, %855, %854 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %856, ^bb223(%855 : i256), ^bb235 loc(#loc3) +// CHECK-NEXT: ^bb223(%857: i256 loc({{.*}}:59:4)): // pred: ^bb222 +// CHECK-NEXT: %858 = arith.addi %851, %857 : i256 loc(#loc3) +// CHECK-NEXT: %859 = llvm.inttoptr %858 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %859 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %860 = arith.addi %858, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %861 = llvm.inttoptr %860 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %862 = llvm.load %861 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %863 = llvm.inttoptr %860 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %863 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %864 = arith.cmpi ugt, %862, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %864, ^bb224, ^bb231 loc(#loc3) +// CHECK-NEXT: ^bb224: // pred: ^bb223 +// CHECK-NEXT: %865 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %860, %865 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %866 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %867 = "llvm.intrcall"(%866, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb225(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb225(%868: i256 loc({{.*}}:59:4)): // 2 preds: ^bb224, ^bb230 +// CHECK-NEXT: %869 = arith.cmpi ult, %868, %862 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %869, ^bb226(%868 : i256), ^bb231 loc(#loc3) +// CHECK-NEXT: ^bb226(%870: i256 loc({{.*}}:59:4)): // pred: ^bb225 +// CHECK-NEXT: %871 = arith.addi %867, %870 : i256 loc(#loc3) +// CHECK-NEXT: %872 = llvm.inttoptr %871 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %873 = llvm.load %872 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %874 = llvm.inttoptr %871 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %874 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %875 = arith.cmpi ugt, %873, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %875, ^bb227, ^bb230(%870 : i256) loc(#loc3) +// CHECK-NEXT: ^bb227: // pred: ^bb226 +// CHECK-NEXT: %876 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %871, %876 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %877 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %878 = "llvm.intrcall"(%877, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %879 = arith.addi %873, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %880 = arith.divui %879, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb228(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb228(%881: i256 loc({{.*}}:59:4)): // 2 preds: ^bb227, ^bb229 +// CHECK-NEXT: %882 = arith.cmpi ult, %881, %880 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %882, ^bb229(%881 : i256), ^bb230(%870 : i256) loc(#loc3) +// CHECK-NEXT: ^bb229(%883: i256 loc({{.*}}:59:4)): // pred: ^bb228 +// CHECK-NEXT: %884 = arith.addi %878, %883 : i256 loc(#loc3) +// CHECK-NEXT: %885 = llvm.inttoptr %884 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %885 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %886 = arith.addi %883, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb228(%886 : i256) loc(#loc3) +// CHECK-NEXT: ^bb230(%887: i256 loc({{.*}}:59:4)): // 2 preds: ^bb226, ^bb228 +// CHECK-NEXT: %888 = arith.addi %887, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb225(%888 : i256) loc(#loc3) +// CHECK-NEXT: ^bb231: // 2 preds: ^bb223, ^bb225 +// CHECK-NEXT: %889 = arith.addi %858, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb232(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb232(%890: i256 loc({{.*}}:59:4)): // 2 preds: ^bb231, ^bb233 +// CHECK-NEXT: %891 = arith.cmpi ult, %890, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %891, ^bb233(%890 : i256), ^bb234 loc(#loc3) +// CHECK-NEXT: ^bb233(%892: i256 loc({{.*}}:59:4)): // pred: ^bb232 +// CHECK-NEXT: %893 = arith.addi %889, %892 : i256 loc(#loc3) +// CHECK-NEXT: %894 = llvm.inttoptr %893 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %894 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %895 = arith.addi %892, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb232(%895 : i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb234: // pred: ^bb232 +// CHECK-NEXT: %896 = arith.addi %858, %c4_i256 : i256 loc(#loc3) +// CHECK-NEXT: %897 = llvm.inttoptr %896 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %897 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %898 = arith.addi %857, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb222(%898 : i256) loc(#loc3) +// CHECK-NEXT: ^bb235: // 2 preds: ^bb220, ^bb222 +// CHECK-NEXT: %899 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %821, %899 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %900 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %901 = "llvm.intrcall"(%900, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb236(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb236(%902: i256 loc({{.*}}:59:4)): // 2 preds: ^bb235, ^bb301 +// CHECK-NEXT: %903 = arith.cmpi ult, %902, %831 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %903, ^bb237(%902 : i256), ^bb302(%818 : i256) loc(#loc3) +// CHECK-NEXT: ^bb237(%904: i256 loc({{.*}}:59:4)): // pred: ^bb236 +// CHECK-NEXT: %905 = arith.muli %904, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %906 = arith.addi %832, %905 : i256 loc(#loc3) +// CHECK-NEXT: %907 = arith.muli %904, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: %908 = arith.addi %901, %907 : i256 loc(#loc3) +// CHECK-NEXT: %909 = llvm.inttoptr %906 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %910 = llvm.load %909 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %911 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %912 = arith.subi %911, %832 : i256 loc(#loc3) +// CHECK-NEXT: %913 = arith.subi %912, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %914 = arith.cmpi sge, %910, %913 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %914, ^bb238, ^bb239 loc(#loc3) +// CHECK-NEXT: ^bb238: // pred: ^bb237 +// CHECK-NEXT: %915 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%915, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb239 loc(#loc3) +// CHECK-NEXT: ^bb239: // 2 preds: ^bb237, ^bb238 +// CHECK-NEXT: %916 = arith.addi %832, %910 : i256 loc(#loc3) +// CHECK-NEXT: %917 = llvm.inttoptr %916 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %918 = llvm.load %917 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %919 = "llvm.intrcall"(%c8_i256, %918) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %920 = arith.cmpi ne, %918, %919 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %920, ^bb240, ^bb241 loc(#loc3) // CHECK-NEXT: ^bb240: // pred: ^bb239 -// CHECK-NEXT: %944 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %939, %944 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %945 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %946 = "llvm.intrcall"(%945, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %947 = arith.addi %941, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %948 = arith.divui %947, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb241(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb241(%949: i256 loc({{.*}}:59:4)): // 2 preds: ^bb240, ^bb242 -// CHECK-NEXT: %950 = arith.cmpi ult, %949, %948 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %950, ^bb242(%949 : i256), ^bb243(%938 : i256) loc(#loc12) -// CHECK-NEXT: ^bb242(%951: i256 loc({{.*}}:59:4)): // pred: ^bb241 -// CHECK-NEXT: %952 = arith.addi %946, %951 : i256 loc(#loc12) -// CHECK-NEXT: %953 = llvm.inttoptr %952 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %953 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %954 = arith.addi %951, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb241(%954 : i256) loc(#loc12) -// CHECK-NEXT: ^bb243(%955: i256 loc({{.*}}:59:4)): // 2 preds: ^bb239, ^bb241 -// CHECK-NEXT: %956 = arith.addi %955, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb238(%956 : i256) loc(#loc12) -// CHECK-NEXT: ^bb244: // 2 preds: ^bb236, ^bb238 -// CHECK-NEXT: %957 = arith.addi %926, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %958 = llvm.inttoptr %957 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %958 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %959 = arith.addi %926, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: %960 = llvm.inttoptr %959 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %960 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %961 = arith.addi %926, %c4_i256 : i256 loc(#loc12) -// CHECK-NEXT: %962 = llvm.inttoptr %961 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %962 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %963 = arith.addi %925, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb235(%963 : i256) loc(#loc12) -// CHECK-NEXT: ^bb245: // 2 preds: ^bb233, ^bb235 -// CHECK-NEXT: %964 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %889, %964 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %965 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %966 = "llvm.intrcall"(%965, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb246(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb246(%967: i256 loc({{.*}}:59:4)): // 2 preds: ^bb245, ^bb311 -// CHECK-NEXT: %968 = arith.cmpi ult, %967, %899 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %968, ^bb247(%967 : i256), ^bb312(%886 : i256) loc(#loc12) -// CHECK-NEXT: ^bb247(%969: i256 loc({{.*}}:59:4)): // pred: ^bb246 -// CHECK-NEXT: %970 = arith.muli %969, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %971 = arith.addi %900, %970 : i256 loc(#loc12) -// CHECK-NEXT: %972 = arith.muli %969, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: %973 = arith.addi %966, %972 : i256 loc(#loc12) -// CHECK-NEXT: %974 = llvm.inttoptr %971 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %975 = llvm.load %974 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %976 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %977 = arith.subi %976, %900 : i256 loc(#loc12) -// CHECK-NEXT: %978 = arith.subi %977, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %979 = arith.cmpi sge, %975, %978 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %979, ^bb248, ^bb249 loc(#loc12) +// CHECK-NEXT: %921 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%921, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb241 loc(#loc3) +// CHECK-NEXT: ^bb241: // 2 preds: ^bb239, ^bb240 +// CHECK-NEXT: %922 = arith.andi %919, %c4722366482869645213695_i256 : i256 loc(#loc3) +// CHECK-NEXT: %923 = arith.addi %916, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %924 = llvm.inttoptr %923 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %925 = llvm.load %924 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %926 = arith.andi %925, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %927 = arith.cmpi ne, %925, %926 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %927, ^bb242, ^bb243 loc(#loc3) +// CHECK-NEXT: ^bb242: // pred: ^bb241 +// CHECK-NEXT: %928 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%928, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb243 loc(#loc3) +// CHECK-NEXT: ^bb243: // 2 preds: ^bb241, ^bb242 +// CHECK-NEXT: %929 = arith.shli %926, %c72_i256 : i256 loc(#loc3) +// CHECK-NEXT: %930 = arith.ori %922, %929 : i256 loc(#loc3) +// CHECK-NEXT: %931 = llvm.inttoptr %908 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %932 = llvm.load %931 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %933 = arith.andi %932, %c-1208925819614629174706176_i256 : i256 loc(#loc3) +// CHECK-NEXT: %934 = arith.ori %933, %930 : i256 loc(#loc3) +// CHECK-NEXT: %935 = llvm.inttoptr %908 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %934, %935 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %936 = arith.addi %916, %c64_i256 : i256 loc(#loc3) +// CHECK-NEXT: %937 = llvm.inttoptr %936 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %938 = llvm.load %937 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %939 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %940 = arith.subi %939, %916 : i256 loc(#loc3) +// CHECK-NEXT: %941 = arith.subi %940, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %942 = arith.cmpi sge, %938, %941 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %942, ^bb244, ^bb245 loc(#loc3) +// CHECK-NEXT: ^bb244: // pred: ^bb243 +// CHECK-NEXT: %943 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%943, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb245 loc(#loc3) +// CHECK-NEXT: ^bb245: // 2 preds: ^bb243, ^bb244 +// CHECK-NEXT: %944 = arith.addi %916, %938 : i256 loc(#loc3) +// CHECK-NEXT: %945 = llvm.inttoptr %944 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %946 = llvm.load %945 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %947 = arith.addi %944, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %948 = arith.cmpi ugt, %946, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %948, ^bb246, ^bb247 loc(#loc3) +// CHECK-NEXT: ^bb246: // pred: ^bb245 +// CHECK-NEXT: %949 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%949, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb247 loc(#loc3) +// CHECK-NEXT: ^bb247: // 2 preds: ^bb245, ^bb246 +// CHECK-NEXT: %950 = arith.muli %946, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %951 = arith.subi %939, %950 : i256 loc(#loc3) +// CHECK-NEXT: %952 = arith.cmpi sgt, %947, %951 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %952, ^bb248, ^bb249 loc(#loc3) // CHECK-NEXT: ^bb248: // pred: ^bb247 -// CHECK-NEXT: %980 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%980, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb249 loc(#loc12) +// CHECK-NEXT: %953 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%953, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb249 loc(#loc3) // CHECK-NEXT: ^bb249: // 2 preds: ^bb247, ^bb248 -// CHECK-NEXT: %981 = arith.addi %900, %975 : i256 loc(#loc12) -// CHECK-NEXT: %982 = llvm.inttoptr %981 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %983 = llvm.load %982 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %984 = "llvm.intrcall"(%c8_i256, %983) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %985 = arith.cmpi ne, %983, %984 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %985, ^bb250, ^bb251 loc(#loc12) +// CHECK-NEXT: %954 = arith.addi %908, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %955 = arith.cmpi ugt, %946, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %955, ^bb250, ^bb251 loc(#loc3) // CHECK-NEXT: ^bb250: // pred: ^bb249 -// CHECK-NEXT: %986 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%986, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb251 loc(#loc12) +// CHECK-NEXT: %956 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %956 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %957 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %957 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %958 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%958, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb251 loc(#loc3) // CHECK-NEXT: ^bb251: // 2 preds: ^bb249, ^bb250 -// CHECK-NEXT: %987 = arith.andi %984, %c4722366482869645213695_i256 : i256 loc(#loc12) -// CHECK-NEXT: %988 = arith.addi %981, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %989 = llvm.inttoptr %988 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %990 = llvm.load %989 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %991 = arith.andi %990, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %992 = arith.cmpi ne, %990, %991 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %992, ^bb252, ^bb253 loc(#loc12) +// CHECK-NEXT: %959 = llvm.inttoptr %954 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %960 = llvm.load %959 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %961 = llvm.inttoptr %954 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %946, %961 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %962 = arith.cmpi ult, %946, %960 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %962, ^bb252, ^bb259 loc(#loc3) // CHECK-NEXT: ^bb252: // pred: ^bb251 -// CHECK-NEXT: %993 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%993, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb253 loc(#loc12) -// CHECK-NEXT: ^bb253: // 2 preds: ^bb251, ^bb252 -// CHECK-NEXT: %994 = arith.shli %991, %c72_i256 : i256 loc(#loc12) -// CHECK-NEXT: %995 = arith.ori %987, %994 : i256 loc(#loc12) -// CHECK-NEXT: %996 = llvm.inttoptr %973 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %997 = llvm.load %996 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %998 = arith.andi %997, %c-1208925819614629174706176_i256 : i256 loc(#loc12) -// CHECK-NEXT: %999 = arith.ori %998, %995 : i256 loc(#loc12) -// CHECK-NEXT: %1000 = llvm.inttoptr %973 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %999, %1000 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1001 = arith.addi %981, %c64_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1002 = llvm.inttoptr %1001 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1003 = llvm.load %1002 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1004 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %1005 = arith.subi %1004, %981 : i256 loc(#loc12) -// CHECK-NEXT: %1006 = arith.subi %1005, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1007 = arith.cmpi sge, %1003, %1006 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1007, ^bb254, ^bb255 loc(#loc12) -// CHECK-NEXT: ^bb254: // pred: ^bb253 -// CHECK-NEXT: %1008 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1008, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb255 loc(#loc12) -// CHECK-NEXT: ^bb255: // 2 preds: ^bb253, ^bb254 -// CHECK-NEXT: %1009 = arith.addi %981, %1003 : i256 loc(#loc12) -// CHECK-NEXT: %1010 = llvm.inttoptr %1009 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1011 = llvm.load %1010 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1012 = arith.addi %1009, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1013 = arith.cmpi ugt, %1011, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1013, ^bb256, ^bb257 loc(#loc12) -// CHECK-NEXT: ^bb256: // pred: ^bb255 -// CHECK-NEXT: %1014 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1014, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb257 loc(#loc12) -// CHECK-NEXT: ^bb257: // 2 preds: ^bb255, ^bb256 -// CHECK-NEXT: %1015 = arith.muli %1011, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1016 = arith.subi %1004, %1015 : i256 loc(#loc12) -// CHECK-NEXT: %1017 = arith.cmpi sgt, %1012, %1016 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1017, ^bb258, ^bb259 loc(#loc12) -// CHECK-NEXT: ^bb258: // pred: ^bb257 -// CHECK-NEXT: %1018 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1018, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb259 loc(#loc12) -// CHECK-NEXT: ^bb259: // 2 preds: ^bb257, ^bb258 -// CHECK-NEXT: %1019 = arith.addi %973, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1020 = arith.cmpi ugt, %1011, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1020, ^bb260, ^bb261 loc(#loc12) -// CHECK-NEXT: ^bb260: // pred: ^bb259 -// CHECK-NEXT: %1021 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1021 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1022 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %1022 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1023 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1023, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb261 loc(#loc12) -// CHECK-NEXT: ^bb261: // 2 preds: ^bb259, ^bb260 -// CHECK-NEXT: %1024 = llvm.inttoptr %1019 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1025 = llvm.load %1024 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1026 = llvm.inttoptr %1019 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1011, %1026 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1027 = arith.cmpi ult, %1011, %1025 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1027, ^bb262, ^bb269 loc(#loc12) +// CHECK-NEXT: %963 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %954, %963 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %964 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %965 = "llvm.intrcall"(%964, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %966 = arith.addi %965, %946 : i256 loc(#loc3) +// CHECK-NEXT: %967 = arith.addi %965, %960 : i256 loc(#loc3) +// CHECK-NEXT: %968 = arith.subi %967, %966 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb253(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb253(%969: i256 loc({{.*}}:59:4)): // 2 preds: ^bb252, ^bb258 +// CHECK-NEXT: %970 = arith.cmpi ult, %969, %968 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %970, ^bb254(%969 : i256), ^bb259 loc(#loc3) +// CHECK-NEXT: ^bb254(%971: i256 loc({{.*}}:59:4)): // pred: ^bb253 +// CHECK-NEXT: %972 = arith.addi %966, %971 : i256 loc(#loc3) +// CHECK-NEXT: %973 = llvm.inttoptr %972 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %974 = llvm.load %973 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %975 = llvm.inttoptr %972 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %975 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %976 = arith.cmpi ugt, %974, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %976, ^bb255, ^bb258(%971 : i256) loc(#loc3) +// CHECK-NEXT: ^bb255: // pred: ^bb254 +// CHECK-NEXT: %977 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %972, %977 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %978 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %979 = "llvm.intrcall"(%978, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %980 = arith.addi %974, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %981 = arith.divui %980, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb256(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb256(%982: i256 loc({{.*}}:59:4)): // 2 preds: ^bb255, ^bb257 +// CHECK-NEXT: %983 = arith.cmpi ult, %982, %981 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %983, ^bb257(%982 : i256), ^bb258(%971 : i256) loc(#loc3) +// CHECK-NEXT: ^bb257(%984: i256 loc({{.*}}:59:4)): // pred: ^bb256 +// CHECK-NEXT: %985 = arith.addi %979, %984 : i256 loc(#loc3) +// CHECK-NEXT: %986 = llvm.inttoptr %985 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %986 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %987 = arith.addi %984, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb256(%987 : i256) loc(#loc3) +// CHECK-NEXT: ^bb258(%988: i256 loc({{.*}}:59:4)): // 2 preds: ^bb254, ^bb256 +// CHECK-NEXT: %989 = arith.addi %988, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb253(%989 : i256) loc(#loc3) +// CHECK-NEXT: ^bb259: // 2 preds: ^bb251, ^bb253 +// CHECK-NEXT: %990 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %954, %990 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %991 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %992 = "llvm.intrcall"(%991, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb260(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb260(%993: i256 loc({{.*}}:59:4)): // 2 preds: ^bb259, ^bb289 +// CHECK-NEXT: %994 = arith.cmpi ult, %993, %946 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %994, ^bb261(%993 : i256), ^bb290 loc(#loc3) +// CHECK-NEXT: ^bb261(%995: i256 loc({{.*}}:59:4)): // pred: ^bb260 +// CHECK-NEXT: %996 = arith.muli %995, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %997 = arith.addi %947, %996 : i256 loc(#loc3) +// CHECK-NEXT: %998 = arith.addi %992, %995 : i256 loc(#loc3) +// CHECK-NEXT: %999 = llvm.inttoptr %997 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1000 = llvm.load %999 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1001 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %1002 = arith.subi %1001, %947 : i256 loc(#loc3) +// CHECK-NEXT: %1003 = arith.subi %1002, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1004 = arith.cmpi sge, %1000, %1003 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1004, ^bb262, ^bb263 loc(#loc3) // CHECK-NEXT: ^bb262: // pred: ^bb261 -// CHECK-NEXT: %1028 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %1019, %1028 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1029 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1030 = "llvm.intrcall"(%1029, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1031 = arith.addi %1030, %1011 : i256 loc(#loc12) -// CHECK-NEXT: %1032 = arith.addi %1030, %1025 : i256 loc(#loc12) -// CHECK-NEXT: %1033 = arith.subi %1032, %1031 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb263(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb263(%1034: i256 loc({{.*}}:59:4)): // 2 preds: ^bb262, ^bb268 -// CHECK-NEXT: %1035 = arith.cmpi ult, %1034, %1033 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1035, ^bb264(%1034 : i256), ^bb269 loc(#loc12) -// CHECK-NEXT: ^bb264(%1036: i256 loc({{.*}}:59:4)): // pred: ^bb263 -// CHECK-NEXT: %1037 = arith.addi %1031, %1036 : i256 loc(#loc12) -// CHECK-NEXT: %1038 = llvm.inttoptr %1037 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1039 = llvm.load %1038 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1040 = llvm.inttoptr %1037 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %1040 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1041 = arith.cmpi ugt, %1039, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1041, ^bb265, ^bb268(%1036 : i256) loc(#loc12) -// CHECK-NEXT: ^bb265: // pred: ^bb264 -// CHECK-NEXT: %1042 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %1037, %1042 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1043 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1044 = "llvm.intrcall"(%1043, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1045 = arith.addi %1039, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1046 = arith.divui %1045, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb266(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb266(%1047: i256 loc({{.*}}:59:4)): // 2 preds: ^bb265, ^bb267 -// CHECK-NEXT: %1048 = arith.cmpi ult, %1047, %1046 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1048, ^bb267(%1047 : i256), ^bb268(%1036 : i256) loc(#loc12) -// CHECK-NEXT: ^bb267(%1049: i256 loc({{.*}}:59:4)): // pred: ^bb266 -// CHECK-NEXT: %1050 = arith.addi %1044, %1049 : i256 loc(#loc12) -// CHECK-NEXT: %1051 = llvm.inttoptr %1050 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %1051 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1052 = arith.addi %1049, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb266(%1052 : i256) loc(#loc12) -// CHECK-NEXT: ^bb268(%1053: i256 loc({{.*}}:59:4)): // 2 preds: ^bb264, ^bb266 -// CHECK-NEXT: %1054 = arith.addi %1053, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb263(%1054 : i256) loc(#loc12) -// CHECK-NEXT: ^bb269: // 2 preds: ^bb261, ^bb263 -// CHECK-NEXT: %1055 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %1019, %1055 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1056 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1057 = "llvm.intrcall"(%1056, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb270(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb270(%1058: i256 loc({{.*}}:59:4)): // 2 preds: ^bb269, ^bb299 -// CHECK-NEXT: %1059 = arith.cmpi ult, %1058, %1011 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1059, ^bb271(%1058 : i256), ^bb300 loc(#loc12) -// CHECK-NEXT: ^bb271(%1060: i256 loc({{.*}}:59:4)): // pred: ^bb270 -// CHECK-NEXT: %1061 = arith.muli %1060, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1062 = arith.addi %1012, %1061 : i256 loc(#loc12) -// CHECK-NEXT: %1063 = arith.addi %1057, %1060 : i256 loc(#loc12) -// CHECK-NEXT: %1064 = llvm.inttoptr %1062 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1065 = llvm.load %1064 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1066 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %1067 = arith.subi %1066, %1012 : i256 loc(#loc12) -// CHECK-NEXT: %1068 = arith.subi %1067, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1069 = arith.cmpi sge, %1065, %1068 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1069, ^bb272, ^bb273 loc(#loc12) -// CHECK-NEXT: ^bb272: // pred: ^bb271 -// CHECK-NEXT: %1070 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1070, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb273 loc(#loc12) -// CHECK-NEXT: ^bb273: // 2 preds: ^bb271, ^bb272 -// CHECK-NEXT: %1071 = arith.addi %1012, %1065 : i256 loc(#loc12) -// CHECK-NEXT: %1072 = llvm.inttoptr %1071 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1073 = llvm.load %1072 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1074 = arith.addi %1071, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1075 = arith.cmpi ugt, %1073, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1075, ^bb274, ^bb275 loc(#loc12) -// CHECK-NEXT: ^bb274: // pred: ^bb273 -// CHECK-NEXT: %1076 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1076, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb275 loc(#loc12) -// CHECK-NEXT: ^bb275: // 2 preds: ^bb273, ^bb274 -// CHECK-NEXT: %1077 = arith.muli %1073, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1078 = arith.subi %1066, %1077 : i256 loc(#loc12) -// CHECK-NEXT: %1079 = arith.cmpi sgt, %1074, %1078 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1079, ^bb276, ^bb277 loc(#loc12) -// CHECK-NEXT: ^bb276: // pred: ^bb275 -// CHECK-NEXT: %1080 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1080, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb277 loc(#loc12) -// CHECK-NEXT: ^bb277: // 2 preds: ^bb275, ^bb276 -// CHECK-NEXT: %1081 = arith.cmpi ugt, %1073, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1081, ^bb278, ^bb279 loc(#loc12) -// CHECK-NEXT: ^bb278: // pred: ^bb277 -// CHECK-NEXT: %1082 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1082 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1083 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %1083 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1084 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1084, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb279 loc(#loc12) -// CHECK-NEXT: ^bb279: // 2 preds: ^bb277, ^bb278 -// CHECK-NEXT: %1085 = llvm.inttoptr %1063 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1086 = llvm.load %1085 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1087 = llvm.inttoptr %1063 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1073, %1087 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1088 = arith.cmpi ult, %1073, %1086 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1088, ^bb280, ^bb285 loc(#loc12) +// CHECK-NEXT: %1005 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1005, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb263 loc(#loc3) +// CHECK-NEXT: ^bb263: // 2 preds: ^bb261, ^bb262 +// CHECK-NEXT: %1006 = arith.addi %947, %1000 : i256 loc(#loc3) +// CHECK-NEXT: %1007 = llvm.inttoptr %1006 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1008 = llvm.load %1007 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1009 = arith.addi %1006, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1010 = arith.cmpi ugt, %1008, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1010, ^bb264, ^bb265 loc(#loc3) +// CHECK-NEXT: ^bb264: // pred: ^bb263 +// CHECK-NEXT: %1011 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1011, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb265 loc(#loc3) +// CHECK-NEXT: ^bb265: // 2 preds: ^bb263, ^bb264 +// CHECK-NEXT: %1012 = arith.muli %1008, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1013 = arith.subi %1001, %1012 : i256 loc(#loc3) +// CHECK-NEXT: %1014 = arith.cmpi sgt, %1009, %1013 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1014, ^bb266, ^bb267 loc(#loc3) +// CHECK-NEXT: ^bb266: // pred: ^bb265 +// CHECK-NEXT: %1015 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1015, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb267 loc(#loc3) +// CHECK-NEXT: ^bb267: // 2 preds: ^bb265, ^bb266 +// CHECK-NEXT: %1016 = arith.cmpi ugt, %1008, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1016, ^bb268, ^bb269 loc(#loc3) +// CHECK-NEXT: ^bb268: // pred: ^bb267 +// CHECK-NEXT: %1017 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1017 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1018 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %1018 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1019 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1019, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb269 loc(#loc3) +// CHECK-NEXT: ^bb269: // 2 preds: ^bb267, ^bb268 +// CHECK-NEXT: %1020 = llvm.inttoptr %998 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1021 = llvm.load %1020 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %1022 = llvm.inttoptr %998 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1008, %1022 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1023 = arith.cmpi ult, %1008, %1021 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1023, ^bb270, ^bb275 loc(#loc3) +// CHECK-NEXT: ^bb270: // pred: ^bb269 +// CHECK-NEXT: %1024 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %998, %1024 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1025 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1026 = "llvm.intrcall"(%1025, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1027 = arith.addi %1008, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1028 = arith.divui %1027, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1029 = arith.addi %1026, %1028 : i256 loc(#loc3) +// CHECK-NEXT: %1030 = arith.remui %1008, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1031 = arith.cmpi ne, %1030, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1031, ^bb271, ^bb272 loc(#loc3) +// CHECK-NEXT: ^bb271: // pred: ^bb270 +// CHECK-NEXT: %1032 = arith.muli %1030, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1033 = arith.subi %c256_i256, %1032 : i256 loc(#loc3) +// CHECK-NEXT: %1034 = arith.shrui %c-1_i256, %1033 : i256 loc(#loc3) +// CHECK-NEXT: %1035 = arith.subi %1029, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1036 = llvm.inttoptr %1035 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1037 = llvm.load %1036 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %1038 = arith.andi %1037, %1034 : i256 loc(#loc3) +// CHECK-NEXT: %1039 = llvm.inttoptr %1035 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1038, %1039 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb272 loc(#loc3) +// CHECK-NEXT: ^bb272: // 2 preds: ^bb270, ^bb271 +// CHECK-NEXT: %1040 = arith.addi %1021, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1041 = arith.divui %1040, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1042 = arith.addi %1026, %1041 : i256 loc(#loc3) +// CHECK-NEXT: %1043 = arith.subi %1042, %1029 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb273(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb273(%1044: i256 loc({{.*}}:59:4)): // 2 preds: ^bb272, ^bb274 +// CHECK-NEXT: %1045 = arith.cmpi ult, %1044, %1043 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1045, ^bb274(%1044 : i256), ^bb275 loc(#loc3) +// CHECK-NEXT: ^bb274(%1046: i256 loc({{.*}}:59:4)): // pred: ^bb273 +// CHECK-NEXT: %1047 = arith.addi %1029, %1046 : i256 loc(#loc3) +// CHECK-NEXT: %1048 = llvm.inttoptr %1047 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %1048 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1049 = arith.addi %1046, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb273(%1049 : i256) loc(#loc3) +// CHECK-NEXT: ^bb275: // 2 preds: ^bb269, ^bb273 +// CHECK-NEXT: %1050 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %998, %1050 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1051 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1052 = "llvm.intrcall"(%1051, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1053 = arith.cmpi uge, %1008, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1054 = arith.subi %1008, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1055 = arith.select %1053, %1054, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb276(%c0_i256, %1009, %1052, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb276(%1056: i256 loc({{.*}}:59:4), %1057: i256 loc({{.*}}:59:4), %1058: i256 loc({{.*}}:59:4), %1059: i256 loc({{.*}}:59:4)): // 2 preds: ^bb275, ^bb282 +// CHECK-NEXT: %1060 = arith.cmpi ult, %1056, %1055 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1060, ^bb277(%1056, %1057, %1058, %1059 : i256, i256, i256, i256), ^bb283(%1057, %1058, %1059 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb277(%1061: i256 loc({{.*}}:59:4), %1062: i256 loc({{.*}}:59:4), %1063: i256 loc({{.*}}:59:4), %1064: i256 loc({{.*}}:59:4)): // pred: ^bb276 +// CHECK-NEXT: cf.br ^bb278(%c0_i256, %1062, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb278(%1065: i256 loc({{.*}}:59:4), %1066: i256 loc({{.*}}:59:4), %1067: i256 loc({{.*}}:59:4), %1068: i256 loc({{.*}}:59:4)): // 2 preds: ^bb277, ^bb281 +// CHECK-NEXT: %1069 = arith.cmpi ult, %1065, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1069, ^bb279(%1065, %1066, %1067, %1068 : i256, i256, i256, i256), ^bb282(%1066, %1068 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb279(%1070: i256 loc({{.*}}:59:4), %1071: i256 loc({{.*}}:59:4), %1072: i256 loc({{.*}}:59:4), %1073: i256 loc({{.*}}:59:4)): // pred: ^bb278 +// CHECK-NEXT: %1074 = llvm.inttoptr %1071 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1075 = llvm.load %1074 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1076 = arith.cmpi ne, %1075, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1077 = arith.extui %1076 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %1078 = arith.cmpi ne, %1075, %1077 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1078, ^bb280, ^bb281 loc(#loc3) // CHECK-NEXT: ^bb280: // pred: ^bb279 -// CHECK-NEXT: %1089 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %1063, %1089 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1090 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1091 = "llvm.intrcall"(%1090, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1092 = arith.addi %1073, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1093 = arith.divui %1092, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1094 = arith.addi %1091, %1093 : i256 loc(#loc12) -// CHECK-NEXT: %1095 = arith.remui %1073, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1096 = arith.cmpi ne, %1095, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1096, ^bb281, ^bb282 loc(#loc12) -// CHECK-NEXT: ^bb281: // pred: ^bb280 -// CHECK-NEXT: %1097 = arith.muli %1095, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1098 = arith.subi %c256_i256, %1097 : i256 loc(#loc12) -// CHECK-NEXT: %1099 = arith.shrui %c-1_i256, %1098 : i256 loc(#loc12) -// CHECK-NEXT: %1100 = arith.subi %1094, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1101 = llvm.inttoptr %1100 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1102 = llvm.load %1101 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1103 = arith.andi %1102, %1099 : i256 loc(#loc12) -// CHECK-NEXT: %1104 = llvm.inttoptr %1100 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1103, %1104 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb282 loc(#loc12) -// CHECK-NEXT: ^bb282: // 2 preds: ^bb280, ^bb281 -// CHECK-NEXT: %1105 = arith.addi %1086, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1106 = arith.divui %1105, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1107 = arith.addi %1091, %1106 : i256 loc(#loc12) -// CHECK-NEXT: %1108 = arith.subi %1107, %1094 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb283(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb283(%1109: i256 loc({{.*}}:59:4)): // 2 preds: ^bb282, ^bb284 -// CHECK-NEXT: %1110 = arith.cmpi ult, %1109, %1108 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1110, ^bb284(%1109 : i256), ^bb285 loc(#loc12) -// CHECK-NEXT: ^bb284(%1111: i256 loc({{.*}}:59:4)): // pred: ^bb283 -// CHECK-NEXT: %1112 = arith.addi %1094, %1111 : i256 loc(#loc12) -// CHECK-NEXT: %1113 = llvm.inttoptr %1112 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %1113 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1114 = arith.addi %1111, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb283(%1114 : i256) loc(#loc12) -// CHECK-NEXT: ^bb285: // 2 preds: ^bb279, ^bb283 -// CHECK-NEXT: %1115 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %1063, %1115 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1117 = "llvm.intrcall"(%1116, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1118 = arith.cmpi uge, %1073, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1119 = arith.subi %1073, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1120 = arith.select %1118, %1119, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb286(%c0_i256, %1074, %1117, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb286(%1121: i256 loc({{.*}}:59:4), %1122: i256 loc({{.*}}:59:4), %1123: i256 loc({{.*}}:59:4), %1124: i256 loc({{.*}}:59:4)): // 2 preds: ^bb285, ^bb292 -// CHECK-NEXT: %1125 = arith.cmpi ult, %1121, %1120 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1125, ^bb287(%1121, %1122, %1123, %1124 : i256, i256, i256, i256), ^bb293(%1122, %1123, %1124 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb287(%1126: i256 loc({{.*}}:59:4), %1127: i256 loc({{.*}}:59:4), %1128: i256 loc({{.*}}:59:4), %1129: i256 loc({{.*}}:59:4)): // pred: ^bb286 -// CHECK-NEXT: cf.br ^bb288(%c0_i256, %1127, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb288(%1130: i256 loc({{.*}}:59:4), %1131: i256 loc({{.*}}:59:4), %1132: i256 loc({{.*}}:59:4), %1133: i256 loc({{.*}}:59:4)): // 2 preds: ^bb287, ^bb291 -// CHECK-NEXT: %1134 = arith.cmpi ult, %1130, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1134, ^bb289(%1130, %1131, %1132, %1133 : i256, i256, i256, i256), ^bb292(%1131, %1133 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb289(%1135: i256 loc({{.*}}:59:4), %1136: i256 loc({{.*}}:59:4), %1137: i256 loc({{.*}}:59:4), %1138: i256 loc({{.*}}:59:4)): // pred: ^bb288 -// CHECK-NEXT: %1139 = llvm.inttoptr %1136 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1140 = llvm.load %1139 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1141 = arith.cmpi ne, %1140, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1142 = arith.extui %1141 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %1143 = arith.cmpi ne, %1140, %1142 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1143, ^bb290, ^bb291 loc(#loc12) -// CHECK-NEXT: ^bb290: // pred: ^bb289 -// CHECK-NEXT: %1144 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1144, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb291 loc(#loc12) -// CHECK-NEXT: ^bb291: // 2 preds: ^bb289, ^bb290 -// CHECK-NEXT: %1145 = arith.andi %1142, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1146 = arith.shli %1145, %1137 : i256 loc(#loc12) -// CHECK-NEXT: %1147 = arith.ori %1138, %1146 : i256 loc(#loc12) -// CHECK-NEXT: %1148 = arith.addi %1136, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1149 = arith.addi %1137, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1150 = arith.addi %1135, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb288(%1150, %1148, %1149, %1147 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb292(%1151: i256 loc({{.*}}:59:4), %1152: i256 loc({{.*}}:59:4)): // pred: ^bb288 -// CHECK-NEXT: %1153 = llvm.inttoptr %1128 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1152, %1153 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1154 = arith.addi %1128, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1155 = arith.addi %1129, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1156 = arith.addi %1126, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb286(%1156, %1151, %1154, %1155 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb293(%1157: i256 loc({{.*}}:59:4), %1158: i256 loc({{.*}}:59:4), %1159: i256 loc({{.*}}:59:4)): // pred: ^bb286 -// CHECK-NEXT: %1160 = arith.cmpi ult, %1159, %1073 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1160, ^bb294(%1159, %1157, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb299(%1060 : i256) loc(#loc12) -// CHECK-NEXT: ^bb294(%1161: i256 loc({{.*}}:59:4), %1162: i256 loc({{.*}}:59:4), %1163: i256 loc({{.*}}:59:4), %1164: i256 loc({{.*}}:59:4)): // 2 preds: ^bb293, ^bb297 -// CHECK-NEXT: %1165 = arith.cmpi ult, %1161, %1073 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1165, ^bb295(%1161, %1162, %1163, %1164 : i256, i256, i256, i256), ^bb298(%1164 : i256) loc(#loc12) -// CHECK-NEXT: ^bb295(%1166: i256 loc({{.*}}:59:4), %1167: i256 loc({{.*}}:59:4), %1168: i256 loc({{.*}}:59:4), %1169: i256 loc({{.*}}:59:4)): // pred: ^bb294 -// CHECK-NEXT: %1170 = llvm.inttoptr %1167 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1171 = llvm.load %1170 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1172 = arith.cmpi ne, %1171, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1173 = arith.extui %1172 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %1174 = arith.cmpi ne, %1171, %1173 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1174, ^bb296, ^bb297 loc(#loc12) +// CHECK-NEXT: %1079 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1079, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb281 loc(#loc3) +// CHECK-NEXT: ^bb281: // 2 preds: ^bb279, ^bb280 +// CHECK-NEXT: %1080 = arith.andi %1077, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1081 = arith.shli %1080, %1072 : i256 loc(#loc3) +// CHECK-NEXT: %1082 = arith.ori %1073, %1081 : i256 loc(#loc3) +// CHECK-NEXT: %1083 = arith.addi %1071, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1084 = arith.addi %1072, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1085 = arith.addi %1070, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb278(%1085, %1083, %1084, %1082 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb282(%1086: i256 loc({{.*}}:59:4), %1087: i256 loc({{.*}}:59:4)): // pred: ^bb278 +// CHECK-NEXT: %1088 = llvm.inttoptr %1063 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1087, %1088 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1089 = arith.addi %1063, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1090 = arith.addi %1064, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1091 = arith.addi %1061, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb276(%1091, %1086, %1089, %1090 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb283(%1092: i256 loc({{.*}}:59:4), %1093: i256 loc({{.*}}:59:4), %1094: i256 loc({{.*}}:59:4)): // pred: ^bb276 +// CHECK-NEXT: %1095 = arith.cmpi ult, %1094, %1008 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1095, ^bb284(%1094, %1092, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb289(%995 : i256) loc(#loc3) +// CHECK-NEXT: ^bb284(%1096: i256 loc({{.*}}:59:4), %1097: i256 loc({{.*}}:59:4), %1098: i256 loc({{.*}}:59:4), %1099: i256 loc({{.*}}:59:4)): // 2 preds: ^bb283, ^bb287 +// CHECK-NEXT: %1100 = arith.cmpi ult, %1096, %1008 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1100, ^bb285(%1096, %1097, %1098, %1099 : i256, i256, i256, i256), ^bb288(%1099 : i256) loc(#loc3) +// CHECK-NEXT: ^bb285(%1101: i256 loc({{.*}}:59:4), %1102: i256 loc({{.*}}:59:4), %1103: i256 loc({{.*}}:59:4), %1104: i256 loc({{.*}}:59:4)): // pred: ^bb284 +// CHECK-NEXT: %1105 = llvm.inttoptr %1102 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1106 = llvm.load %1105 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1107 = arith.cmpi ne, %1106, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1108 = arith.extui %1107 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %1109 = arith.cmpi ne, %1106, %1108 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1109, ^bb286, ^bb287 loc(#loc3) +// CHECK-NEXT: ^bb286: // pred: ^bb285 +// CHECK-NEXT: %1110 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1110, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb287 loc(#loc3) +// CHECK-NEXT: ^bb287: // 2 preds: ^bb285, ^bb286 +// CHECK-NEXT: %1111 = arith.andi %1108, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1112 = arith.shli %1111, %1103 : i256 loc(#loc3) +// CHECK-NEXT: %1113 = arith.ori %1104, %1112 : i256 loc(#loc3) +// CHECK-NEXT: %1114 = arith.addi %1102, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1115 = arith.addi %1103, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1116 = arith.addi %1101, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb284(%1116, %1114, %1115, %1113 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb288(%1117: i256 loc({{.*}}:59:4)): // pred: ^bb284 +// CHECK-NEXT: %1118 = llvm.inttoptr %1093 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1117, %1118 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb289(%995 : i256) loc(#loc3) +// CHECK-NEXT: ^bb289(%1119: i256 loc({{.*}}:59:4)): // 2 preds: ^bb283, ^bb288 +// CHECK-NEXT: %1120 = arith.addi %1119, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb260(%1120 : i256) loc(#loc3) +// CHECK-NEXT: ^bb290: // pred: ^bb260 +// CHECK-NEXT: %1121 = arith.addi %916, %c96_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1122 = arith.addi %908, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb291(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb291(%1123: i256 loc({{.*}}:59:4)): // 2 preds: ^bb290, ^bb294 +// CHECK-NEXT: %1124 = arith.cmpi ult, %1123, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1124, ^bb292(%1123 : i256), ^bb295 loc(#loc3) +// CHECK-NEXT: ^bb292(%1125: i256 loc({{.*}}:59:4)): // pred: ^bb291 +// CHECK-NEXT: %1126 = arith.muli %1125, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1127 = arith.addi %1121, %1126 : i256 loc(#loc3) +// CHECK-NEXT: %1128 = arith.addi %1122, %1125 : i256 loc(#loc3) +// CHECK-NEXT: %1129 = llvm.inttoptr %1127 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1130 = llvm.load %1129 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1131 = arith.andi %1130, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1132 = arith.cmpi ne, %1130, %1131 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1132, ^bb293, ^bb294 loc(#loc3) +// CHECK-NEXT: ^bb293: // pred: ^bb292 +// CHECK-NEXT: %1133 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1133, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb294 loc(#loc3) +// CHECK-NEXT: ^bb294: // 2 preds: ^bb292, ^bb293 +// CHECK-NEXT: %1134 = llvm.inttoptr %1128 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1131, %1134 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1135 = arith.addi %1125, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb291(%1135 : i256) loc(#loc3) +// CHECK-NEXT: ^bb295: // pred: ^bb291 +// CHECK-NEXT: %1136 = arith.addi %916, %c160_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1137 = llvm.inttoptr %1136 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1138 = llvm.load %1137 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1139 = "llvm.intrcall"(%c23_i256, %1138) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1140 = arith.cmpi ne, %1138, %1139 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1140, ^bb296, ^bb297 loc(#loc3) // CHECK-NEXT: ^bb296: // pred: ^bb295 -// CHECK-NEXT: %1175 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1175, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb297 loc(#loc12) +// CHECK-NEXT: %1141 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1141, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb297 loc(#loc3) // CHECK-NEXT: ^bb297: // 2 preds: ^bb295, ^bb296 -// CHECK-NEXT: %1176 = arith.andi %1173, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1177 = arith.shli %1176, %1168 : i256 loc(#loc12) -// CHECK-NEXT: %1178 = arith.ori %1169, %1177 : i256 loc(#loc12) -// CHECK-NEXT: %1179 = arith.addi %1167, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1180 = arith.addi %1168, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1181 = arith.addi %1166, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb294(%1181, %1179, %1180, %1178 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb298(%1182: i256 loc({{.*}}:59:4)): // pred: ^bb294 -// CHECK-NEXT: %1183 = llvm.inttoptr %1158 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1182, %1183 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb299(%1060 : i256) loc(#loc12) -// CHECK-NEXT: ^bb299(%1184: i256 loc({{.*}}:59:4)): // 2 preds: ^bb293, ^bb298 -// CHECK-NEXT: %1185 = arith.addi %1184, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb270(%1185 : i256) loc(#loc12) -// CHECK-NEXT: ^bb300: // pred: ^bb270 -// CHECK-NEXT: %1186 = arith.addi %981, %c96_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1187 = arith.addi %973, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb301(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb301(%1188: i256 loc({{.*}}:59:4)): // 2 preds: ^bb300, ^bb304 -// CHECK-NEXT: %1189 = arith.cmpi ult, %1188, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1189, ^bb302(%1188 : i256), ^bb305 loc(#loc12) -// CHECK-NEXT: ^bb302(%1190: i256 loc({{.*}}:59:4)): // pred: ^bb301 -// CHECK-NEXT: %1191 = arith.muli %1190, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1192 = arith.addi %1186, %1191 : i256 loc(#loc12) -// CHECK-NEXT: %1193 = arith.addi %1187, %1190 : i256 loc(#loc12) -// CHECK-NEXT: %1194 = llvm.inttoptr %1192 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1195 = llvm.load %1194 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1196 = arith.andi %1195, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1197 = arith.cmpi ne, %1195, %1196 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1197, ^bb303, ^bb304 loc(#loc12) -// CHECK-NEXT: ^bb303: // pred: ^bb302 -// CHECK-NEXT: %1198 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1198, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb304 loc(#loc12) -// CHECK-NEXT: ^bb304: // 2 preds: ^bb302, ^bb303 -// CHECK-NEXT: %1199 = llvm.inttoptr %1193 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1196, %1199 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1200 = arith.addi %1190, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb301(%1200 : i256) loc(#loc12) -// CHECK-NEXT: ^bb305: // pred: ^bb301 -// CHECK-NEXT: %1201 = arith.addi %981, %c160_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1202 = llvm.inttoptr %1201 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1203 = llvm.load %1202 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1204 = "llvm.intrcall"(%c23_i256, %1203) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1205 = arith.cmpi ne, %1203, %1204 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1205, ^bb306, ^bb307 loc(#loc12) +// CHECK-NEXT: %1142 = arith.andi %1139, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1143 = arith.addi %916, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1144 = llvm.inttoptr %1143 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1145 = llvm.load %1144 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1146 = arith.andi %1145, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1147 = arith.cmpi ne, %1145, %1146 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1147, ^bb298, ^bb299 loc(#loc3) +// CHECK-NEXT: ^bb298: // pred: ^bb297 +// CHECK-NEXT: %1148 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1148, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb299 loc(#loc3) +// CHECK-NEXT: ^bb299: // 2 preds: ^bb297, ^bb298 +// CHECK-NEXT: %1149 = arith.shli %1146, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1150 = arith.ori %1142, %1149 : i256 loc(#loc3) +// CHECK-NEXT: %1151 = arith.addi %916, %c224_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1152 = llvm.inttoptr %1151 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1153 = llvm.load %1152 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1154 = arith.andi %1153, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1155 = arith.cmpi ne, %1153, %1154 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1155, ^bb300, ^bb301 loc(#loc3) +// CHECK-NEXT: ^bb300: // pred: ^bb299 +// CHECK-NEXT: %1156 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1156, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb301 loc(#loc3) +// CHECK-NEXT: ^bb301: // 2 preds: ^bb299, ^bb300 +// CHECK-NEXT: %1157 = arith.shrui %1154, %c224_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1158 = arith.shli %1157, %c200_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1159 = arith.ori %1150, %1158 : i256 loc(#loc3) +// CHECK-NEXT: %1160 = arith.addi %908, %c4_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1161 = llvm.inttoptr %1160 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1162 = llvm.load %1161 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %1163 = arith.andi %1162, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1164 = arith.ori %1163, %1159 : i256 loc(#loc3) +// CHECK-NEXT: %1165 = llvm.inttoptr %1160 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1164, %1165 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1166 = arith.addi %904, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb236(%1166 : i256) loc(#loc3) +// CHECK-NEXT: ^bb302(%1167: i256 loc({{.*}}:59:4)): // pred: ^bb236 +// CHECK-NEXT: %1168 = arith.addi %1167, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb211(%1168 : i256) loc(#loc3) +// CHECK-NEXT: ^bb303: // pred: ^bb211 +// CHECK-NEXT: %1169 = arith.addi %1, %c640_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb304(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb304(%1170: i256 loc({{.*}}:59:4)): // 2 preds: ^bb303, ^bb307 +// CHECK-NEXT: %1171 = arith.cmpi ult, %1170, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1171, ^bb305(%1170 : i256), ^bb308 loc(#loc3) +// CHECK-NEXT: ^bb305(%1172: i256 loc({{.*}}:59:4)): // pred: ^bb304 +// CHECK-NEXT: %1173 = arith.muli %1172, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1174 = arith.addi %1169, %1173 : i256 loc(#loc3) +// CHECK-NEXT: %1175 = arith.addi %1172, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1176 = llvm.inttoptr %1174 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1177 = llvm.load %1176 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1178 = arith.andi %1177, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1179 = arith.cmpi ne, %1177, %1178 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1179, ^bb306, ^bb307 loc(#loc3) // CHECK-NEXT: ^bb306: // pred: ^bb305 -// CHECK-NEXT: %1206 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1206, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb307 loc(#loc12) +// CHECK-NEXT: %1180 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1180, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb307 loc(#loc3) // CHECK-NEXT: ^bb307: // 2 preds: ^bb305, ^bb306 -// CHECK-NEXT: %1207 = arith.andi %1204, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1208 = arith.addi %981, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1209 = llvm.inttoptr %1208 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1210 = llvm.load %1209 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1211 = arith.andi %1210, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1212 = arith.cmpi ne, %1210, %1211 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1212, ^bb308, ^bb309 loc(#loc12) -// CHECK-NEXT: ^bb308: // pred: ^bb307 -// CHECK-NEXT: %1213 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1213, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb309 loc(#loc12) -// CHECK-NEXT: ^bb309: // 2 preds: ^bb307, ^bb308 -// CHECK-NEXT: %1214 = arith.shli %1211, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1215 = arith.ori %1207, %1214 : i256 loc(#loc12) -// CHECK-NEXT: %1216 = arith.addi %981, %c224_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1217 = llvm.inttoptr %1216 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1218 = llvm.load %1217 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1219 = arith.andi %1218, %c-26959946667150639794667015087019630673637144422540572481103610249216_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1220 = arith.cmpi ne, %1218, %1219 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1220, ^bb310, ^bb311 loc(#loc12) -// CHECK-NEXT: ^bb310: // pred: ^bb309 -// CHECK-NEXT: %1221 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1221, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb311 loc(#loc12) -// CHECK-NEXT: ^bb311: // 2 preds: ^bb309, ^bb310 -// CHECK-NEXT: %1222 = arith.shrui %1219, %c224_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1223 = arith.shli %1222, %c200_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1224 = arith.ori %1215, %1223 : i256 loc(#loc12) -// CHECK-NEXT: %1225 = arith.addi %973, %c4_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1226 = llvm.inttoptr %1225 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1227 = llvm.load %1226 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1228 = arith.andi %1227, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1229 = arith.ori %1228, %1224 : i256 loc(#loc12) -// CHECK-NEXT: %1230 = llvm.inttoptr %1225 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1229, %1230 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1231 = arith.addi %969, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb246(%1231 : i256) loc(#loc12) -// CHECK-NEXT: ^bb312(%1232: i256 loc({{.*}}:59:4)): // pred: ^bb246 -// CHECK-NEXT: %1233 = arith.addi %1232, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb224(%1233 : i256) loc(#loc12) -// CHECK-NEXT: ^bb313: // pred: ^bb224 -// CHECK-NEXT: %1234 = arith.addi %1, %c640_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb314(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb314(%1235: i256 loc({{.*}}:59:4)): // 2 preds: ^bb313, ^bb317 -// CHECK-NEXT: %1236 = arith.cmpi ult, %1235, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1236, ^bb315(%1235 : i256), ^bb318 loc(#loc12) -// CHECK-NEXT: ^bb315(%1237: i256 loc({{.*}}:59:4)): // pred: ^bb314 -// CHECK-NEXT: %1238 = arith.muli %1237, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1239 = arith.addi %1234, %1238 : i256 loc(#loc12) -// CHECK-NEXT: %1240 = arith.addi %1237, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1241 = llvm.inttoptr %1239 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1242 = llvm.load %1241 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1243 = arith.andi %1242, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1244 = arith.cmpi ne, %1242, %1243 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1244, ^bb316, ^bb317 loc(#loc12) -// CHECK-NEXT: ^bb316: // pred: ^bb315 -// CHECK-NEXT: %1245 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1245, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb317 loc(#loc12) -// CHECK-NEXT: ^bb317: // 2 preds: ^bb315, ^bb316 -// CHECK-NEXT: %1246 = llvm.inttoptr %1240 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1243, %1246 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1247 = arith.addi %1237, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb314(%1247 : i256) loc(#loc12) -// CHECK-NEXT: ^bb318: // pred: ^bb314 -// CHECK-NEXT: %1248 = arith.addi %1, %c800_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb319(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb319(%1249: i256 loc({{.*}}:59:4)): // 2 preds: ^bb318, ^bb322 -// CHECK-NEXT: %1250 = arith.cmpi ult, %1249, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1250, ^bb320(%1249 : i256), ^bb323 loc(#loc12) -// CHECK-NEXT: ^bb320(%1251: i256 loc({{.*}}:59:4)): // pred: ^bb319 -// CHECK-NEXT: %1252 = arith.muli %1251, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1253 = arith.addi %1248, %1252 : i256 loc(#loc12) -// CHECK-NEXT: %1254 = arith.addi %1251, %c36_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1255 = llvm.inttoptr %1253 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1256 = llvm.load %1255 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1257 = "llvm.intrcall"(%c23_i256, %1256) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1258 = arith.cmpi ne, %1256, %1257 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1258, ^bb321, ^bb322 loc(#loc12) -// CHECK-NEXT: ^bb321: // pred: ^bb320 -// CHECK-NEXT: %1259 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1259, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb322 loc(#loc12) -// CHECK-NEXT: ^bb322: // 2 preds: ^bb320, ^bb321 -// CHECK-NEXT: %1260 = arith.andi %1257, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1261 = llvm.inttoptr %1254 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1260, %1261 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1262 = arith.addi %1251, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb319(%1262 : i256) loc(#loc12) -// CHECK-NEXT: ^bb323: // pred: ^bb319 -// CHECK-NEXT: %1263 = arith.addi %1, %c960_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb324(%c0_i256, %1263, %c41_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb324(%1264: i256 loc({{.*}}:59:4), %1265: i256 loc({{.*}}:59:4), %1266: i256 loc({{.*}}:59:4), %1267: i256 loc({{.*}}:59:4)): // 2 preds: ^bb323, ^bb330 -// CHECK-NEXT: %1268 = arith.cmpi ult, %1264, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1268, ^bb325(%1264, %1265, %1266, %1267 : i256, i256, i256, i256), ^bb331(%1265, %1266, %1267 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb325(%1269: i256 loc({{.*}}:59:4), %1270: i256 loc({{.*}}:59:4), %1271: i256 loc({{.*}}:59:4), %1272: i256 loc({{.*}}:59:4)): // pred: ^bb324 -// CHECK-NEXT: cf.br ^bb326(%c0_i256, %1270, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb326(%1273: i256 loc({{.*}}:59:4), %1274: i256 loc({{.*}}:59:4), %1275: i256 loc({{.*}}:59:4), %1276: i256 loc({{.*}}:59:4)): // 2 preds: ^bb325, ^bb329 -// CHECK-NEXT: %1277 = arith.cmpi ult, %1273, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1277, ^bb327(%1273, %1274, %1275, %1276 : i256, i256, i256, i256), ^bb330(%1274, %1276 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb327(%1278: i256 loc({{.*}}:59:4), %1279: i256 loc({{.*}}:59:4), %1280: i256 loc({{.*}}:59:4), %1281: i256 loc({{.*}}:59:4)): // pred: ^bb326 -// CHECK-NEXT: %1282 = llvm.inttoptr %1279 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1283 = llvm.load %1282 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1284 = "llvm.intrcall"(%c8_i256, %1283) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1285 = arith.cmpi ne, %1283, %1284 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1285, ^bb328, ^bb329 loc(#loc12) +// CHECK-NEXT: %1181 = llvm.inttoptr %1175 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1178, %1181 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1182 = arith.addi %1172, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb304(%1182 : i256) loc(#loc3) +// CHECK-NEXT: ^bb308: // pred: ^bb304 +// CHECK-NEXT: %1183 = arith.addi %1, %c800_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb309(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb309(%1184: i256 loc({{.*}}:59:4)): // 2 preds: ^bb308, ^bb312 +// CHECK-NEXT: %1185 = arith.cmpi ult, %1184, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1185, ^bb310(%1184 : i256), ^bb313 loc(#loc3) +// CHECK-NEXT: ^bb310(%1186: i256 loc({{.*}}:59:4)): // pred: ^bb309 +// CHECK-NEXT: %1187 = arith.muli %1186, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1188 = arith.addi %1183, %1187 : i256 loc(#loc3) +// CHECK-NEXT: %1189 = arith.addi %1186, %c36_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1190 = llvm.inttoptr %1188 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1191 = llvm.load %1190 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1192 = "llvm.intrcall"(%c23_i256, %1191) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1193 = arith.cmpi ne, %1191, %1192 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1193, ^bb311, ^bb312 loc(#loc3) +// CHECK-NEXT: ^bb311: // pred: ^bb310 +// CHECK-NEXT: %1194 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1194, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb312 loc(#loc3) +// CHECK-NEXT: ^bb312: // 2 preds: ^bb310, ^bb311 +// CHECK-NEXT: %1195 = arith.andi %1192, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1196 = llvm.inttoptr %1189 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1195, %1196 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1197 = arith.addi %1186, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb309(%1197 : i256) loc(#loc3) +// CHECK-NEXT: ^bb313: // pred: ^bb309 +// CHECK-NEXT: %1198 = arith.addi %1, %c960_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb314(%c0_i256, %1198, %c41_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb314(%1199: i256 loc({{.*}}:59:4), %1200: i256 loc({{.*}}:59:4), %1201: i256 loc({{.*}}:59:4), %1202: i256 loc({{.*}}:59:4)): // 2 preds: ^bb313, ^bb320 +// CHECK-NEXT: %1203 = arith.cmpi ult, %1199, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1203, ^bb315(%1199, %1200, %1201, %1202 : i256, i256, i256, i256), ^bb321(%1200, %1201, %1202 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb315(%1204: i256 loc({{.*}}:59:4), %1205: i256 loc({{.*}}:59:4), %1206: i256 loc({{.*}}:59:4), %1207: i256 loc({{.*}}:59:4)): // pred: ^bb314 +// CHECK-NEXT: cf.br ^bb316(%c0_i256, %1205, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb316(%1208: i256 loc({{.*}}:59:4), %1209: i256 loc({{.*}}:59:4), %1210: i256 loc({{.*}}:59:4), %1211: i256 loc({{.*}}:59:4)): // 2 preds: ^bb315, ^bb319 +// CHECK-NEXT: %1212 = arith.cmpi ult, %1208, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1212, ^bb317(%1208, %1209, %1210, %1211 : i256, i256, i256, i256), ^bb320(%1209, %1211 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb317(%1213: i256 loc({{.*}}:59:4), %1214: i256 loc({{.*}}:59:4), %1215: i256 loc({{.*}}:59:4), %1216: i256 loc({{.*}}:59:4)): // pred: ^bb316 +// CHECK-NEXT: %1217 = llvm.inttoptr %1214 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1218 = llvm.load %1217 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1219 = "llvm.intrcall"(%c8_i256, %1218) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1220 = arith.cmpi ne, %1218, %1219 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1220, ^bb318, ^bb319 loc(#loc3) +// CHECK-NEXT: ^bb318: // pred: ^bb317 +// CHECK-NEXT: %1221 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1221, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb319 loc(#loc3) +// CHECK-NEXT: ^bb319: // 2 preds: ^bb317, ^bb318 +// CHECK-NEXT: %1222 = arith.andi %1219, %c4722366482869645213695_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1223 = arith.shli %1222, %1215 : i256 loc(#loc3) +// CHECK-NEXT: %1224 = arith.ori %1216, %1223 : i256 loc(#loc3) +// CHECK-NEXT: %1225 = arith.addi %1214, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1226 = arith.addi %1215, %c72_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1227 = arith.addi %1213, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb316(%1227, %1225, %1226, %1224 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb320(%1228: i256 loc({{.*}}:59:4), %1229: i256 loc({{.*}}:59:4)): // pred: ^bb316 +// CHECK-NEXT: %1230 = llvm.inttoptr %1206 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1229, %1230 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1231 = arith.addi %1206, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1232 = arith.addi %1207, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1233 = arith.addi %1204, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb314(%1233, %1228, %1231, %1232 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb321(%1234: i256 loc({{.*}}:59:4), %1235: i256 loc({{.*}}:59:4), %1236: i256 loc({{.*}}:59:4)): // pred: ^bb314 +// CHECK-NEXT: %1237 = arith.cmpi ult, %1236, %c7_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1237, ^bb322(%1236, %1234, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb327 loc(#loc3) +// CHECK-NEXT: ^bb322(%1238: i256 loc({{.*}}:59:4), %1239: i256 loc({{.*}}:59:4), %1240: i256 loc({{.*}}:59:4), %1241: i256 loc({{.*}}:59:4)): // 2 preds: ^bb321, ^bb325 +// CHECK-NEXT: %1242 = arith.cmpi ult, %1238, %c7_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1242, ^bb323(%1238, %1239, %1240, %1241 : i256, i256, i256, i256), ^bb326(%1241 : i256) loc(#loc3) +// CHECK-NEXT: ^bb323(%1243: i256 loc({{.*}}:59:4), %1244: i256 loc({{.*}}:59:4), %1245: i256 loc({{.*}}:59:4), %1246: i256 loc({{.*}}:59:4)): // pred: ^bb322 +// CHECK-NEXT: %1247 = llvm.inttoptr %1244 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1248 = llvm.load %1247 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1249 = "llvm.intrcall"(%c8_i256, %1248) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1250 = arith.cmpi ne, %1248, %1249 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1250, ^bb324, ^bb325 loc(#loc3) +// CHECK-NEXT: ^bb324: // pred: ^bb323 +// CHECK-NEXT: %1251 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1251, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb325 loc(#loc3) +// CHECK-NEXT: ^bb325: // 2 preds: ^bb323, ^bb324 +// CHECK-NEXT: %1252 = arith.andi %1249, %c4722366482869645213695_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1253 = arith.shli %1252, %1245 : i256 loc(#loc3) +// CHECK-NEXT: %1254 = arith.ori %1246, %1253 : i256 loc(#loc3) +// CHECK-NEXT: %1255 = arith.addi %1244, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1256 = arith.addi %1245, %c72_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1257 = arith.addi %1243, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb322(%1257, %1255, %1256, %1254 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb326(%1258: i256 loc({{.*}}:59:4)): // pred: ^bb322 +// CHECK-NEXT: %1259 = llvm.inttoptr %1235 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1258, %1259 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb327 loc(#loc3) +// CHECK-NEXT: ^bb327: // 2 preds: ^bb321, ^bb326 +// CHECK-NEXT: %1260 = arith.addi %1, %c1184_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1261 = llvm.inttoptr %1260 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1262 = llvm.load %1261 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1263 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %1264 = arith.subi %1263, %1 : i256 loc(#loc3) +// CHECK-NEXT: %1265 = arith.subi %1264, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1266 = arith.cmpi sge, %1262, %1265 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1266, ^bb328, ^bb329 loc(#loc3) // CHECK-NEXT: ^bb328: // pred: ^bb327 -// CHECK-NEXT: %1286 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1286, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb329 loc(#loc12) +// CHECK-NEXT: %1267 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1267, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb329 loc(#loc3) // CHECK-NEXT: ^bb329: // 2 preds: ^bb327, ^bb328 -// CHECK-NEXT: %1287 = arith.andi %1284, %c4722366482869645213695_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1288 = arith.shli %1287, %1280 : i256 loc(#loc12) -// CHECK-NEXT: %1289 = arith.ori %1281, %1288 : i256 loc(#loc12) -// CHECK-NEXT: %1290 = arith.addi %1279, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1291 = arith.addi %1280, %c72_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1292 = arith.addi %1278, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb326(%1292, %1290, %1291, %1289 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb330(%1293: i256 loc({{.*}}:59:4), %1294: i256 loc({{.*}}:59:4)): // pred: ^bb326 -// CHECK-NEXT: %1295 = llvm.inttoptr %1271 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1294, %1295 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1296 = arith.addi %1271, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1297 = arith.addi %1272, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1298 = arith.addi %1269, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb324(%1298, %1293, %1296, %1297 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb331(%1299: i256 loc({{.*}}:59:4), %1300: i256 loc({{.*}}:59:4), %1301: i256 loc({{.*}}:59:4)): // pred: ^bb324 -// CHECK-NEXT: %1302 = arith.cmpi ult, %1301, %c7_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1302, ^bb332(%1301, %1299, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb337 loc(#loc12) -// CHECK-NEXT: ^bb332(%1303: i256 loc({{.*}}:59:4), %1304: i256 loc({{.*}}:59:4), %1305: i256 loc({{.*}}:59:4), %1306: i256 loc({{.*}}:59:4)): // 2 preds: ^bb331, ^bb335 -// CHECK-NEXT: %1307 = arith.cmpi ult, %1303, %c7_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1307, ^bb333(%1303, %1304, %1305, %1306 : i256, i256, i256, i256), ^bb336(%1306 : i256) loc(#loc12) -// CHECK-NEXT: ^bb333(%1308: i256 loc({{.*}}:59:4), %1309: i256 loc({{.*}}:59:4), %1310: i256 loc({{.*}}:59:4), %1311: i256 loc({{.*}}:59:4)): // pred: ^bb332 -// CHECK-NEXT: %1312 = llvm.inttoptr %1309 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1313 = llvm.load %1312 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1314 = "llvm.intrcall"(%c8_i256, %1313) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1315 = arith.cmpi ne, %1313, %1314 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1315, ^bb334, ^bb335 loc(#loc12) -// CHECK-NEXT: ^bb334: // pred: ^bb333 -// CHECK-NEXT: %1316 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1316, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb335 loc(#loc12) -// CHECK-NEXT: ^bb335: // 2 preds: ^bb333, ^bb334 -// CHECK-NEXT: %1317 = arith.andi %1314, %c4722366482869645213695_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1318 = arith.shli %1317, %1310 : i256 loc(#loc12) -// CHECK-NEXT: %1319 = arith.ori %1311, %1318 : i256 loc(#loc12) -// CHECK-NEXT: %1320 = arith.addi %1309, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1321 = arith.addi %1310, %c72_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1322 = arith.addi %1308, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb332(%1322, %1320, %1321, %1319 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb336(%1323: i256 loc({{.*}}:59:4)): // pred: ^bb332 -// CHECK-NEXT: %1324 = llvm.inttoptr %1300 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1323, %1324 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb337 loc(#loc12) -// CHECK-NEXT: ^bb337: // 2 preds: ^bb331, ^bb336 -// CHECK-NEXT: %1325 = arith.addi %1, %c1184_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1326 = llvm.inttoptr %1325 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1327 = llvm.load %1326 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1328 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %1329 = arith.subi %1328, %1 : i256 loc(#loc12) -// CHECK-NEXT: %1330 = arith.subi %1329, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1331 = arith.cmpi sge, %1327, %1330 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1331, ^bb338, ^bb339 loc(#loc12) +// CHECK-NEXT: %1268 = arith.addi %1, %1262 : i256 loc(#loc3) +// CHECK-NEXT: %1269 = llvm.inttoptr %1268 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1270 = llvm.load %1269 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1271 = arith.addi %1268, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1272 = arith.cmpi ugt, %1270, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1272, ^bb330, ^bb331 loc(#loc3) +// CHECK-NEXT: ^bb330: // pred: ^bb329 +// CHECK-NEXT: %1273 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1273, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb331 loc(#loc3) +// CHECK-NEXT: ^bb331: // 2 preds: ^bb329, ^bb330 +// CHECK-NEXT: %1274 = arith.subi %1263, %1270 : i256 loc(#loc3) +// CHECK-NEXT: %1275 = arith.cmpi sgt, %1271, %1274 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1275, ^bb332, ^bb333 loc(#loc3) +// CHECK-NEXT: ^bb332: // pred: ^bb331 +// CHECK-NEXT: %1276 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1276, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb333 loc(#loc3) +// CHECK-NEXT: ^bb333: // 2 preds: ^bb331, ^bb332 +// CHECK-NEXT: call @__sol.copy.calldata.storage.string(%1271, %1270, %c44_i256) : (i256, i256, i256) -> () loc(#loc3) +// CHECK-NEXT: %1277 = arith.addi %1, %c1216_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb334(%c0_i256, %1277, %c45_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb334(%1278: i256 loc({{.*}}:59:4), %1279: i256 loc({{.*}}:59:4), %1280: i256 loc({{.*}}:59:4), %1281: i256 loc({{.*}}:59:4)): // 2 preds: ^bb333, ^bb340 +// CHECK-NEXT: %1282 = arith.cmpi ult, %1278, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1282, ^bb335(%1278, %1279, %1280, %1281 : i256, i256, i256, i256), ^bb341(%1279, %1280, %1281 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb335(%1283: i256 loc({{.*}}:59:4), %1284: i256 loc({{.*}}:59:4), %1285: i256 loc({{.*}}:59:4), %1286: i256 loc({{.*}}:59:4)): // pred: ^bb334 +// CHECK-NEXT: cf.br ^bb336(%c0_i256, %1284, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb336(%1287: i256 loc({{.*}}:59:4), %1288: i256 loc({{.*}}:59:4), %1289: i256 loc({{.*}}:59:4), %1290: i256 loc({{.*}}:59:4)): // 2 preds: ^bb335, ^bb339 +// CHECK-NEXT: %1291 = arith.cmpi ult, %1287, %c4_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1291, ^bb337(%1287, %1288, %1289, %1290 : i256, i256, i256, i256), ^bb340(%1288, %1290 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb337(%1292: i256 loc({{.*}}:59:4), %1293: i256 loc({{.*}}:59:4), %1294: i256 loc({{.*}}:59:4), %1295: i256 loc({{.*}}:59:4)): // pred: ^bb336 +// CHECK-NEXT: %1296 = llvm.inttoptr %1293 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1297 = llvm.load %1296 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1298 = arith.andi %1297, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1299 = arith.cmpi ne, %1297, %1298 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1299, ^bb338, ^bb339 loc(#loc3) // CHECK-NEXT: ^bb338: // pred: ^bb337 -// CHECK-NEXT: %1332 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1332, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb339 loc(#loc12) +// CHECK-NEXT: %1300 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1300, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb339 loc(#loc3) // CHECK-NEXT: ^bb339: // 2 preds: ^bb337, ^bb338 -// CHECK-NEXT: %1333 = arith.addi %1, %1327 : i256 loc(#loc12) -// CHECK-NEXT: %1334 = llvm.inttoptr %1333 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1335 = llvm.load %1334 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1336 = arith.addi %1333, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1337 = arith.cmpi ugt, %1335, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1337, ^bb340, ^bb341 loc(#loc12) -// CHECK-NEXT: ^bb340: // pred: ^bb339 -// CHECK-NEXT: %1338 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1338, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb341 loc(#loc12) -// CHECK-NEXT: ^bb341: // 2 preds: ^bb339, ^bb340 -// CHECK-NEXT: %1339 = arith.subi %1328, %1335 : i256 loc(#loc12) -// CHECK-NEXT: %1340 = arith.cmpi sgt, %1336, %1339 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1340, ^bb342, ^bb343 loc(#loc12) -// CHECK-NEXT: ^bb342: // pred: ^bb341 -// CHECK-NEXT: %1341 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1341, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb343 loc(#loc12) -// CHECK-NEXT: ^bb343: // 2 preds: ^bb341, ^bb342 -// CHECK-NEXT: %1342 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1343 = llvm.load %1342 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1344 = arith.shrui %1343, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1345 = arith.andi %1343, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1346 = arith.cmpi eq, %1345, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1347 = arith.andi %1344, %c127_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1348 = arith.select %1346, %1347, %1344 : i256 loc(#loc12) -// CHECK-NEXT: %1349 = arith.cmpi ult, %1348, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1350 = arith.extui %1349 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %1351 = arith.cmpi eq, %1345, %1350 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1351, ^bb344, ^bb345 loc(#loc12) +// CHECK-NEXT: %1301 = arith.shrui %1298, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1302 = arith.andi %1301, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1303 = arith.shli %1302, %1294 : i256 loc(#loc3) +// CHECK-NEXT: %1304 = arith.ori %1295, %1303 : i256 loc(#loc3) +// CHECK-NEXT: %1305 = arith.addi %1293, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1306 = arith.addi %1294, %c64_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1307 = arith.addi %1292, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb336(%1307, %1305, %1306, %1304 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb340(%1308: i256 loc({{.*}}:59:4), %1309: i256 loc({{.*}}:59:4)): // pred: ^bb336 +// CHECK-NEXT: %1310 = llvm.inttoptr %1285 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1309, %1310 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1311 = arith.addi %1285, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1312 = arith.addi %1286, %c4_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1313 = arith.addi %1283, %c4_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb334(%1313, %1308, %1311, %1312 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb341(%1314: i256 loc({{.*}}:59:4), %1315: i256 loc({{.*}}:59:4), %1316: i256 loc({{.*}}:59:4)): // pred: ^bb334 +// CHECK-NEXT: %1317 = arith.cmpi ult, %1316, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1317, ^bb342(%1316, %1314, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb347 loc(#loc3) +// CHECK-NEXT: ^bb342(%1318: i256 loc({{.*}}:59:4), %1319: i256 loc({{.*}}:59:4), %1320: i256 loc({{.*}}:59:4), %1321: i256 loc({{.*}}:59:4)): // 2 preds: ^bb341, ^bb345 +// CHECK-NEXT: %1322 = arith.cmpi ult, %1318, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1322, ^bb343(%1318, %1319, %1320, %1321 : i256, i256, i256, i256), ^bb346(%1321 : i256) loc(#loc3) +// CHECK-NEXT: ^bb343(%1323: i256 loc({{.*}}:59:4), %1324: i256 loc({{.*}}:59:4), %1325: i256 loc({{.*}}:59:4), %1326: i256 loc({{.*}}:59:4)): // pred: ^bb342 +// CHECK-NEXT: %1327 = llvm.inttoptr %1324 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1328 = llvm.load %1327 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1329 = arith.andi %1328, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1330 = arith.cmpi ne, %1328, %1329 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1330, ^bb344, ^bb345 loc(#loc3) // CHECK-NEXT: ^bb344: // pred: ^bb343 -// CHECK-NEXT: %1352 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1352 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1353 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c34_i256, %1353 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1354 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1354, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb345 loc(#loc12) +// CHECK-NEXT: %1331 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1331, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb345 loc(#loc3) // CHECK-NEXT: ^bb345: // 2 preds: ^bb343, ^bb344 -// CHECK-NEXT: %1355 = arith.cmpi ugt, %1348, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1355, ^bb346, ^bb349 loc(#loc12) -// CHECK-NEXT: ^bb346: // pred: ^bb345 -// CHECK-NEXT: %1356 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c44_i256, %1356 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1357 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1358 = "llvm.intrcall"(%1357, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1359 = arith.addi %1335, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1360 = arith.divui %1359, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1361 = arith.addi %1358, %1360 : i256 loc(#loc12) -// CHECK-NEXT: %1362 = arith.cmpi ult, %1335, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1363 = arith.select %1362, %1358, %1361 : i256 loc(#loc12) -// CHECK-NEXT: %1364 = arith.addi %1348, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1365 = arith.divui %1364, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1366 = arith.addi %1358, %1365 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb347(%1363 : i256) loc(#loc12) -// CHECK-NEXT: ^bb347(%1367: i256 loc({{.*}}:59:4)): // 2 preds: ^bb346, ^bb348 -// CHECK-NEXT: %1368 = arith.cmpi ult, %1367, %1366 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1368, ^bb348(%1367 : i256), ^bb349 loc(#loc12) -// CHECK-NEXT: ^bb348(%1369: i256 loc({{.*}}:59:4)): // pred: ^bb347 -// CHECK-NEXT: %1370 = llvm.inttoptr %1369 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %1370 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1371 = arith.addi %1369, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb347(%1371 : i256) loc(#loc12) -// CHECK-NEXT: ^bb349: // 2 preds: ^bb345, ^bb347 -// CHECK-NEXT: %1372 = arith.cmpi ugt, %1335, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1372, ^bb353, ^bb350 loc(#loc12) -// CHECK-NEXT: ^bb350: // pred: ^bb349 -// CHECK-NEXT: %1373 = arith.cmpi ne, %1335, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1373, ^bb352, ^bb351 loc(#loc12) -// CHECK-NEXT: ^bb351: // pred: ^bb350 -// CHECK-NEXT: %1374 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %1374 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb359 loc(#loc12) -// CHECK-NEXT: ^bb352: // pred: ^bb350 -// CHECK-NEXT: %1375 = llvm.inttoptr %1336 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1376 = llvm.load %1375 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1377 = arith.muli %1335, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1378 = arith.subi %c256_i256, %1377 : i256 loc(#loc12) -// CHECK-NEXT: %1379 = arith.shli %c-1_i256, %1378 : i256 loc(#loc12) -// CHECK-NEXT: %1380 = arith.andi %1376, %1379 : i256 loc(#loc12) -// CHECK-NEXT: %1381 = arith.muli %1335, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1382 = arith.ori %1380, %1381 : i256 loc(#loc12) -// CHECK-NEXT: %1383 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1382, %1383 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb359 loc(#loc12) -// CHECK-NEXT: ^bb353: // pred: ^bb349 -// CHECK-NEXT: %1384 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c44_i256, %1384 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1385 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1386 = "llvm.intrcall"(%1385, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1387 = arith.andi %1335, %c-32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb354(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb354(%1388: i256 loc({{.*}}:59:4)): // 2 preds: ^bb353, ^bb355 -// CHECK-NEXT: %1389 = arith.cmpi ult, %1388, %1387 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1389, ^bb355(%1388 : i256), ^bb356 loc(#loc12) -// CHECK-NEXT: ^bb355(%1390: i256 loc({{.*}}:59:4)): // pred: ^bb354 -// CHECK-NEXT: %1391 = arith.divui %1390, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1392 = arith.addi %1336, %1390 : i256 loc(#loc12) -// CHECK-NEXT: %1393 = llvm.inttoptr %1392 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1394 = llvm.load %1393 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1395 = arith.addi %1386, %1391 : i256 loc(#loc12) -// CHECK-NEXT: %1396 = llvm.inttoptr %1395 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1394, %1396 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1397 = arith.addi %1390, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb354(%1397 : i256) loc(#loc12) -// CHECK-NEXT: ^bb356: // pred: ^bb354 -// CHECK-NEXT: %1398 = arith.cmpi ult, %1387, %1335 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1398, ^bb357, ^bb358 loc(#loc12) -// CHECK-NEXT: ^bb357: // pred: ^bb356 -// CHECK-NEXT: %1399 = arith.andi %1335, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1400 = arith.divui %1387, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1401 = arith.addi %1336, %1387 : i256 loc(#loc12) -// CHECK-NEXT: %1402 = llvm.inttoptr %1401 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1403 = llvm.load %1402 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1404 = arith.muli %1399, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1405 = arith.subi %c256_i256, %1404 : i256 loc(#loc12) -// CHECK-NEXT: %1406 = arith.shli %c-1_i256, %1405 : i256 loc(#loc12) -// CHECK-NEXT: %1407 = arith.andi %1403, %1406 : i256 loc(#loc12) -// CHECK-NEXT: %1408 = arith.addi %1386, %1400 : i256 loc(#loc12) -// CHECK-NEXT: %1409 = llvm.inttoptr %1408 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1407, %1409 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb358 loc(#loc12) -// CHECK-NEXT: ^bb358: // 2 preds: ^bb356, ^bb357 -// CHECK-NEXT: %1410 = arith.muli %1335, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1411 = arith.ori %1410, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1412 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1411, %1412 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb359 loc(#loc12) -// CHECK-NEXT: ^bb359: // 3 preds: ^bb351, ^bb352, ^bb358 -// CHECK-NEXT: %1413 = arith.addi %1, %c1216_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb360(%c0_i256, %1413, %c45_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb360(%1414: i256 loc({{.*}}:59:4), %1415: i256 loc({{.*}}:59:4), %1416: i256 loc({{.*}}:59:4), %1417: i256 loc({{.*}}:59:4)): // 2 preds: ^bb359, ^bb366 -// CHECK-NEXT: %1418 = arith.cmpi ult, %1414, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1418, ^bb361(%1414, %1415, %1416, %1417 : i256, i256, i256, i256), ^bb367(%1415, %1416, %1417 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb361(%1419: i256 loc({{.*}}:59:4), %1420: i256 loc({{.*}}:59:4), %1421: i256 loc({{.*}}:59:4), %1422: i256 loc({{.*}}:59:4)): // pred: ^bb360 -// CHECK-NEXT: cf.br ^bb362(%c0_i256, %1420, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb362(%1423: i256 loc({{.*}}:59:4), %1424: i256 loc({{.*}}:59:4), %1425: i256 loc({{.*}}:59:4), %1426: i256 loc({{.*}}:59:4)): // 2 preds: ^bb361, ^bb365 -// CHECK-NEXT: %1427 = arith.cmpi ult, %1423, %c4_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1427, ^bb363(%1423, %1424, %1425, %1426 : i256, i256, i256, i256), ^bb366(%1424, %1426 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb363(%1428: i256 loc({{.*}}:59:4), %1429: i256 loc({{.*}}:59:4), %1430: i256 loc({{.*}}:59:4), %1431: i256 loc({{.*}}:59:4)): // pred: ^bb362 -// CHECK-NEXT: %1432 = llvm.inttoptr %1429 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1433 = llvm.load %1432 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1434 = arith.andi %1433, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1435 = arith.cmpi ne, %1433, %1434 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1435, ^bb364, ^bb365 loc(#loc12) -// CHECK-NEXT: ^bb364: // pred: ^bb363 -// CHECK-NEXT: %1436 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1436, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb365 loc(#loc12) -// CHECK-NEXT: ^bb365: // 2 preds: ^bb363, ^bb364 -// CHECK-NEXT: %1437 = arith.shrui %1434, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1438 = arith.andi %1437, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1439 = arith.shli %1438, %1430 : i256 loc(#loc12) -// CHECK-NEXT: %1440 = arith.ori %1431, %1439 : i256 loc(#loc12) -// CHECK-NEXT: %1441 = arith.addi %1429, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1442 = arith.addi %1430, %c64_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1443 = arith.addi %1428, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb362(%1443, %1441, %1442, %1440 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb366(%1444: i256 loc({{.*}}:59:4), %1445: i256 loc({{.*}}:59:4)): // pred: ^bb362 -// CHECK-NEXT: %1446 = llvm.inttoptr %1421 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1445, %1446 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1447 = arith.addi %1421, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1448 = arith.addi %1422, %c4_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1449 = arith.addi %1419, %c4_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb360(%1449, %1444, %1447, %1448 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb367(%1450: i256 loc({{.*}}:59:4), %1451: i256 loc({{.*}}:59:4), %1452: i256 loc({{.*}}:59:4)): // pred: ^bb360 -// CHECK-NEXT: %1453 = arith.cmpi ult, %1452, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1453, ^bb368(%1452, %1450, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb373 loc(#loc12) -// CHECK-NEXT: ^bb368(%1454: i256 loc({{.*}}:59:4), %1455: i256 loc({{.*}}:59:4), %1456: i256 loc({{.*}}:59:4), %1457: i256 loc({{.*}}:59:4)): // 2 preds: ^bb367, ^bb371 -// CHECK-NEXT: %1458 = arith.cmpi ult, %1454, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1458, ^bb369(%1454, %1455, %1456, %1457 : i256, i256, i256, i256), ^bb372(%1457 : i256) loc(#loc12) -// CHECK-NEXT: ^bb369(%1459: i256 loc({{.*}}:59:4), %1460: i256 loc({{.*}}:59:4), %1461: i256 loc({{.*}}:59:4), %1462: i256 loc({{.*}}:59:4)): // pred: ^bb368 -// CHECK-NEXT: %1463 = llvm.inttoptr %1460 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1464 = llvm.load %1463 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1465 = arith.andi %1464, %c-6277101735386680763835789423207666416102355444464034512896_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1466 = arith.cmpi ne, %1464, %1465 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1466, ^bb370, ^bb371 loc(#loc12) -// CHECK-NEXT: ^bb370: // pred: ^bb369 -// CHECK-NEXT: %1467 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1467, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb371 loc(#loc12) -// CHECK-NEXT: ^bb371: // 2 preds: ^bb369, ^bb370 -// CHECK-NEXT: %1468 = arith.shrui %1465, %c192_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1469 = arith.andi %1468, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1470 = arith.shli %1469, %1461 : i256 loc(#loc12) -// CHECK-NEXT: %1471 = arith.ori %1462, %1470 : i256 loc(#loc12) -// CHECK-NEXT: %1472 = arith.addi %1460, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1473 = arith.addi %1461, %c64_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1474 = arith.addi %1459, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb368(%1474, %1472, %1473, %1471 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb372(%1475: i256 loc({{.*}}:59:4)): // pred: ^bb368 -// CHECK-NEXT: %1476 = llvm.inttoptr %1451 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1475, %1476 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb373 loc(#loc12) -// CHECK-NEXT: ^bb373: // 2 preds: ^bb367, ^bb372 -// CHECK-NEXT: %1477 = arith.addi %1, %c1376_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb374(%c0_i256, %1477, %c47_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb374(%1478: i256 loc({{.*}}:59:4), %1479: i256 loc({{.*}}:59:4), %1480: i256 loc({{.*}}:59:4), %1481: i256 loc({{.*}}:59:4)): // 2 preds: ^bb373, ^bb380 -// CHECK-NEXT: %1482 = arith.cmpi ult, %1478, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1482, ^bb375(%1478, %1479, %1480, %1481 : i256, i256, i256, i256), ^bb381(%1479, %1480, %1481 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb375(%1483: i256 loc({{.*}}:59:4), %1484: i256 loc({{.*}}:59:4), %1485: i256 loc({{.*}}:59:4), %1486: i256 loc({{.*}}:59:4)): // pred: ^bb374 -// CHECK-NEXT: cf.br ^bb376(%c0_i256, %1484, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb376(%1487: i256 loc({{.*}}:59:4), %1488: i256 loc({{.*}}:59:4), %1489: i256 loc({{.*}}:59:4), %1490: i256 loc({{.*}}:59:4)): // 2 preds: ^bb375, ^bb379 -// CHECK-NEXT: %1491 = arith.cmpi ult, %1487, %c16_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1491, ^bb377(%1487, %1488, %1489, %1490 : i256, i256, i256, i256), ^bb380(%1488, %1490 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb377(%1492: i256 loc({{.*}}:59:4), %1493: i256 loc({{.*}}:59:4), %1494: i256 loc({{.*}}:59:4), %1495: i256 loc({{.*}}:59:4)): // pred: ^bb376 -// CHECK-NEXT: %1496 = llvm.inttoptr %1493 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1497 = llvm.load %1496 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1498 = "llvm.intrcall"(%c1_i256, %1497) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1499 = arith.cmpi ne, %1497, %1498 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1499, ^bb378, ^bb379 loc(#loc12) -// CHECK-NEXT: ^bb378: // pred: ^bb377 -// CHECK-NEXT: %1500 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1500, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb379 loc(#loc12) -// CHECK-NEXT: ^bb379: // 2 preds: ^bb377, ^bb378 -// CHECK-NEXT: %1501 = arith.andi %1498, %c65535_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1502 = arith.shli %1501, %1494 : i256 loc(#loc12) -// CHECK-NEXT: %1503 = arith.ori %1495, %1502 : i256 loc(#loc12) -// CHECK-NEXT: %1504 = arith.addi %1493, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1505 = arith.addi %1494, %c16_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1506 = arith.addi %1492, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb376(%1506, %1504, %1505, %1503 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb380(%1507: i256 loc({{.*}}:59:4), %1508: i256 loc({{.*}}:59:4)): // pred: ^bb376 -// CHECK-NEXT: %1509 = llvm.inttoptr %1485 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1508, %1509 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1510 = arith.addi %1485, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1511 = arith.addi %1486, %c16_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1512 = arith.addi %1483, %c16_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb374(%1512, %1507, %1510, %1511 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb381(%1513: i256 loc({{.*}}:59:4), %1514: i256 loc({{.*}}:59:4), %1515: i256 loc({{.*}}:59:4)): // pred: ^bb374 -// CHECK-NEXT: %1516 = arith.cmpi ult, %1515, %c9_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1516, ^bb382(%1515, %1513, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb387 loc(#loc12) -// CHECK-NEXT: ^bb382(%1517: i256 loc({{.*}}:59:4), %1518: i256 loc({{.*}}:59:4), %1519: i256 loc({{.*}}:59:4), %1520: i256 loc({{.*}}:59:4)): // 2 preds: ^bb381, ^bb385 -// CHECK-NEXT: %1521 = arith.cmpi ult, %1517, %c9_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1521, ^bb383(%1517, %1518, %1519, %1520 : i256, i256, i256, i256), ^bb386(%1520 : i256) loc(#loc12) -// CHECK-NEXT: ^bb383(%1522: i256 loc({{.*}}:59:4), %1523: i256 loc({{.*}}:59:4), %1524: i256 loc({{.*}}:59:4), %1525: i256 loc({{.*}}:59:4)): // pred: ^bb382 -// CHECK-NEXT: %1526 = llvm.inttoptr %1523 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1527 = llvm.load %1526 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1528 = "llvm.intrcall"(%c1_i256, %1527) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1529 = arith.cmpi ne, %1527, %1528 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1529, ^bb384, ^bb385 loc(#loc12) -// CHECK-NEXT: ^bb384: // pred: ^bb383 -// CHECK-NEXT: %1530 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1530, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb385 loc(#loc12) -// CHECK-NEXT: ^bb385: // 2 preds: ^bb383, ^bb384 -// CHECK-NEXT: %1531 = arith.andi %1528, %c65535_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1532 = arith.shli %1531, %1524 : i256 loc(#loc12) -// CHECK-NEXT: %1533 = arith.ori %1525, %1532 : i256 loc(#loc12) -// CHECK-NEXT: %1534 = arith.addi %1523, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1535 = arith.addi %1524, %c16_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1536 = arith.addi %1522, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb382(%1536, %1534, %1535, %1533 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb386(%1537: i256 loc({{.*}}:59:4)): // pred: ^bb382 -// CHECK-NEXT: %1538 = llvm.inttoptr %1514 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1537, %1538 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb387 loc(#loc12) -// CHECK-NEXT: ^bb387: // 2 preds: ^bb381, ^bb386 -// CHECK-NEXT: %1539 = arith.addi %1, %c1664_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb388(%c0_i256, %1539, %c48_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb388(%1540: i256 loc({{.*}}:59:4), %1541: i256 loc({{.*}}:59:4), %1542: i256 loc({{.*}}:59:4), %1543: i256 loc({{.*}}:59:4)): // 2 preds: ^bb387, ^bb394 -// CHECK-NEXT: %1544 = arith.cmpi ult, %1540, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1544, ^bb389(%1540, %1541, %1542, %1543 : i256, i256, i256, i256), ^bb395(%1541, %1542, %1543 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb389(%1545: i256 loc({{.*}}:59:4), %1546: i256 loc({{.*}}:59:4), %1547: i256 loc({{.*}}:59:4), %1548: i256 loc({{.*}}:59:4)): // pred: ^bb388 -// CHECK-NEXT: cf.br ^bb390(%c0_i256, %1546, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb390(%1549: i256 loc({{.*}}:59:4), %1550: i256 loc({{.*}}:59:4), %1551: i256 loc({{.*}}:59:4), %1552: i256 loc({{.*}}:59:4)): // 2 preds: ^bb389, ^bb393 -// CHECK-NEXT: %1553 = arith.cmpi ult, %1549, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1553, ^bb391(%1549, %1550, %1551, %1552 : i256, i256, i256, i256), ^bb394(%1550, %1552 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb391(%1554: i256 loc({{.*}}:59:4), %1555: i256 loc({{.*}}:59:4), %1556: i256 loc({{.*}}:59:4), %1557: i256 loc({{.*}}:59:4)): // pred: ^bb390 -// CHECK-NEXT: %1558 = llvm.inttoptr %1555 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1559 = llvm.load %1558 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1560 = arith.andi %1559, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1561 = arith.cmpi ne, %1559, %1560 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1561, ^bb392, ^bb393 loc(#loc12) -// CHECK-NEXT: ^bb392: // pred: ^bb391 -// CHECK-NEXT: %1562 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1562, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb393 loc(#loc12) -// CHECK-NEXT: ^bb393: // 2 preds: ^bb391, ^bb392 -// CHECK-NEXT: %1563 = arith.shli %1560, %1556 : i256 loc(#loc12) -// CHECK-NEXT: %1564 = arith.ori %1557, %1563 : i256 loc(#loc12) -// CHECK-NEXT: %1565 = arith.addi %1555, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1566 = arith.addi %1556, %c128_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1567 = arith.addi %1554, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb390(%1567, %1565, %1566, %1564 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb394(%1568: i256 loc({{.*}}:59:4), %1569: i256 loc({{.*}}:59:4)): // pred: ^bb390 -// CHECK-NEXT: %1570 = llvm.inttoptr %1547 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1569, %1570 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1571 = arith.addi %1547, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1572 = arith.addi %1548, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1573 = arith.addi %1545, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb388(%1573, %1568, %1571, %1572 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb395(%1574: i256 loc({{.*}}:59:4), %1575: i256 loc({{.*}}:59:4), %1576: i256 loc({{.*}}:59:4)): // pred: ^bb388 -// CHECK-NEXT: %1577 = arith.cmpi ult, %1576, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1577, ^bb396(%1576, %1574, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb401 loc(#loc12) -// CHECK-NEXT: ^bb396(%1578: i256 loc({{.*}}:59:4), %1579: i256 loc({{.*}}:59:4), %1580: i256 loc({{.*}}:59:4), %1581: i256 loc({{.*}}:59:4)): // 2 preds: ^bb395, ^bb399 -// CHECK-NEXT: %1582 = arith.cmpi ult, %1578, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1582, ^bb397(%1578, %1579, %1580, %1581 : i256, i256, i256, i256), ^bb400(%1581 : i256) loc(#loc12) -// CHECK-NEXT: ^bb397(%1583: i256 loc({{.*}}:59:4), %1584: i256 loc({{.*}}:59:4), %1585: i256 loc({{.*}}:59:4), %1586: i256 loc({{.*}}:59:4)): // pred: ^bb396 -// CHECK-NEXT: %1587 = llvm.inttoptr %1584 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1588 = llvm.load %1587 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1589 = arith.andi %1588, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1590 = arith.cmpi ne, %1588, %1589 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1590, ^bb398, ^bb399 loc(#loc12) -// CHECK-NEXT: ^bb398: // pred: ^bb397 -// CHECK-NEXT: %1591 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1591, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb399 loc(#loc12) -// CHECK-NEXT: ^bb399: // 2 preds: ^bb397, ^bb398 -// CHECK-NEXT: %1592 = arith.shli %1589, %1585 : i256 loc(#loc12) -// CHECK-NEXT: %1593 = arith.ori %1586, %1592 : i256 loc(#loc12) -// CHECK-NEXT: %1594 = arith.addi %1584, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1595 = arith.addi %1585, %c128_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1596 = arith.addi %1583, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb396(%1596, %1594, %1595, %1593 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb400(%1597: i256 loc({{.*}}:59:4)): // pred: ^bb396 -// CHECK-NEXT: %1598 = llvm.inttoptr %1575 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1597, %1598 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb401 loc(#loc12) -// CHECK-NEXT: ^bb401: // 2 preds: ^bb395, ^bb400 -// CHECK-NEXT: %1599 = arith.addi %1, %c1760_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb402(%c0_i256, %1599, %c50_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb402(%1600: i256 loc({{.*}}:59:4), %1601: i256 loc({{.*}}:59:4), %1602: i256 loc({{.*}}:59:4), %1603: i256 loc({{.*}}:59:4)): // 2 preds: ^bb401, ^bb408 -// CHECK-NEXT: %1604 = arith.cmpi ult, %1600, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1604, ^bb403(%1600, %1601, %1602, %1603 : i256, i256, i256, i256), ^bb409(%1601, %1602, %1603 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb403(%1605: i256 loc({{.*}}:59:4), %1606: i256 loc({{.*}}:59:4), %1607: i256 loc({{.*}}:59:4), %1608: i256 loc({{.*}}:59:4)): // pred: ^bb402 -// CHECK-NEXT: cf.br ^bb404(%c0_i256, %1606, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb404(%1609: i256 loc({{.*}}:59:4), %1610: i256 loc({{.*}}:59:4), %1611: i256 loc({{.*}}:59:4), %1612: i256 loc({{.*}}:59:4)): // 2 preds: ^bb403, ^bb407 -// CHECK-NEXT: %1613 = arith.cmpi ult, %1609, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1613, ^bb405(%1609, %1610, %1611, %1612 : i256, i256, i256, i256), ^bb408(%1610, %1612 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb405(%1614: i256 loc({{.*}}:59:4), %1615: i256 loc({{.*}}:59:4), %1616: i256 loc({{.*}}:59:4), %1617: i256 loc({{.*}}:59:4)): // pred: ^bb404 -// CHECK-NEXT: %1618 = llvm.inttoptr %1615 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1619 = llvm.load %1618 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1620 = "llvm.intrcall"(%c15_i256, %1619) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1621 = arith.cmpi ne, %1619, %1620 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1621, ^bb406, ^bb407 loc(#loc12) +// CHECK-NEXT: %1332 = arith.shrui %1329, %c192_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1333 = arith.andi %1332, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1334 = arith.shli %1333, %1325 : i256 loc(#loc3) +// CHECK-NEXT: %1335 = arith.ori %1326, %1334 : i256 loc(#loc3) +// CHECK-NEXT: %1336 = arith.addi %1324, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1337 = arith.addi %1325, %c64_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1338 = arith.addi %1323, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb342(%1338, %1336, %1337, %1335 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb346(%1339: i256 loc({{.*}}:59:4)): // pred: ^bb342 +// CHECK-NEXT: %1340 = llvm.inttoptr %1315 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1339, %1340 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb347 loc(#loc3) +// CHECK-NEXT: ^bb347: // 2 preds: ^bb341, ^bb346 +// CHECK-NEXT: %1341 = arith.addi %1, %c1376_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb348(%c0_i256, %1341, %c47_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb348(%1342: i256 loc({{.*}}:59:4), %1343: i256 loc({{.*}}:59:4), %1344: i256 loc({{.*}}:59:4), %1345: i256 loc({{.*}}:59:4)): // 2 preds: ^bb347, ^bb354 +// CHECK-NEXT: %1346 = arith.cmpi ult, %1342, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1346, ^bb349(%1342, %1343, %1344, %1345 : i256, i256, i256, i256), ^bb355(%1343, %1344, %1345 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb349(%1347: i256 loc({{.*}}:59:4), %1348: i256 loc({{.*}}:59:4), %1349: i256 loc({{.*}}:59:4), %1350: i256 loc({{.*}}:59:4)): // pred: ^bb348 +// CHECK-NEXT: cf.br ^bb350(%c0_i256, %1348, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb350(%1351: i256 loc({{.*}}:59:4), %1352: i256 loc({{.*}}:59:4), %1353: i256 loc({{.*}}:59:4), %1354: i256 loc({{.*}}:59:4)): // 2 preds: ^bb349, ^bb353 +// CHECK-NEXT: %1355 = arith.cmpi ult, %1351, %c16_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1355, ^bb351(%1351, %1352, %1353, %1354 : i256, i256, i256, i256), ^bb354(%1352, %1354 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb351(%1356: i256 loc({{.*}}:59:4), %1357: i256 loc({{.*}}:59:4), %1358: i256 loc({{.*}}:59:4), %1359: i256 loc({{.*}}:59:4)): // pred: ^bb350 +// CHECK-NEXT: %1360 = llvm.inttoptr %1357 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1361 = llvm.load %1360 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1362 = "llvm.intrcall"(%c1_i256, %1361) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1363 = arith.cmpi ne, %1361, %1362 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1363, ^bb352, ^bb353 loc(#loc3) +// CHECK-NEXT: ^bb352: // pred: ^bb351 +// CHECK-NEXT: %1364 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1364, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb353 loc(#loc3) +// CHECK-NEXT: ^bb353: // 2 preds: ^bb351, ^bb352 +// CHECK-NEXT: %1365 = arith.andi %1362, %c65535_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1366 = arith.shli %1365, %1358 : i256 loc(#loc3) +// CHECK-NEXT: %1367 = arith.ori %1359, %1366 : i256 loc(#loc3) +// CHECK-NEXT: %1368 = arith.addi %1357, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1369 = arith.addi %1358, %c16_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1370 = arith.addi %1356, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb350(%1370, %1368, %1369, %1367 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb354(%1371: i256 loc({{.*}}:59:4), %1372: i256 loc({{.*}}:59:4)): // pred: ^bb350 +// CHECK-NEXT: %1373 = llvm.inttoptr %1349 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1372, %1373 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1374 = arith.addi %1349, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1375 = arith.addi %1350, %c16_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1376 = arith.addi %1347, %c16_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb348(%1376, %1371, %1374, %1375 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb355(%1377: i256 loc({{.*}}:59:4), %1378: i256 loc({{.*}}:59:4), %1379: i256 loc({{.*}}:59:4)): // pred: ^bb348 +// CHECK-NEXT: %1380 = arith.cmpi ult, %1379, %c9_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1380, ^bb356(%1379, %1377, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb361 loc(#loc3) +// CHECK-NEXT: ^bb356(%1381: i256 loc({{.*}}:59:4), %1382: i256 loc({{.*}}:59:4), %1383: i256 loc({{.*}}:59:4), %1384: i256 loc({{.*}}:59:4)): // 2 preds: ^bb355, ^bb359 +// CHECK-NEXT: %1385 = arith.cmpi ult, %1381, %c9_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1385, ^bb357(%1381, %1382, %1383, %1384 : i256, i256, i256, i256), ^bb360(%1384 : i256) loc(#loc3) +// CHECK-NEXT: ^bb357(%1386: i256 loc({{.*}}:59:4), %1387: i256 loc({{.*}}:59:4), %1388: i256 loc({{.*}}:59:4), %1389: i256 loc({{.*}}:59:4)): // pred: ^bb356 +// CHECK-NEXT: %1390 = llvm.inttoptr %1387 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1391 = llvm.load %1390 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1392 = "llvm.intrcall"(%c1_i256, %1391) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1393 = arith.cmpi ne, %1391, %1392 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1393, ^bb358, ^bb359 loc(#loc3) +// CHECK-NEXT: ^bb358: // pred: ^bb357 +// CHECK-NEXT: %1394 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1394, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb359 loc(#loc3) +// CHECK-NEXT: ^bb359: // 2 preds: ^bb357, ^bb358 +// CHECK-NEXT: %1395 = arith.andi %1392, %c65535_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1396 = arith.shli %1395, %1388 : i256 loc(#loc3) +// CHECK-NEXT: %1397 = arith.ori %1389, %1396 : i256 loc(#loc3) +// CHECK-NEXT: %1398 = arith.addi %1387, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1399 = arith.addi %1388, %c16_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1400 = arith.addi %1386, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb356(%1400, %1398, %1399, %1397 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb360(%1401: i256 loc({{.*}}:59:4)): // pred: ^bb356 +// CHECK-NEXT: %1402 = llvm.inttoptr %1378 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1401, %1402 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb361 loc(#loc3) +// CHECK-NEXT: ^bb361: // 2 preds: ^bb355, ^bb360 +// CHECK-NEXT: %1403 = arith.addi %1, %c1664_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb362(%c0_i256, %1403, %c48_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb362(%1404: i256 loc({{.*}}:59:4), %1405: i256 loc({{.*}}:59:4), %1406: i256 loc({{.*}}:59:4), %1407: i256 loc({{.*}}:59:4)): // 2 preds: ^bb361, ^bb368 +// CHECK-NEXT: %1408 = arith.cmpi ult, %1404, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1408, ^bb363(%1404, %1405, %1406, %1407 : i256, i256, i256, i256), ^bb369(%1405, %1406, %1407 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb363(%1409: i256 loc({{.*}}:59:4), %1410: i256 loc({{.*}}:59:4), %1411: i256 loc({{.*}}:59:4), %1412: i256 loc({{.*}}:59:4)): // pred: ^bb362 +// CHECK-NEXT: cf.br ^bb364(%c0_i256, %1410, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb364(%1413: i256 loc({{.*}}:59:4), %1414: i256 loc({{.*}}:59:4), %1415: i256 loc({{.*}}:59:4), %1416: i256 loc({{.*}}:59:4)): // 2 preds: ^bb363, ^bb367 +// CHECK-NEXT: %1417 = arith.cmpi ult, %1413, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1417, ^bb365(%1413, %1414, %1415, %1416 : i256, i256, i256, i256), ^bb368(%1414, %1416 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb365(%1418: i256 loc({{.*}}:59:4), %1419: i256 loc({{.*}}:59:4), %1420: i256 loc({{.*}}:59:4), %1421: i256 loc({{.*}}:59:4)): // pred: ^bb364 +// CHECK-NEXT: %1422 = llvm.inttoptr %1419 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1423 = llvm.load %1422 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1424 = arith.andi %1423, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1425 = arith.cmpi ne, %1423, %1424 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1425, ^bb366, ^bb367 loc(#loc3) +// CHECK-NEXT: ^bb366: // pred: ^bb365 +// CHECK-NEXT: %1426 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1426, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb367 loc(#loc3) +// CHECK-NEXT: ^bb367: // 2 preds: ^bb365, ^bb366 +// CHECK-NEXT: %1427 = arith.shli %1424, %1420 : i256 loc(#loc3) +// CHECK-NEXT: %1428 = arith.ori %1421, %1427 : i256 loc(#loc3) +// CHECK-NEXT: %1429 = arith.addi %1419, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1430 = arith.addi %1420, %c128_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1431 = arith.addi %1418, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb364(%1431, %1429, %1430, %1428 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb368(%1432: i256 loc({{.*}}:59:4), %1433: i256 loc({{.*}}:59:4)): // pred: ^bb364 +// CHECK-NEXT: %1434 = llvm.inttoptr %1411 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1433, %1434 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1435 = arith.addi %1411, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1436 = arith.addi %1412, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1437 = arith.addi %1409, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb362(%1437, %1432, %1435, %1436 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb369(%1438: i256 loc({{.*}}:59:4), %1439: i256 loc({{.*}}:59:4), %1440: i256 loc({{.*}}:59:4)): // pred: ^bb362 +// CHECK-NEXT: %1441 = arith.cmpi ult, %1440, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1441, ^bb370(%1440, %1438, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb375 loc(#loc3) +// CHECK-NEXT: ^bb370(%1442: i256 loc({{.*}}:59:4), %1443: i256 loc({{.*}}:59:4), %1444: i256 loc({{.*}}:59:4), %1445: i256 loc({{.*}}:59:4)): // 2 preds: ^bb369, ^bb373 +// CHECK-NEXT: %1446 = arith.cmpi ult, %1442, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1446, ^bb371(%1442, %1443, %1444, %1445 : i256, i256, i256, i256), ^bb374(%1445 : i256) loc(#loc3) +// CHECK-NEXT: ^bb371(%1447: i256 loc({{.*}}:59:4), %1448: i256 loc({{.*}}:59:4), %1449: i256 loc({{.*}}:59:4), %1450: i256 loc({{.*}}:59:4)): // pred: ^bb370 +// CHECK-NEXT: %1451 = llvm.inttoptr %1448 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1452 = llvm.load %1451 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1453 = arith.andi %1452, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1454 = arith.cmpi ne, %1452, %1453 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1454, ^bb372, ^bb373 loc(#loc3) +// CHECK-NEXT: ^bb372: // pred: ^bb371 +// CHECK-NEXT: %1455 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1455, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb373 loc(#loc3) +// CHECK-NEXT: ^bb373: // 2 preds: ^bb371, ^bb372 +// CHECK-NEXT: %1456 = arith.shli %1453, %1449 : i256 loc(#loc3) +// CHECK-NEXT: %1457 = arith.ori %1450, %1456 : i256 loc(#loc3) +// CHECK-NEXT: %1458 = arith.addi %1448, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1459 = arith.addi %1449, %c128_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1460 = arith.addi %1447, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb370(%1460, %1458, %1459, %1457 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb374(%1461: i256 loc({{.*}}:59:4)): // pred: ^bb370 +// CHECK-NEXT: %1462 = llvm.inttoptr %1439 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1461, %1462 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb375 loc(#loc3) +// CHECK-NEXT: ^bb375: // 2 preds: ^bb369, ^bb374 +// CHECK-NEXT: %1463 = arith.addi %1, %c1760_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb376(%c0_i256, %1463, %c50_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb376(%1464: i256 loc({{.*}}:59:4), %1465: i256 loc({{.*}}:59:4), %1466: i256 loc({{.*}}:59:4), %1467: i256 loc({{.*}}:59:4)): // 2 preds: ^bb375, ^bb382 +// CHECK-NEXT: %1468 = arith.cmpi ult, %1464, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1468, ^bb377(%1464, %1465, %1466, %1467 : i256, i256, i256, i256), ^bb383(%1465, %1466, %1467 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb377(%1469: i256 loc({{.*}}:59:4), %1470: i256 loc({{.*}}:59:4), %1471: i256 loc({{.*}}:59:4), %1472: i256 loc({{.*}}:59:4)): // pred: ^bb376 +// CHECK-NEXT: cf.br ^bb378(%c0_i256, %1470, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb378(%1473: i256 loc({{.*}}:59:4), %1474: i256 loc({{.*}}:59:4), %1475: i256 loc({{.*}}:59:4), %1476: i256 loc({{.*}}:59:4)): // 2 preds: ^bb377, ^bb381 +// CHECK-NEXT: %1477 = arith.cmpi ult, %1473, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1477, ^bb379(%1473, %1474, %1475, %1476 : i256, i256, i256, i256), ^bb382(%1474, %1476 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb379(%1478: i256 loc({{.*}}:59:4), %1479: i256 loc({{.*}}:59:4), %1480: i256 loc({{.*}}:59:4), %1481: i256 loc({{.*}}:59:4)): // pred: ^bb378 +// CHECK-NEXT: %1482 = llvm.inttoptr %1479 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1483 = llvm.load %1482 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1484 = "llvm.intrcall"(%c15_i256, %1483) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1485 = arith.cmpi ne, %1483, %1484 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1485, ^bb380, ^bb381 loc(#loc3) +// CHECK-NEXT: ^bb380: // pred: ^bb379 +// CHECK-NEXT: %1486 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1486, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb381 loc(#loc3) +// CHECK-NEXT: ^bb381: // 2 preds: ^bb379, ^bb380 +// CHECK-NEXT: %1487 = arith.andi %1484, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1488 = arith.shli %1487, %1480 : i256 loc(#loc3) +// CHECK-NEXT: %1489 = arith.ori %1481, %1488 : i256 loc(#loc3) +// CHECK-NEXT: %1490 = arith.addi %1479, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1491 = arith.addi %1480, %c128_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1492 = arith.addi %1478, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb378(%1492, %1490, %1491, %1489 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb382(%1493: i256 loc({{.*}}:59:4), %1494: i256 loc({{.*}}:59:4)): // pred: ^bb378 +// CHECK-NEXT: %1495 = llvm.inttoptr %1471 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1494, %1495 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1496 = arith.addi %1471, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1497 = arith.addi %1472, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1498 = arith.addi %1469, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb376(%1498, %1493, %1496, %1497 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb383(%1499: i256 loc({{.*}}:59:4), %1500: i256 loc({{.*}}:59:4), %1501: i256 loc({{.*}}:59:4)): // pred: ^bb376 +// CHECK-NEXT: %1502 = arith.cmpi ult, %1501, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1502, ^bb384(%1501, %1499, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb389 loc(#loc3) +// CHECK-NEXT: ^bb384(%1503: i256 loc({{.*}}:59:4), %1504: i256 loc({{.*}}:59:4), %1505: i256 loc({{.*}}:59:4), %1506: i256 loc({{.*}}:59:4)): // 2 preds: ^bb383, ^bb387 +// CHECK-NEXT: %1507 = arith.cmpi ult, %1503, %c3_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1507, ^bb385(%1503, %1504, %1505, %1506 : i256, i256, i256, i256), ^bb388(%1506 : i256) loc(#loc3) +// CHECK-NEXT: ^bb385(%1508: i256 loc({{.*}}:59:4), %1509: i256 loc({{.*}}:59:4), %1510: i256 loc({{.*}}:59:4), %1511: i256 loc({{.*}}:59:4)): // pred: ^bb384 +// CHECK-NEXT: %1512 = llvm.inttoptr %1509 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1513 = llvm.load %1512 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1514 = "llvm.intrcall"(%c15_i256, %1513) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1515 = arith.cmpi ne, %1513, %1514 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1515, ^bb386, ^bb387 loc(#loc3) +// CHECK-NEXT: ^bb386: // pred: ^bb385 +// CHECK-NEXT: %1516 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1516, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb387 loc(#loc3) +// CHECK-NEXT: ^bb387: // 2 preds: ^bb385, ^bb386 +// CHECK-NEXT: %1517 = arith.andi %1514, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1518 = arith.shli %1517, %1510 : i256 loc(#loc3) +// CHECK-NEXT: %1519 = arith.ori %1511, %1518 : i256 loc(#loc3) +// CHECK-NEXT: %1520 = arith.addi %1509, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1521 = arith.addi %1510, %c128_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1522 = arith.addi %1508, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb384(%1522, %1520, %1521, %1519 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb388(%1523: i256 loc({{.*}}:59:4)): // pred: ^bb384 +// CHECK-NEXT: %1524 = llvm.inttoptr %1500 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1523, %1524 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb389 loc(#loc3) +// CHECK-NEXT: ^bb389: // 2 preds: ^bb383, ^bb388 +// CHECK-NEXT: %1525 = arith.addi %1, %c1856_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb390(%c0_i256, %1525, %c52_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb390(%1526: i256 loc({{.*}}:59:4), %1527: i256 loc({{.*}}:59:4), %1528: i256 loc({{.*}}:59:4), %1529: i256 loc({{.*}}:59:4)): // 2 preds: ^bb389, ^bb396 +// CHECK-NEXT: %1530 = arith.cmpi ult, %1526, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1530, ^bb391(%1526, %1527, %1528, %1529 : i256, i256, i256, i256), ^bb397(%1527, %1528, %1529 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb391(%1531: i256 loc({{.*}}:59:4), %1532: i256 loc({{.*}}:59:4), %1533: i256 loc({{.*}}:59:4), %1534: i256 loc({{.*}}:59:4)): // pred: ^bb390 +// CHECK-NEXT: cf.br ^bb392(%c0_i256, %1532, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb392(%1535: i256 loc({{.*}}:59:4), %1536: i256 loc({{.*}}:59:4), %1537: i256 loc({{.*}}:59:4), %1538: i256 loc({{.*}}:59:4)): // 2 preds: ^bb391, ^bb395 +// CHECK-NEXT: %1539 = arith.cmpi ult, %1535, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1539, ^bb393(%1535, %1536, %1537, %1538 : i256, i256, i256, i256), ^bb396(%1536, %1538 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb393(%1540: i256 loc({{.*}}:59:4), %1541: i256 loc({{.*}}:59:4), %1542: i256 loc({{.*}}:59:4), %1543: i256 loc({{.*}}:59:4)): // pred: ^bb392 +// CHECK-NEXT: %1544 = llvm.inttoptr %1541 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1545 = llvm.load %1544 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1546 = arith.cmpi ne, %1545, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1547 = arith.extui %1546 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %1548 = arith.cmpi ne, %1545, %1547 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1548, ^bb394, ^bb395 loc(#loc3) +// CHECK-NEXT: ^bb394: // pred: ^bb393 +// CHECK-NEXT: %1549 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1549, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb395 loc(#loc3) +// CHECK-NEXT: ^bb395: // 2 preds: ^bb393, ^bb394 +// CHECK-NEXT: %1550 = arith.andi %1547, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1551 = arith.shli %1550, %1542 : i256 loc(#loc3) +// CHECK-NEXT: %1552 = arith.ori %1543, %1551 : i256 loc(#loc3) +// CHECK-NEXT: %1553 = arith.addi %1541, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1554 = arith.addi %1542, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1555 = arith.addi %1540, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb392(%1555, %1553, %1554, %1552 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb396(%1556: i256 loc({{.*}}:59:4), %1557: i256 loc({{.*}}:59:4)): // pred: ^bb392 +// CHECK-NEXT: %1558 = llvm.inttoptr %1533 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1557, %1558 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1559 = arith.addi %1533, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1560 = arith.addi %1534, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1561 = arith.addi %1531, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb390(%1561, %1556, %1559, %1560 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb397(%1562: i256 loc({{.*}}:59:4), %1563: i256 loc({{.*}}:59:4), %1564: i256 loc({{.*}}:59:4)): // pred: ^bb390 +// CHECK-NEXT: %1565 = arith.cmpi ult, %1564, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1565, ^bb398(%1564, %1562, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb403 loc(#loc3) +// CHECK-NEXT: ^bb398(%1566: i256 loc({{.*}}:59:4), %1567: i256 loc({{.*}}:59:4), %1568: i256 loc({{.*}}:59:4), %1569: i256 loc({{.*}}:59:4)): // 2 preds: ^bb397, ^bb401 +// CHECK-NEXT: %1570 = arith.cmpi ult, %1566, %c5_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1570, ^bb399(%1566, %1567, %1568, %1569 : i256, i256, i256, i256), ^bb402(%1569 : i256) loc(#loc3) +// CHECK-NEXT: ^bb399(%1571: i256 loc({{.*}}:59:4), %1572: i256 loc({{.*}}:59:4), %1573: i256 loc({{.*}}:59:4), %1574: i256 loc({{.*}}:59:4)): // pred: ^bb398 +// CHECK-NEXT: %1575 = llvm.inttoptr %1572 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1576 = llvm.load %1575 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1577 = arith.cmpi ne, %1576, %c0_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1578 = arith.extui %1577 : i1 to i256 loc(#loc3) +// CHECK-NEXT: %1579 = arith.cmpi ne, %1576, %1578 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1579, ^bb400, ^bb401 loc(#loc3) +// CHECK-NEXT: ^bb400: // pred: ^bb399 +// CHECK-NEXT: %1580 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1580, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb401 loc(#loc3) +// CHECK-NEXT: ^bb401: // 2 preds: ^bb399, ^bb400 +// CHECK-NEXT: %1581 = arith.andi %1578, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1582 = arith.shli %1581, %1573 : i256 loc(#loc3) +// CHECK-NEXT: %1583 = arith.ori %1574, %1582 : i256 loc(#loc3) +// CHECK-NEXT: %1584 = arith.addi %1572, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1585 = arith.addi %1573, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1586 = arith.addi %1571, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb398(%1586, %1584, %1585, %1583 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb402(%1587: i256 loc({{.*}}:59:4)): // pred: ^bb398 +// CHECK-NEXT: %1588 = llvm.inttoptr %1563 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1587, %1588 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb403 loc(#loc3) +// CHECK-NEXT: ^bb403: // 2 preds: ^bb397, ^bb402 +// CHECK-NEXT: %1589 = arith.addi %1, %c2016_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1590 = llvm.inttoptr %1589 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1591 = llvm.load %1590 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1592 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1591, %1592 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1593 = arith.addi %1, %c2048_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1594 = llvm.inttoptr %1593 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1595 = llvm.load %1594 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1596 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1595, %1596 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1597 = arith.addi %1, %c2080_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1598 = llvm.inttoptr %1597 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1599 = llvm.load %1598 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1600 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc3) +// CHECK-NEXT: %1601 = arith.subi %1600, %1 : i256 loc(#loc3) +// CHECK-NEXT: %1602 = arith.subi %1601, %c31_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1603 = arith.cmpi sge, %1599, %1602 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1603, ^bb404, ^bb405 loc(#loc3) +// CHECK-NEXT: ^bb404: // pred: ^bb403 +// CHECK-NEXT: %1604 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1604, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb405 loc(#loc3) +// CHECK-NEXT: ^bb405: // 2 preds: ^bb403, ^bb404 +// CHECK-NEXT: %1605 = arith.addi %1, %1599 : i256 loc(#loc3) +// CHECK-NEXT: %1606 = llvm.inttoptr %1605 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1607 = llvm.load %1606 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1608 = arith.addi %1605, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1609 = arith.cmpi ugt, %1607, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1609, ^bb406, ^bb407 loc(#loc3) // CHECK-NEXT: ^bb406: // pred: ^bb405 -// CHECK-NEXT: %1622 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1622, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb407 loc(#loc12) +// CHECK-NEXT: %1610 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1610, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb407 loc(#loc3) // CHECK-NEXT: ^bb407: // 2 preds: ^bb405, ^bb406 -// CHECK-NEXT: %1623 = arith.andi %1620, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1624 = arith.shli %1623, %1616 : i256 loc(#loc12) -// CHECK-NEXT: %1625 = arith.ori %1617, %1624 : i256 loc(#loc12) -// CHECK-NEXT: %1626 = arith.addi %1615, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1627 = arith.addi %1616, %c128_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1628 = arith.addi %1614, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb404(%1628, %1626, %1627, %1625 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb408(%1629: i256 loc({{.*}}:59:4), %1630: i256 loc({{.*}}:59:4)): // pred: ^bb404 -// CHECK-NEXT: %1631 = llvm.inttoptr %1607 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1630, %1631 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1632 = arith.addi %1607, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1633 = arith.addi %1608, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1634 = arith.addi %1605, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb402(%1634, %1629, %1632, %1633 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb409(%1635: i256 loc({{.*}}:59:4), %1636: i256 loc({{.*}}:59:4), %1637: i256 loc({{.*}}:59:4)): // pred: ^bb402 -// CHECK-NEXT: %1638 = arith.cmpi ult, %1637, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1638, ^bb410(%1637, %1635, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb415 loc(#loc12) -// CHECK-NEXT: ^bb410(%1639: i256 loc({{.*}}:59:4), %1640: i256 loc({{.*}}:59:4), %1641: i256 loc({{.*}}:59:4), %1642: i256 loc({{.*}}:59:4)): // 2 preds: ^bb409, ^bb413 -// CHECK-NEXT: %1643 = arith.cmpi ult, %1639, %c3_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1643, ^bb411(%1639, %1640, %1641, %1642 : i256, i256, i256, i256), ^bb414(%1642 : i256) loc(#loc12) -// CHECK-NEXT: ^bb411(%1644: i256 loc({{.*}}:59:4), %1645: i256 loc({{.*}}:59:4), %1646: i256 loc({{.*}}:59:4), %1647: i256 loc({{.*}}:59:4)): // pred: ^bb410 -// CHECK-NEXT: %1648 = llvm.inttoptr %1645 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1649 = llvm.load %1648 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1650 = "llvm.intrcall"(%c15_i256, %1649) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1651 = arith.cmpi ne, %1649, %1650 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1651, ^bb412, ^bb413 loc(#loc12) +// CHECK-NEXT: %1611 = arith.muli %1607, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1612 = arith.subi %1600, %1611 : i256 loc(#loc3) +// CHECK-NEXT: %1613 = arith.cmpi sgt, %1608, %1612 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1613, ^bb408, ^bb409 loc(#loc3) +// CHECK-NEXT: ^bb408: // pred: ^bb407 +// CHECK-NEXT: %1614 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1614, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb409 loc(#loc3) +// CHECK-NEXT: ^bb409: // 2 preds: ^bb407, ^bb408 +// CHECK-NEXT: %1615 = arith.cmpi ugt, %1607, %c18446744073709551615_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1615, ^bb410, ^bb411 loc(#loc3) +// CHECK-NEXT: ^bb410: // pred: ^bb409 +// CHECK-NEXT: %1616 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1616 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1617 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c65_i256, %1617 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1618 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1618, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb411 loc(#loc3) +// CHECK-NEXT: ^bb411: // 2 preds: ^bb409, ^bb410 +// CHECK-NEXT: %1619 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1620 = llvm.load %1619 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %1621 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1607, %1621 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1622 = arith.cmpi ult, %1607, %1620 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1622, ^bb412, ^bb415 loc(#loc3) // CHECK-NEXT: ^bb412: // pred: ^bb411 -// CHECK-NEXT: %1652 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1652, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb413 loc(#loc12) -// CHECK-NEXT: ^bb413: // 2 preds: ^bb411, ^bb412 -// CHECK-NEXT: %1653 = arith.andi %1650, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1654 = arith.shli %1653, %1646 : i256 loc(#loc12) -// CHECK-NEXT: %1655 = arith.ori %1647, %1654 : i256 loc(#loc12) -// CHECK-NEXT: %1656 = arith.addi %1645, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1657 = arith.addi %1646, %c128_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1658 = arith.addi %1644, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb410(%1658, %1656, %1657, %1655 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb414(%1659: i256 loc({{.*}}:59:4)): // pred: ^bb410 -// CHECK-NEXT: %1660 = llvm.inttoptr %1636 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1659, %1660 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb415 loc(#loc12) -// CHECK-NEXT: ^bb415: // 2 preds: ^bb409, ^bb414 -// CHECK-NEXT: %1661 = arith.addi %1, %c1856_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb416(%c0_i256, %1661, %c52_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb416(%1662: i256 loc({{.*}}:59:4), %1663: i256 loc({{.*}}:59:4), %1664: i256 loc({{.*}}:59:4), %1665: i256 loc({{.*}}:59:4)): // 2 preds: ^bb415, ^bb422 -// CHECK-NEXT: %1666 = arith.cmpi ult, %1662, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1666, ^bb417(%1662, %1663, %1664, %1665 : i256, i256, i256, i256), ^bb423(%1663, %1664, %1665 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb417(%1667: i256 loc({{.*}}:59:4), %1668: i256 loc({{.*}}:59:4), %1669: i256 loc({{.*}}:59:4), %1670: i256 loc({{.*}}:59:4)): // pred: ^bb416 -// CHECK-NEXT: cf.br ^bb418(%c0_i256, %1668, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb418(%1671: i256 loc({{.*}}:59:4), %1672: i256 loc({{.*}}:59:4), %1673: i256 loc({{.*}}:59:4), %1674: i256 loc({{.*}}:59:4)): // 2 preds: ^bb417, ^bb421 -// CHECK-NEXT: %1675 = arith.cmpi ult, %1671, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1675, ^bb419(%1671, %1672, %1673, %1674 : i256, i256, i256, i256), ^bb422(%1672, %1674 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb419(%1676: i256 loc({{.*}}:59:4), %1677: i256 loc({{.*}}:59:4), %1678: i256 loc({{.*}}:59:4), %1679: i256 loc({{.*}}:59:4)): // pred: ^bb418 -// CHECK-NEXT: %1680 = llvm.inttoptr %1677 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1681 = llvm.load %1680 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1682 = arith.cmpi ne, %1681, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1683 = arith.extui %1682 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %1684 = arith.cmpi ne, %1681, %1683 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1684, ^bb420, ^bb421 loc(#loc12) -// CHECK-NEXT: ^bb420: // pred: ^bb419 -// CHECK-NEXT: %1685 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1685, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb421 loc(#loc12) -// CHECK-NEXT: ^bb421: // 2 preds: ^bb419, ^bb420 -// CHECK-NEXT: %1686 = arith.andi %1683, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1687 = arith.shli %1686, %1678 : i256 loc(#loc12) -// CHECK-NEXT: %1688 = arith.ori %1679, %1687 : i256 loc(#loc12) -// CHECK-NEXT: %1689 = arith.addi %1677, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1690 = arith.addi %1678, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1691 = arith.addi %1676, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb418(%1691, %1689, %1690, %1688 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb422(%1692: i256 loc({{.*}}:59:4), %1693: i256 loc({{.*}}:59:4)): // pred: ^bb418 -// CHECK-NEXT: %1694 = llvm.inttoptr %1669 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1693, %1694 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1695 = arith.addi %1669, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1696 = arith.addi %1670, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1697 = arith.addi %1667, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb416(%1697, %1692, %1695, %1696 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb423(%1698: i256 loc({{.*}}:59:4), %1699: i256 loc({{.*}}:59:4), %1700: i256 loc({{.*}}:59:4)): // pred: ^bb416 -// CHECK-NEXT: %1701 = arith.cmpi ult, %1700, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1701, ^bb424(%1700, %1698, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb429 loc(#loc12) -// CHECK-NEXT: ^bb424(%1702: i256 loc({{.*}}:59:4), %1703: i256 loc({{.*}}:59:4), %1704: i256 loc({{.*}}:59:4), %1705: i256 loc({{.*}}:59:4)): // 2 preds: ^bb423, ^bb427 -// CHECK-NEXT: %1706 = arith.cmpi ult, %1702, %c5_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1706, ^bb425(%1702, %1703, %1704, %1705 : i256, i256, i256, i256), ^bb428(%1705 : i256) loc(#loc12) -// CHECK-NEXT: ^bb425(%1707: i256 loc({{.*}}:59:4), %1708: i256 loc({{.*}}:59:4), %1709: i256 loc({{.*}}:59:4), %1710: i256 loc({{.*}}:59:4)): // pred: ^bb424 -// CHECK-NEXT: %1711 = llvm.inttoptr %1708 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1712 = llvm.load %1711 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1713 = arith.cmpi ne, %1712, %c0_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1714 = arith.extui %1713 : i1 to i256 loc(#loc12) -// CHECK-NEXT: %1715 = arith.cmpi ne, %1712, %1714 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1715, ^bb426, ^bb427 loc(#loc12) -// CHECK-NEXT: ^bb426: // pred: ^bb425 -// CHECK-NEXT: %1716 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1716, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb427 loc(#loc12) -// CHECK-NEXT: ^bb427: // 2 preds: ^bb425, ^bb426 -// CHECK-NEXT: %1717 = arith.andi %1714, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1718 = arith.shli %1717, %1709 : i256 loc(#loc12) -// CHECK-NEXT: %1719 = arith.ori %1710, %1718 : i256 loc(#loc12) -// CHECK-NEXT: %1720 = arith.addi %1708, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1721 = arith.addi %1709, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1722 = arith.addi %1707, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb424(%1722, %1720, %1721, %1719 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb428(%1723: i256 loc({{.*}}:59:4)): // pred: ^bb424 -// CHECK-NEXT: %1724 = llvm.inttoptr %1699 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1723, %1724 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb429 loc(#loc12) -// CHECK-NEXT: ^bb429: // 2 preds: ^bb423, ^bb428 -// CHECK-NEXT: %1725 = arith.addi %1, %c2016_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1726 = llvm.inttoptr %1725 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1727 = llvm.load %1726 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1728 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1727, %1728 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1729 = arith.addi %1, %c2048_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1730 = llvm.inttoptr %1729 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1731 = llvm.load %1730 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1732 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1731, %1732 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1733 = arith.addi %1, %c2080_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1734 = llvm.inttoptr %1733 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1735 = llvm.load %1734 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1736 = "llvm.intrcall"() <{id = 4038 : i32, name = "evm.calldatasize"}> : () -> i256 loc(#loc12) -// CHECK-NEXT: %1737 = arith.subi %1736, %1 : i256 loc(#loc12) -// CHECK-NEXT: %1738 = arith.subi %1737, %c31_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1739 = arith.cmpi sge, %1735, %1738 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1739, ^bb430, ^bb431 loc(#loc12) -// CHECK-NEXT: ^bb430: // pred: ^bb429 -// CHECK-NEXT: %1740 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1740, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb431 loc(#loc12) -// CHECK-NEXT: ^bb431: // 2 preds: ^bb429, ^bb430 -// CHECK-NEXT: %1741 = arith.addi %1, %1735 : i256 loc(#loc12) -// CHECK-NEXT: %1742 = llvm.inttoptr %1741 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1743 = llvm.load %1742 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1744 = arith.addi %1741, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1745 = arith.cmpi ugt, %1743, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1745, ^bb432, ^bb433 loc(#loc12) -// CHECK-NEXT: ^bb432: // pred: ^bb431 -// CHECK-NEXT: %1746 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1746, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb433 loc(#loc12) -// CHECK-NEXT: ^bb433: // 2 preds: ^bb431, ^bb432 -// CHECK-NEXT: %1747 = arith.muli %1743, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1748 = arith.subi %1736, %1747 : i256 loc(#loc12) -// CHECK-NEXT: %1749 = arith.cmpi sgt, %1744, %1748 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1749, ^bb434, ^bb435 loc(#loc12) -// CHECK-NEXT: ^bb434: // pred: ^bb433 -// CHECK-NEXT: %1750 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1750, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb435 loc(#loc12) -// CHECK-NEXT: ^bb435: // 2 preds: ^bb433, ^bb434 -// CHECK-NEXT: %1751 = arith.cmpi ugt, %1743, %c18446744073709551615_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1751, ^bb436, ^bb437 loc(#loc12) -// CHECK-NEXT: ^bb436: // pred: ^bb435 -// CHECK-NEXT: %1752 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1752 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1753 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c65_i256, %1753 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1754 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1754, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb437 loc(#loc12) -// CHECK-NEXT: ^bb437: // 2 preds: ^bb435, ^bb436 -// CHECK-NEXT: %1755 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1756 = llvm.load %1755 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1757 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1743, %1757 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1758 = arith.cmpi ult, %1743, %1756 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1758, ^bb438, ^bb441 loc(#loc12) -// CHECK-NEXT: ^bb438: // pred: ^bb437 -// CHECK-NEXT: %1759 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c55_i256, %1759 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1760 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1761 = "llvm.intrcall"(%1760, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1762 = arith.addi %1761, %1743 : i256 loc(#loc12) -// CHECK-NEXT: %1763 = arith.addi %1761, %1756 : i256 loc(#loc12) -// CHECK-NEXT: %1764 = arith.subi %1763, %1762 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb439(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb439(%1765: i256 loc({{.*}}:59:4)): // 2 preds: ^bb438, ^bb440 -// CHECK-NEXT: %1766 = arith.cmpi ult, %1765, %1764 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1766, ^bb440(%1765 : i256), ^bb441 loc(#loc12) -// CHECK-NEXT: ^bb440(%1767: i256 loc({{.*}}:59:4)): // pred: ^bb439 -// CHECK-NEXT: %1768 = arith.addi %1762, %1767 : i256 loc(#loc12) -// CHECK-NEXT: %1769 = llvm.inttoptr %1768 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %c0_i256, %1769 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1770 = arith.addi %1767, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb439(%1770 : i256) loc(#loc12) -// CHECK-NEXT: ^bb441: // 2 preds: ^bb437, ^bb439 -// CHECK-NEXT: %1771 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: llvm.store %c55_i256, %1771 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1772 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: %1773 = "llvm.intrcall"(%1772, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb442(%c0_i256 : i256) loc(#loc12) -// CHECK-NEXT: ^bb442(%1774: i256 loc({{.*}}:59:4)): // 2 preds: ^bb441, ^bb445 -// CHECK-NEXT: %1775 = arith.cmpi ult, %1774, %1743 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1775, ^bb443(%1774 : i256), ^bb446 loc(#loc12) -// CHECK-NEXT: ^bb443(%1776: i256 loc({{.*}}:59:4)): // pred: ^bb442 -// CHECK-NEXT: %1777 = arith.muli %1776, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1778 = arith.addi %1744, %1777 : i256 loc(#loc12) -// CHECK-NEXT: %1779 = arith.addi %1773, %1776 : i256 loc(#loc12) -// CHECK-NEXT: %1780 = llvm.inttoptr %1778 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1781 = llvm.load %1780 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1782 = arith.andi %1781, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1783 = arith.cmpi ne, %1781, %1782 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1783, ^bb444, ^bb445 loc(#loc12) -// CHECK-NEXT: ^bb444: // pred: ^bb443 -// CHECK-NEXT: %1784 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1784, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb445 loc(#loc12) -// CHECK-NEXT: ^bb445: // 2 preds: ^bb443, ^bb444 -// CHECK-NEXT: %1785 = llvm.inttoptr %1779 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1782, %1785 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1786 = arith.addi %1776, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb442(%1786 : i256) loc(#loc12) -// CHECK-NEXT: ^bb446: // pred: ^bb442 -// CHECK-NEXT: %1787 = arith.addi %1, %c2112_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1788 = llvm.inttoptr %1787 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1789 = llvm.load %1788 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1790 = "llvm.intrcall"(%c0_i256, %1789) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc12) -// CHECK-NEXT: %1791 = arith.cmpi ne, %1789, %1790 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1791, ^bb447, ^bb448 loc(#loc12) -// CHECK-NEXT: ^bb447: // pred: ^bb446 -// CHECK-NEXT: %1792 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1792, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb448 loc(#loc12) -// CHECK-NEXT: ^bb448: // 2 preds: ^bb446, ^bb447 -// CHECK-NEXT: %1793 = arith.andi %1790, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1794 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1795 = llvm.load %1794 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc12) -// CHECK-NEXT: %1796 = arith.andi %1795, %c-256_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1797 = arith.ori %1796, %1793 : i256 loc(#loc12) -// CHECK-NEXT: %1798 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1797, %1798 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1799 = arith.addi %1, %c2144_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb449(%c0_i256, %1799, %c57_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb449(%1800: i256 loc({{.*}}:59:4), %1801: i256 loc({{.*}}:59:4), %1802: i256 loc({{.*}}:59:4), %1803: i256 loc({{.*}}:59:4)): // 2 preds: ^bb448, ^bb455 -// CHECK-NEXT: %1804 = arith.cmpi ult, %1800, %c2_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1804, ^bb450(%1800, %1801, %1802, %1803 : i256, i256, i256, i256), ^bb456(%1801, %1802, %1803 : i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb450(%1805: i256 loc({{.*}}:59:4), %1806: i256 loc({{.*}}:59:4), %1807: i256 loc({{.*}}:59:4), %1808: i256 loc({{.*}}:59:4)): // pred: ^bb449 -// CHECK-NEXT: cf.br ^bb451(%c0_i256, %1806, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb451(%1809: i256 loc({{.*}}:59:4), %1810: i256 loc({{.*}}:59:4), %1811: i256 loc({{.*}}:59:4), %1812: i256 loc({{.*}}:59:4)): // 2 preds: ^bb450, ^bb454 -// CHECK-NEXT: %1813 = arith.cmpi ult, %1809, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1813, ^bb452(%1809, %1810, %1811, %1812 : i256, i256, i256, i256), ^bb455(%1810, %1812 : i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb452(%1814: i256 loc({{.*}}:59:4), %1815: i256 loc({{.*}}:59:4), %1816: i256 loc({{.*}}:59:4), %1817: i256 loc({{.*}}:59:4)): // pred: ^bb451 -// CHECK-NEXT: %1818 = llvm.inttoptr %1815 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1819 = llvm.load %1818 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1820 = arith.andi %1819, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1821 = arith.cmpi ne, %1819, %1820 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1821, ^bb453, ^bb454 loc(#loc12) -// CHECK-NEXT: ^bb453: // pred: ^bb452 -// CHECK-NEXT: %1822 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1822, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb454 loc(#loc12) -// CHECK-NEXT: ^bb454: // 2 preds: ^bb452, ^bb453 -// CHECK-NEXT: %1823 = arith.shli %1820, %1816 : i256 loc(#loc12) -// CHECK-NEXT: %1824 = arith.ori %1817, %1823 : i256 loc(#loc12) -// CHECK-NEXT: %1825 = arith.addi %1815, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1826 = arith.addi %1816, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1827 = arith.addi %1814, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb451(%1827, %1825, %1826, %1824 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb455(%1828: i256 loc({{.*}}:59:4), %1829: i256 loc({{.*}}:59:4)): // pred: ^bb451 -// CHECK-NEXT: %1830 = llvm.inttoptr %1807 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1829, %1830 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: %1831 = arith.addi %1807, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1832 = arith.addi %1808, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1833 = arith.addi %1805, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb449(%1833, %1828, %1831, %1832 : i256, i256, i256, i256) loc(#loc12) -// CHECK-NEXT: ^bb456(%1834: i256 loc({{.*}}:59:4), %1835: i256 loc({{.*}}:59:4), %1836: i256 loc({{.*}}:59:4)): // pred: ^bb449 -// CHECK-NEXT: %1837 = arith.cmpi ult, %1836, %c33_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1837, ^bb457(%1836, %1834, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb462 loc(#loc12) -// CHECK-NEXT: ^bb457(%1838: i256 loc({{.*}}:59:4), %1839: i256 loc({{.*}}:59:4), %1840: i256 loc({{.*}}:59:4), %1841: i256 loc({{.*}}:59:4)): // 2 preds: ^bb456, ^bb460 -// CHECK-NEXT: %1842 = arith.cmpi ult, %1838, %c33_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1842, ^bb458(%1838, %1839, %1840, %1841 : i256, i256, i256, i256), ^bb461(%1841 : i256) loc(#loc12) -// CHECK-NEXT: ^bb458(%1843: i256 loc({{.*}}:59:4), %1844: i256 loc({{.*}}:59:4), %1845: i256 loc({{.*}}:59:4), %1846: i256 loc({{.*}}:59:4)): // pred: ^bb457 -// CHECK-NEXT: %1847 = llvm.inttoptr %1844 : i256 to !llvm.ptr<2> loc(#loc12) -// CHECK-NEXT: %1848 = llvm.load %1847 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc12) -// CHECK-NEXT: %1849 = arith.andi %1848, %c255_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1850 = arith.cmpi ne, %1848, %1849 : i256 loc(#loc12) -// CHECK-NEXT: cf.cond_br %1850, ^bb459, ^bb460 loc(#loc12) -// CHECK-NEXT: ^bb459: // pred: ^bb458 -// CHECK-NEXT: %1851 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc12) -// CHECK-NEXT: "llvm.intrcall"(%1851, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc12) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc12) -// CHECK-NEXT: cf.br ^bb460 loc(#loc12) -// CHECK-NEXT: ^bb460: // 2 preds: ^bb458, ^bb459 -// CHECK-NEXT: %1852 = arith.shli %1849, %1845 : i256 loc(#loc12) -// CHECK-NEXT: %1853 = arith.ori %1846, %1852 : i256 loc(#loc12) -// CHECK-NEXT: %1854 = arith.addi %1844, %c32_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1855 = arith.addi %1845, %c8_i256 : i256 loc(#loc12) -// CHECK-NEXT: %1856 = arith.addi %1843, %c1_i256 : i256 loc(#loc12) -// CHECK-NEXT: cf.br ^bb457(%1856, %1854, %1855, %1853 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc12) -// CHECK-NEXT: ^bb461(%1857: i256 loc({{.*}}:59:4)): // pred: ^bb457 -// CHECK-NEXT: %1858 = llvm.inttoptr %1835 : i256 to !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: llvm.store %1857, %1858 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc12) -// CHECK-NEXT: cf.br ^bb462 loc(#loc12) -// CHECK-NEXT: ^bb462: // 2 preds: ^bb456, ^bb461 -// CHECK-NEXT: return loc(#loc9) -// CHECK-NEXT: } loc(#loc9) +// CHECK-NEXT: %1623 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c55_i256, %1623 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1624 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1625 = "llvm.intrcall"(%1624, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1626 = arith.addi %1625, %1607 : i256 loc(#loc3) +// CHECK-NEXT: %1627 = arith.addi %1625, %1620 : i256 loc(#loc3) +// CHECK-NEXT: %1628 = arith.subi %1627, %1626 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb413(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb413(%1629: i256 loc({{.*}}:59:4)): // 2 preds: ^bb412, ^bb414 +// CHECK-NEXT: %1630 = arith.cmpi ult, %1629, %1628 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1630, ^bb414(%1629 : i256), ^bb415 loc(#loc3) +// CHECK-NEXT: ^bb414(%1631: i256 loc({{.*}}:59:4)): // pred: ^bb413 +// CHECK-NEXT: %1632 = arith.addi %1626, %1631 : i256 loc(#loc3) +// CHECK-NEXT: %1633 = llvm.inttoptr %1632 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %c0_i256, %1633 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1634 = arith.addi %1631, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb413(%1634 : i256) loc(#loc3) +// CHECK-NEXT: ^bb415: // 2 preds: ^bb411, ^bb413 +// CHECK-NEXT: %1635 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: llvm.store %c55_i256, %1635 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1636 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: %1637 = "llvm.intrcall"(%1636, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb416(%c0_i256 : i256) loc(#loc3) +// CHECK-NEXT: ^bb416(%1638: i256 loc({{.*}}:59:4)): // 2 preds: ^bb415, ^bb419 +// CHECK-NEXT: %1639 = arith.cmpi ult, %1638, %1607 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1639, ^bb417(%1638 : i256), ^bb420 loc(#loc3) +// CHECK-NEXT: ^bb417(%1640: i256 loc({{.*}}:59:4)): // pred: ^bb416 +// CHECK-NEXT: %1641 = arith.muli %1640, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1642 = arith.addi %1608, %1641 : i256 loc(#loc3) +// CHECK-NEXT: %1643 = arith.addi %1637, %1640 : i256 loc(#loc3) +// CHECK-NEXT: %1644 = llvm.inttoptr %1642 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1645 = llvm.load %1644 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1646 = arith.andi %1645, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1647 = arith.cmpi ne, %1645, %1646 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1647, ^bb418, ^bb419 loc(#loc3) +// CHECK-NEXT: ^bb418: // pred: ^bb417 +// CHECK-NEXT: %1648 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1648, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb419 loc(#loc3) +// CHECK-NEXT: ^bb419: // 2 preds: ^bb417, ^bb418 +// CHECK-NEXT: %1649 = llvm.inttoptr %1643 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1646, %1649 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1650 = arith.addi %1640, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb416(%1650 : i256) loc(#loc3) +// CHECK-NEXT: ^bb420: // pred: ^bb416 +// CHECK-NEXT: %1651 = arith.addi %1, %c2112_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1652 = llvm.inttoptr %1651 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1653 = llvm.load %1652 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1654 = "llvm.intrcall"(%c0_i256, %1653) <{id = 4088 : i32, name = "evm.signextend"}> : (i256, i256) -> i256 loc(#loc3) +// CHECK-NEXT: %1655 = arith.cmpi ne, %1653, %1654 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1655, ^bb421, ^bb422 loc(#loc3) +// CHECK-NEXT: ^bb421: // pred: ^bb420 +// CHECK-NEXT: %1656 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1656, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb422 loc(#loc3) +// CHECK-NEXT: ^bb422: // 2 preds: ^bb420, ^bb421 +// CHECK-NEXT: %1657 = arith.andi %1654, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1658 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1659 = llvm.load %1658 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc3) +// CHECK-NEXT: %1660 = arith.andi %1659, %c-256_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1661 = arith.ori %1660, %1657 : i256 loc(#loc3) +// CHECK-NEXT: %1662 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1661, %1662 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1663 = arith.addi %1, %c2144_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb423(%c0_i256, %1663, %c57_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb423(%1664: i256 loc({{.*}}:59:4), %1665: i256 loc({{.*}}:59:4), %1666: i256 loc({{.*}}:59:4), %1667: i256 loc({{.*}}:59:4)): // 2 preds: ^bb422, ^bb429 +// CHECK-NEXT: %1668 = arith.cmpi ult, %1664, %c2_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1668, ^bb424(%1664, %1665, %1666, %1667 : i256, i256, i256, i256), ^bb430(%1665, %1666, %1667 : i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb424(%1669: i256 loc({{.*}}:59:4), %1670: i256 loc({{.*}}:59:4), %1671: i256 loc({{.*}}:59:4), %1672: i256 loc({{.*}}:59:4)): // pred: ^bb423 +// CHECK-NEXT: cf.br ^bb425(%c0_i256, %1670, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb425(%1673: i256 loc({{.*}}:59:4), %1674: i256 loc({{.*}}:59:4), %1675: i256 loc({{.*}}:59:4), %1676: i256 loc({{.*}}:59:4)): // 2 preds: ^bb424, ^bb428 +// CHECK-NEXT: %1677 = arith.cmpi ult, %1673, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1677, ^bb426(%1673, %1674, %1675, %1676 : i256, i256, i256, i256), ^bb429(%1674, %1676 : i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb426(%1678: i256 loc({{.*}}:59:4), %1679: i256 loc({{.*}}:59:4), %1680: i256 loc({{.*}}:59:4), %1681: i256 loc({{.*}}:59:4)): // pred: ^bb425 +// CHECK-NEXT: %1682 = llvm.inttoptr %1679 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1683 = llvm.load %1682 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1684 = arith.andi %1683, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1685 = arith.cmpi ne, %1683, %1684 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1685, ^bb427, ^bb428 loc(#loc3) +// CHECK-NEXT: ^bb427: // pred: ^bb426 +// CHECK-NEXT: %1686 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1686, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb428 loc(#loc3) +// CHECK-NEXT: ^bb428: // 2 preds: ^bb426, ^bb427 +// CHECK-NEXT: %1687 = arith.shli %1684, %1680 : i256 loc(#loc3) +// CHECK-NEXT: %1688 = arith.ori %1681, %1687 : i256 loc(#loc3) +// CHECK-NEXT: %1689 = arith.addi %1679, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1690 = arith.addi %1680, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1691 = arith.addi %1678, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb425(%1691, %1689, %1690, %1688 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb429(%1692: i256 loc({{.*}}:59:4), %1693: i256 loc({{.*}}:59:4)): // pred: ^bb425 +// CHECK-NEXT: %1694 = llvm.inttoptr %1671 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1693, %1694 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: %1695 = arith.addi %1671, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1696 = arith.addi %1672, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1697 = arith.addi %1669, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb423(%1697, %1692, %1695, %1696 : i256, i256, i256, i256) loc(#loc3) +// CHECK-NEXT: ^bb430(%1698: i256 loc({{.*}}:59:4), %1699: i256 loc({{.*}}:59:4), %1700: i256 loc({{.*}}:59:4)): // pred: ^bb423 +// CHECK-NEXT: %1701 = arith.cmpi ult, %1700, %c33_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1701, ^bb431(%1700, %1698, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb436 loc(#loc3) +// CHECK-NEXT: ^bb431(%1702: i256 loc({{.*}}:59:4), %1703: i256 loc({{.*}}:59:4), %1704: i256 loc({{.*}}:59:4), %1705: i256 loc({{.*}}:59:4)): // 2 preds: ^bb430, ^bb434 +// CHECK-NEXT: %1706 = arith.cmpi ult, %1702, %c33_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1706, ^bb432(%1702, %1703, %1704, %1705 : i256, i256, i256, i256), ^bb435(%1705 : i256) loc(#loc3) +// CHECK-NEXT: ^bb432(%1707: i256 loc({{.*}}:59:4), %1708: i256 loc({{.*}}:59:4), %1709: i256 loc({{.*}}:59:4), %1710: i256 loc({{.*}}:59:4)): // pred: ^bb431 +// CHECK-NEXT: %1711 = llvm.inttoptr %1708 : i256 to !llvm.ptr<2> loc(#loc3) +// CHECK-NEXT: %1712 = llvm.load %1711 {alignment = 1 : i64} : !llvm.ptr<2> -> i256 loc(#loc3) +// CHECK-NEXT: %1713 = arith.andi %1712, %c255_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1714 = arith.cmpi ne, %1712, %1713 : i256 loc(#loc3) +// CHECK-NEXT: cf.cond_br %1714, ^bb433, ^bb434 loc(#loc3) +// CHECK-NEXT: ^bb433: // pred: ^bb432 +// CHECK-NEXT: %1715 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc3) +// CHECK-NEXT: "llvm.intrcall"(%1715, %c0_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc3) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc3) +// CHECK-NEXT: cf.br ^bb434 loc(#loc3) +// CHECK-NEXT: ^bb434: // 2 preds: ^bb432, ^bb433 +// CHECK-NEXT: %1716 = arith.shli %1713, %1709 : i256 loc(#loc3) +// CHECK-NEXT: %1717 = arith.ori %1710, %1716 : i256 loc(#loc3) +// CHECK-NEXT: %1718 = arith.addi %1708, %c32_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1719 = arith.addi %1709, %c8_i256 : i256 loc(#loc3) +// CHECK-NEXT: %1720 = arith.addi %1707, %c1_i256 : i256 loc(#loc3) +// CHECK-NEXT: cf.br ^bb431(%1720, %1718, %1719, %1717 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc3) +// CHECK-NEXT: ^bb435(%1721: i256 loc({{.*}}:59:4)): // pred: ^bb431 +// CHECK-NEXT: %1722 = llvm.inttoptr %1699 : i256 to !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: llvm.store %1721, %1722 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc3) +// CHECK-NEXT: cf.br ^bb436 loc(#loc3) +// CHECK-NEXT: ^bb436: // 2 preds: ^bb430, ^bb435 +// CHECK-NEXT: return loc(#loc12) +// CHECK-NEXT: } loc(#loc12) // CHECK-NEXT: func.func @f2_137(%arg0: i256 loc({{.*}}:54:14)) attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c57_i256 = arith.constant 57 : i256 loc(#loc) // CHECK-NEXT: %c832_i256 = arith.constant 832 : i256 loc(#loc) @@ -11437,9 +11577,6 @@ contract Test { // CHECK-NEXT: %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 = arith.constant -1766847064778384329583297500742918515827483896875618958121606201292619776 : i256 loc(#loc) // CHECK-NEXT: %c232_i256 = arith.constant 232 : i256 loc(#loc) // CHECK-NEXT: %c26959946667150639794667015087019630673637144422540572481103610249215_i256 = arith.constant 26959946667150639794667015087019630673637144422540572481103610249215 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 = arith.constant -6901746346790563787434755862277025452451108972170386555162524223799296 : i256 loc(#loc) // CHECK-NEXT: %c200_i256 = arith.constant 200 : i256 loc(#loc) // CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) @@ -11468,1921 +11605,1705 @@ contract Test { // CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) // CHECK-NEXT: %c1_i256 = arith.constant 1 : i256 loc(#loc) -// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc14) -// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc14) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc15) -// CHECK-NEXT: %2 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %4 = arith.andi %3, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %5 = arith.addi %1, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %7 = llvm.load %6 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %8 = arith.shrui %7, %c104_i256 : i256 loc(#loc16) -// CHECK-NEXT: %9 = arith.shli %8, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %10 = arith.ori %4, %9 : i256 loc(#loc16) -// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %13 = arith.andi %12, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc16) -// CHECK-NEXT: %14 = arith.ori %13, %10 : i256 loc(#loc16) -// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %14, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %16 = arith.addi %1, %c64_i256 : i256 loc(#loc16) -// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %18 = llvm.load %17 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb1(%c0_i256, %18, %c1_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %0 = llvm.alloca %c1_i256 x i256 : (i256) -> !llvm.ptr loc(#loc16) +// CHECK-NEXT: llvm.store %arg0, %0 {alignment = 32 : i64} : i256, !llvm.ptr loc(#loc16) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 32 : i64} : !llvm.ptr -> i256 loc(#loc17) +// CHECK-NEXT: %2 = llvm.inttoptr %1 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %3 = llvm.load %2 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %4 = arith.andi %3, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %5 = arith.addi %1, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %6 = llvm.inttoptr %5 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %7 = llvm.load %6 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %8 = arith.shrui %7, %c104_i256 : i256 loc(#loc4) +// CHECK-NEXT: %9 = arith.shli %8, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %10 = arith.ori %4, %9 : i256 loc(#loc4) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %12 = llvm.load %11 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %13 = arith.andi %12, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc4) +// CHECK-NEXT: %14 = arith.ori %13, %10 : i256 loc(#loc4) +// CHECK-NEXT: %15 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %14, %15 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %16 = arith.addi %1, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: %17 = llvm.inttoptr %16 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %18 = llvm.load %17 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb1(%c0_i256, %18, %c1_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb1(%19: i256 loc({{.*}}:55:4), %20: i256 loc({{.*}}:55:4), %21: i256 loc({{.*}}:55:4), %22: i256 loc({{.*}}:55:4)): // 2 preds: ^bb0, ^bb5 -// CHECK-NEXT: %23 = arith.cmpi ult, %19, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %23, ^bb2(%19, %20, %21, %22 : i256, i256, i256, i256), ^bb6(%20, %21, %22 : i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %23 = arith.cmpi ult, %19, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %23, ^bb2(%19, %20, %21, %22 : i256, i256, i256, i256), ^bb6(%20, %21, %22 : i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb2(%24: i256 loc({{.*}}:55:4), %25: i256 loc({{.*}}:55:4), %26: i256 loc({{.*}}:55:4), %27: i256 loc({{.*}}:55:4)): // pred: ^bb1 -// CHECK-NEXT: cf.br ^bb3(%c0_i256, %25, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: cf.br ^bb3(%c0_i256, %25, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb3(%28: i256 loc({{.*}}:55:4), %29: i256 loc({{.*}}:55:4), %30: i256 loc({{.*}}:55:4), %31: i256 loc({{.*}}:55:4)): // 2 preds: ^bb2, ^bb4 -// CHECK-NEXT: %32 = arith.cmpi ult, %28, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %32, ^bb4(%28, %29, %30, %31 : i256, i256, i256, i256), ^bb5(%29, %31 : i256, i256) loc(#loc16) +// CHECK-NEXT: %32 = arith.cmpi ult, %28, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %32, ^bb4(%28, %29, %30, %31 : i256, i256, i256, i256), ^bb5(%29, %31 : i256, i256) loc(#loc4) // CHECK-NEXT: ^bb4(%33: i256 loc({{.*}}:55:4), %34: i256 loc({{.*}}:55:4), %35: i256 loc({{.*}}:55:4), %36: i256 loc({{.*}}:55:4)): // pred: ^bb3 -// CHECK-NEXT: %37 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %39 = arith.andi %38, %c4722366482869645213695_i256 : i256 loc(#loc16) -// CHECK-NEXT: %40 = arith.shli %39, %35 : i256 loc(#loc16) -// CHECK-NEXT: %41 = arith.ori %36, %40 : i256 loc(#loc16) -// CHECK-NEXT: %42 = arith.addi %34, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %43 = arith.addi %35, %c72_i256 : i256 loc(#loc16) -// CHECK-NEXT: %44 = arith.addi %33, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb3(%44, %42, %43, %41 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) +// CHECK-NEXT: %37 = llvm.inttoptr %34 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %38 = llvm.load %37 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %39 = arith.andi %38, %c4722366482869645213695_i256 : i256 loc(#loc4) +// CHECK-NEXT: %40 = arith.shli %39, %35 : i256 loc(#loc4) +// CHECK-NEXT: %41 = arith.ori %36, %40 : i256 loc(#loc4) +// CHECK-NEXT: %42 = arith.addi %34, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %43 = arith.addi %35, %c72_i256 : i256 loc(#loc4) +// CHECK-NEXT: %44 = arith.addi %33, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb3(%44, %42, %43, %41 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) // CHECK-NEXT: ^bb5(%45: i256 loc({{.*}}:55:4), %46: i256 loc({{.*}}:55:4)): // pred: ^bb3 -// CHECK-NEXT: %47 = llvm.inttoptr %26 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %46, %47 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %48 = arith.addi %26, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %49 = arith.addi %27, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: %50 = arith.addi %24, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb1(%50, %45, %48, %49 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %47 = llvm.inttoptr %26 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %46, %47 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %48 = arith.addi %26, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %49 = arith.addi %27, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: %50 = arith.addi %24, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb1(%50, %45, %48, %49 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb6(%51: i256 loc({{.*}}:55:4), %52: i256 loc({{.*}}:55:4), %53: i256 loc({{.*}}:55:4)): // pred: ^bb1 -// CHECK-NEXT: %54 = arith.cmpi ult, %53, %c7_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %54, ^bb7(%53, %51, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb10 loc(#loc16) +// CHECK-NEXT: %54 = arith.cmpi ult, %53, %c7_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %54, ^bb7(%53, %51, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb10 loc(#loc4) // CHECK-NEXT: ^bb7(%55: i256 loc({{.*}}:55:4), %56: i256 loc({{.*}}:55:4), %57: i256 loc({{.*}}:55:4), %58: i256 loc({{.*}}:55:4)): // 2 preds: ^bb6, ^bb8 -// CHECK-NEXT: %59 = arith.cmpi ult, %55, %c7_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %59, ^bb8(%55, %56, %57, %58 : i256, i256, i256, i256), ^bb9(%58 : i256) loc(#loc16) +// CHECK-NEXT: %59 = arith.cmpi ult, %55, %c7_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %59, ^bb8(%55, %56, %57, %58 : i256, i256, i256, i256), ^bb9(%58 : i256) loc(#loc4) // CHECK-NEXT: ^bb8(%60: i256 loc({{.*}}:55:4), %61: i256 loc({{.*}}:55:4), %62: i256 loc({{.*}}:55:4), %63: i256 loc({{.*}}:55:4)): // pred: ^bb7 -// CHECK-NEXT: %64 = llvm.inttoptr %61 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %65 = llvm.load %64 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %66 = arith.andi %65, %c4722366482869645213695_i256 : i256 loc(#loc16) -// CHECK-NEXT: %67 = arith.shli %66, %62 : i256 loc(#loc16) -// CHECK-NEXT: %68 = arith.ori %63, %67 : i256 loc(#loc16) -// CHECK-NEXT: %69 = arith.addi %61, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %70 = arith.addi %62, %c72_i256 : i256 loc(#loc16) -// CHECK-NEXT: %71 = arith.addi %60, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb7(%71, %69, %70, %68 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) +// CHECK-NEXT: %64 = llvm.inttoptr %61 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %65 = llvm.load %64 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %66 = arith.andi %65, %c4722366482869645213695_i256 : i256 loc(#loc4) +// CHECK-NEXT: %67 = arith.shli %66, %62 : i256 loc(#loc4) +// CHECK-NEXT: %68 = arith.ori %63, %67 : i256 loc(#loc4) +// CHECK-NEXT: %69 = arith.addi %61, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %70 = arith.addi %62, %c72_i256 : i256 loc(#loc4) +// CHECK-NEXT: %71 = arith.addi %60, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb7(%71, %69, %70, %68 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) // CHECK-NEXT: ^bb9(%72: i256 loc({{.*}}:55:4)): // pred: ^bb7 -// CHECK-NEXT: %73 = llvm.inttoptr %52 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %72, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb10 loc(#loc16) +// CHECK-NEXT: %73 = llvm.inttoptr %52 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %72, %73 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb10 loc(#loc4) // CHECK-NEXT: ^bb10: // 2 preds: ^bb6, ^bb9 -// CHECK-NEXT: %74 = arith.addi %1, %c96_i256 : i256 loc(#loc16) -// CHECK-NEXT: %75 = llvm.inttoptr %74 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %76 = llvm.load %75 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc16) +// CHECK-NEXT: %74 = arith.addi %1, %c96_i256 : i256 loc(#loc4) +// CHECK-NEXT: %75 = llvm.inttoptr %74 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %76 = llvm.load %75 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc4) // CHECK-NEXT: ^bb11(%77: i256 loc({{.*}}:55:4)): // 2 preds: ^bb10, ^bb46 -// CHECK-NEXT: %78 = arith.cmpi ult, %77, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %78, ^bb12(%77 : i256), ^bb47 loc(#loc16) +// CHECK-NEXT: %78 = arith.cmpi ult, %77, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %78, ^bb12(%77 : i256), ^bb47 loc(#loc4) // CHECK-NEXT: ^bb12(%79: i256 loc({{.*}}:55:4)): // pred: ^bb11 -// CHECK-NEXT: %80 = arith.muli %79, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %81 = arith.addi %76, %80 : i256 loc(#loc16) -// CHECK-NEXT: %82 = arith.muli %79, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: %83 = arith.addi %82, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: %84 = llvm.inttoptr %81 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %85 = llvm.load %84 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %86 = llvm.inttoptr %85 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %87 = llvm.load %86 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %88 = arith.andi %87, %c4722366482869645213695_i256 : i256 loc(#loc16) -// CHECK-NEXT: %89 = arith.addi %85, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %90 = llvm.inttoptr %89 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %91 = llvm.load %90 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %92 = arith.andi %91, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %93 = arith.shli %92, %c72_i256 : i256 loc(#loc16) -// CHECK-NEXT: %94 = arith.ori %88, %93 : i256 loc(#loc16) -// CHECK-NEXT: %95 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %96 = llvm.load %95 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %97 = arith.andi %96, %c-1208925819614629174706176_i256 : i256 loc(#loc16) -// CHECK-NEXT: %98 = arith.ori %97, %94 : i256 loc(#loc16) -// CHECK-NEXT: %99 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %98, %99 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %100 = arith.addi %85, %c64_i256 : i256 loc(#loc16) -// CHECK-NEXT: %101 = llvm.inttoptr %100 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %102 = llvm.load %101 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %103 = arith.addi %82, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: %104 = llvm.inttoptr %102 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %105 = llvm.load %104 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %106 = arith.addi %102, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %107 = arith.cmpi ugt, %105, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %107, ^bb13, ^bb14 loc(#loc16) +// CHECK-NEXT: %80 = arith.muli %79, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %81 = arith.addi %76, %80 : i256 loc(#loc4) +// CHECK-NEXT: %82 = arith.muli %79, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: %83 = arith.addi %82, %c4_i256 : i256 loc(#loc4) +// CHECK-NEXT: %84 = llvm.inttoptr %81 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %85 = llvm.load %84 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %86 = llvm.inttoptr %85 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %87 = llvm.load %86 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %88 = arith.andi %87, %c4722366482869645213695_i256 : i256 loc(#loc4) +// CHECK-NEXT: %89 = arith.addi %85, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %90 = llvm.inttoptr %89 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %91 = llvm.load %90 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %92 = arith.andi %91, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %93 = arith.shli %92, %c72_i256 : i256 loc(#loc4) +// CHECK-NEXT: %94 = arith.ori %88, %93 : i256 loc(#loc4) +// CHECK-NEXT: %95 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %96 = llvm.load %95 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %97 = arith.andi %96, %c-1208925819614629174706176_i256 : i256 loc(#loc4) +// CHECK-NEXT: %98 = arith.ori %97, %94 : i256 loc(#loc4) +// CHECK-NEXT: %99 = llvm.inttoptr %83 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %98, %99 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %100 = arith.addi %85, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: %101 = llvm.inttoptr %100 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %102 = llvm.load %101 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %103 = arith.addi %82, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: %104 = llvm.inttoptr %102 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %105 = llvm.load %104 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %106 = arith.addi %102, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %107 = arith.cmpi ugt, %105, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %107, ^bb13, ^bb14 loc(#loc4) // CHECK-NEXT: ^bb13: // pred: ^bb12 -// CHECK-NEXT: %108 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %108 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %109 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %109 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %110 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%110, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb14 loc(#loc16) +// CHECK-NEXT: %108 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %108 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %109 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %109 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %110 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%110, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb14 loc(#loc4) // CHECK-NEXT: ^bb14: // 2 preds: ^bb12, ^bb13 -// CHECK-NEXT: %111 = llvm.inttoptr %103 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %112 = llvm.load %111 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %113 = llvm.inttoptr %103 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %105, %113 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %114 = arith.cmpi ult, %105, %112 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %114, ^bb15, ^bb22 loc(#loc16) +// CHECK-NEXT: %111 = llvm.inttoptr %103 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %112 = llvm.load %111 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %113 = llvm.inttoptr %103 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %105, %113 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %114 = arith.cmpi ult, %105, %112 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %114, ^bb15, ^bb22 loc(#loc4) // CHECK-NEXT: ^bb15: // pred: ^bb14 -// CHECK-NEXT: %115 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %103, %115 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %117 = "llvm.intrcall"(%116, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %118 = arith.addi %117, %105 : i256 loc(#loc16) -// CHECK-NEXT: %119 = arith.addi %117, %112 : i256 loc(#loc16) -// CHECK-NEXT: %120 = arith.subi %119, %118 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb16(%c0_i256 : i256) loc(#loc16) +// CHECK-NEXT: %115 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %103, %115 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %116 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %117 = "llvm.intrcall"(%116, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %118 = arith.addi %117, %105 : i256 loc(#loc4) +// CHECK-NEXT: %119 = arith.addi %117, %112 : i256 loc(#loc4) +// CHECK-NEXT: %120 = arith.subi %119, %118 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb16(%c0_i256 : i256) loc(#loc4) // CHECK-NEXT: ^bb16(%121: i256 loc({{.*}}:55:4)): // 2 preds: ^bb15, ^bb21 -// CHECK-NEXT: %122 = arith.cmpi ult, %121, %120 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %122, ^bb17(%121 : i256), ^bb22 loc(#loc16) +// CHECK-NEXT: %122 = arith.cmpi ult, %121, %120 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %122, ^bb17(%121 : i256), ^bb22 loc(#loc4) // CHECK-NEXT: ^bb17(%123: i256 loc({{.*}}:55:4)): // pred: ^bb16 -// CHECK-NEXT: %124 = arith.addi %118, %123 : i256 loc(#loc16) -// CHECK-NEXT: %125 = llvm.inttoptr %124 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %126 = llvm.load %125 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %127 = llvm.inttoptr %124 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %127 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %128 = arith.cmpi ugt, %126, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %128, ^bb18, ^bb21(%123 : i256) loc(#loc16) +// CHECK-NEXT: %124 = arith.addi %118, %123 : i256 loc(#loc4) +// CHECK-NEXT: %125 = llvm.inttoptr %124 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %126 = llvm.load %125 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %127 = llvm.inttoptr %124 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %127 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %128 = arith.cmpi ugt, %126, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %128, ^bb18, ^bb21(%123 : i256) loc(#loc4) // CHECK-NEXT: ^bb18: // pred: ^bb17 -// CHECK-NEXT: %129 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %124, %129 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %130 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %131 = "llvm.intrcall"(%130, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %132 = arith.addi %126, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %133 = arith.divui %132, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb19(%c0_i256 : i256) loc(#loc16) +// CHECK-NEXT: %129 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %124, %129 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %130 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %131 = "llvm.intrcall"(%130, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %132 = arith.addi %126, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %133 = arith.divui %132, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb19(%c0_i256 : i256) loc(#loc4) // CHECK-NEXT: ^bb19(%134: i256 loc({{.*}}:55:4)): // 2 preds: ^bb18, ^bb20 -// CHECK-NEXT: %135 = arith.cmpi ult, %134, %133 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %135, ^bb20(%134 : i256), ^bb21(%123 : i256) loc(#loc16) +// CHECK-NEXT: %135 = arith.cmpi ult, %134, %133 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %135, ^bb20(%134 : i256), ^bb21(%123 : i256) loc(#loc4) // CHECK-NEXT: ^bb20(%136: i256 loc({{.*}}:55:4)): // pred: ^bb19 -// CHECK-NEXT: %137 = arith.addi %131, %136 : i256 loc(#loc16) -// CHECK-NEXT: %138 = llvm.inttoptr %137 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %138 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %139 = arith.addi %136, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb19(%139 : i256) loc(#loc16) +// CHECK-NEXT: %137 = arith.addi %131, %136 : i256 loc(#loc4) +// CHECK-NEXT: %138 = llvm.inttoptr %137 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %138 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %139 = arith.addi %136, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb19(%139 : i256) loc(#loc4) // CHECK-NEXT: ^bb21(%140: i256 loc({{.*}}:55:4)): // 2 preds: ^bb17, ^bb19 -// CHECK-NEXT: %141 = arith.addi %140, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb16(%141 : i256) loc(#loc16) +// CHECK-NEXT: %141 = arith.addi %140, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb16(%141 : i256) loc(#loc4) // CHECK-NEXT: ^bb22: // 2 preds: ^bb14, ^bb16 -// CHECK-NEXT: %142 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %103, %142 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %143 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %144 = "llvm.intrcall"(%143, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb23(%c0_i256 : i256) loc(#loc16) +// CHECK-NEXT: %142 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %103, %142 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %143 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %144 = "llvm.intrcall"(%143, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb23(%c0_i256 : i256) loc(#loc4) // CHECK-NEXT: ^bb23(%145: i256 loc({{.*}}:55:4)): // 2 preds: ^bb22, ^bb42 -// CHECK-NEXT: %146 = arith.cmpi ult, %145, %105 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %146, ^bb24(%145 : i256), ^bb43 loc(#loc16) +// CHECK-NEXT: %146 = arith.cmpi ult, %145, %105 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %146, ^bb24(%145 : i256), ^bb43 loc(#loc4) // CHECK-NEXT: ^bb24(%147: i256 loc({{.*}}:55:4)): // pred: ^bb23 -// CHECK-NEXT: %148 = arith.muli %147, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %149 = arith.addi %106, %148 : i256 loc(#loc16) -// CHECK-NEXT: %150 = arith.addi %144, %147 : i256 loc(#loc16) -// CHECK-NEXT: %151 = llvm.inttoptr %149 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %152 = llvm.load %151 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %153 = llvm.inttoptr %152 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %154 = llvm.load %153 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %155 = arith.addi %152, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %156 = arith.cmpi ugt, %154, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %156, ^bb25, ^bb26 loc(#loc16) +// CHECK-NEXT: %148 = arith.muli %147, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %149 = arith.addi %106, %148 : i256 loc(#loc4) +// CHECK-NEXT: %150 = arith.addi %144, %147 : i256 loc(#loc4) +// CHECK-NEXT: %151 = llvm.inttoptr %149 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %152 = llvm.load %151 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %153 = llvm.inttoptr %152 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %154 = llvm.load %153 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %155 = arith.addi %152, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %156 = arith.cmpi ugt, %154, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %156, ^bb25, ^bb26 loc(#loc4) // CHECK-NEXT: ^bb25: // pred: ^bb24 -// CHECK-NEXT: %157 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %157 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %158 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %158 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%159, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb26 loc(#loc16) +// CHECK-NEXT: %157 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %157 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %158 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %158 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %159 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%159, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb26 loc(#loc4) // CHECK-NEXT: ^bb26: // 2 preds: ^bb24, ^bb25 -// CHECK-NEXT: %160 = llvm.inttoptr %150 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %161 = llvm.load %160 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %162 = llvm.inttoptr %150 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %154, %162 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %163 = arith.cmpi ult, %154, %161 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %163, ^bb27, ^bb32 loc(#loc16) +// CHECK-NEXT: %160 = llvm.inttoptr %150 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %161 = llvm.load %160 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %162 = llvm.inttoptr %150 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %154, %162 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %163 = arith.cmpi ult, %154, %161 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %163, ^bb27, ^bb32 loc(#loc4) // CHECK-NEXT: ^bb27: // pred: ^bb26 -// CHECK-NEXT: %164 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %150, %164 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %166 = "llvm.intrcall"(%165, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %167 = arith.addi %154, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %168 = arith.divui %167, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %169 = arith.addi %166, %168 : i256 loc(#loc16) -// CHECK-NEXT: %170 = arith.remui %154, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %171 = arith.cmpi ne, %170, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %171, ^bb28, ^bb29 loc(#loc16) +// CHECK-NEXT: %164 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %150, %164 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %165 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %166 = "llvm.intrcall"(%165, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %167 = arith.addi %154, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %168 = arith.divui %167, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %169 = arith.addi %166, %168 : i256 loc(#loc4) +// CHECK-NEXT: %170 = arith.remui %154, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %171 = arith.cmpi ne, %170, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %171, ^bb28, ^bb29 loc(#loc4) // CHECK-NEXT: ^bb28: // pred: ^bb27 -// CHECK-NEXT: %172 = arith.muli %170, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %173 = arith.subi %c256_i256, %172 : i256 loc(#loc16) -// CHECK-NEXT: %174 = arith.shrui %c-1_i256, %173 : i256 loc(#loc16) -// CHECK-NEXT: %175 = arith.subi %169, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %176 = llvm.inttoptr %175 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %177 = llvm.load %176 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %178 = arith.andi %177, %174 : i256 loc(#loc16) -// CHECK-NEXT: %179 = llvm.inttoptr %175 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %178, %179 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb29 loc(#loc16) +// CHECK-NEXT: %172 = arith.muli %170, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %173 = arith.subi %c256_i256, %172 : i256 loc(#loc4) +// CHECK-NEXT: %174 = arith.shrui %c-1_i256, %173 : i256 loc(#loc4) +// CHECK-NEXT: %175 = arith.subi %169, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %176 = llvm.inttoptr %175 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %177 = llvm.load %176 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %178 = arith.andi %177, %174 : i256 loc(#loc4) +// CHECK-NEXT: %179 = llvm.inttoptr %175 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %178, %179 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb29 loc(#loc4) // CHECK-NEXT: ^bb29: // 2 preds: ^bb27, ^bb28 -// CHECK-NEXT: %180 = arith.addi %161, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %181 = arith.divui %180, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %182 = arith.addi %166, %181 : i256 loc(#loc16) -// CHECK-NEXT: %183 = arith.subi %182, %169 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb30(%c0_i256 : i256) loc(#loc16) +// CHECK-NEXT: %180 = arith.addi %161, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %181 = arith.divui %180, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %182 = arith.addi %166, %181 : i256 loc(#loc4) +// CHECK-NEXT: %183 = arith.subi %182, %169 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb30(%c0_i256 : i256) loc(#loc4) // CHECK-NEXT: ^bb30(%184: i256 loc({{.*}}:55:4)): // 2 preds: ^bb29, ^bb31 -// CHECK-NEXT: %185 = arith.cmpi ult, %184, %183 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %185, ^bb31(%184 : i256), ^bb32 loc(#loc16) +// CHECK-NEXT: %185 = arith.cmpi ult, %184, %183 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %185, ^bb31(%184 : i256), ^bb32 loc(#loc4) // CHECK-NEXT: ^bb31(%186: i256 loc({{.*}}:55:4)): // pred: ^bb30 -// CHECK-NEXT: %187 = arith.addi %169, %186 : i256 loc(#loc16) -// CHECK-NEXT: %188 = llvm.inttoptr %187 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %188 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %189 = arith.addi %186, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb30(%189 : i256) loc(#loc16) +// CHECK-NEXT: %187 = arith.addi %169, %186 : i256 loc(#loc4) +// CHECK-NEXT: %188 = llvm.inttoptr %187 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %188 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %189 = arith.addi %186, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb30(%189 : i256) loc(#loc4) // CHECK-NEXT: ^bb32: // 2 preds: ^bb26, ^bb30 -// CHECK-NEXT: %190 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %150, %190 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %191 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %192 = "llvm.intrcall"(%191, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %193 = arith.cmpi uge, %154, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %194 = arith.subi %154, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %195 = arith.select %193, %194, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb33(%c0_i256, %155, %192, %c0_i256 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %190 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %150, %190 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %191 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %192 = "llvm.intrcall"(%191, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %193 = arith.cmpi uge, %154, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %194 = arith.subi %154, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %195 = arith.select %193, %194, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb33(%c0_i256, %155, %192, %c0_i256 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb33(%196: i256 loc({{.*}}:55:4), %197: i256 loc({{.*}}:55:4), %198: i256 loc({{.*}}:55:4), %199: i256 loc({{.*}}:55:4)): // 2 preds: ^bb32, ^bb37 -// CHECK-NEXT: %200 = arith.cmpi ult, %196, %195 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %200, ^bb34(%196, %197, %198, %199 : i256, i256, i256, i256), ^bb38(%197, %198, %199 : i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %200 = arith.cmpi ult, %196, %195 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %200, ^bb34(%196, %197, %198, %199 : i256, i256, i256, i256), ^bb38(%197, %198, %199 : i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb34(%201: i256 loc({{.*}}:55:4), %202: i256 loc({{.*}}:55:4), %203: i256 loc({{.*}}:55:4), %204: i256 loc({{.*}}:55:4)): // pred: ^bb33 -// CHECK-NEXT: cf.br ^bb35(%c0_i256, %202, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: cf.br ^bb35(%c0_i256, %202, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb35(%205: i256 loc({{.*}}:55:4), %206: i256 loc({{.*}}:55:4), %207: i256 loc({{.*}}:55:4), %208: i256 loc({{.*}}:55:4)): // 2 preds: ^bb34, ^bb36 -// CHECK-NEXT: %209 = arith.cmpi ult, %205, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %209, ^bb36(%205, %206, %207, %208 : i256, i256, i256, i256), ^bb37(%206, %208 : i256, i256) loc(#loc16) +// CHECK-NEXT: %209 = arith.cmpi ult, %205, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %209, ^bb36(%205, %206, %207, %208 : i256, i256, i256, i256), ^bb37(%206, %208 : i256, i256) loc(#loc4) // CHECK-NEXT: ^bb36(%210: i256 loc({{.*}}:55:4), %211: i256 loc({{.*}}:55:4), %212: i256 loc({{.*}}:55:4), %213: i256 loc({{.*}}:55:4)): // pred: ^bb35 -// CHECK-NEXT: %214 = llvm.inttoptr %211 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %215 = llvm.load %214 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %216 = arith.andi %215, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %217 = arith.shli %216, %212 : i256 loc(#loc16) -// CHECK-NEXT: %218 = arith.ori %213, %217 : i256 loc(#loc16) -// CHECK-NEXT: %219 = arith.addi %211, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %220 = arith.addi %212, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %221 = arith.addi %210, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb35(%221, %219, %220, %218 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %214 = llvm.inttoptr %211 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %215 = llvm.load %214 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %216 = arith.andi %215, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %217 = arith.shli %216, %212 : i256 loc(#loc4) +// CHECK-NEXT: %218 = arith.ori %213, %217 : i256 loc(#loc4) +// CHECK-NEXT: %219 = arith.addi %211, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %220 = arith.addi %212, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %221 = arith.addi %210, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb35(%221, %219, %220, %218 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb37(%222: i256 loc({{.*}}:55:4), %223: i256 loc({{.*}}:55:4)): // pred: ^bb35 -// CHECK-NEXT: %224 = llvm.inttoptr %203 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %223, %224 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %225 = arith.addi %203, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %226 = arith.addi %204, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %227 = arith.addi %201, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb33(%227, %222, %225, %226 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %224 = llvm.inttoptr %203 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %223, %224 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %225 = arith.addi %203, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %226 = arith.addi %204, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %227 = arith.addi %201, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb33(%227, %222, %225, %226 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb38(%228: i256 loc({{.*}}:55:4), %229: i256 loc({{.*}}:55:4), %230: i256 loc({{.*}}:55:4)): // pred: ^bb33 -// CHECK-NEXT: %231 = arith.cmpi ult, %230, %154 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %231, ^bb39(%230, %228, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb42(%147 : i256) loc(#loc16) +// CHECK-NEXT: %231 = arith.cmpi ult, %230, %154 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %231, ^bb39(%230, %228, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb42(%147 : i256) loc(#loc4) // CHECK-NEXT: ^bb39(%232: i256 loc({{.*}}:55:4), %233: i256 loc({{.*}}:55:4), %234: i256 loc({{.*}}:55:4), %235: i256 loc({{.*}}:55:4)): // 2 preds: ^bb38, ^bb40 -// CHECK-NEXT: %236 = arith.cmpi ult, %232, %154 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %236, ^bb40(%232, %233, %234, %235 : i256, i256, i256, i256), ^bb41(%235 : i256) loc(#loc16) +// CHECK-NEXT: %236 = arith.cmpi ult, %232, %154 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %236, ^bb40(%232, %233, %234, %235 : i256, i256, i256, i256), ^bb41(%235 : i256) loc(#loc4) // CHECK-NEXT: ^bb40(%237: i256 loc({{.*}}:55:4), %238: i256 loc({{.*}}:55:4), %239: i256 loc({{.*}}:55:4), %240: i256 loc({{.*}}:55:4)): // pred: ^bb39 -// CHECK-NEXT: %241 = llvm.inttoptr %238 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %242 = llvm.load %241 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %243 = arith.andi %242, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %244 = arith.shli %243, %239 : i256 loc(#loc16) -// CHECK-NEXT: %245 = arith.ori %240, %244 : i256 loc(#loc16) -// CHECK-NEXT: %246 = arith.addi %238, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %247 = arith.addi %239, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %248 = arith.addi %237, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb39(%248, %246, %247, %245 : i256, i256, i256, i256) loc(#loc16) +// CHECK-NEXT: %241 = llvm.inttoptr %238 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %242 = llvm.load %241 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %243 = arith.andi %242, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %244 = arith.shli %243, %239 : i256 loc(#loc4) +// CHECK-NEXT: %245 = arith.ori %240, %244 : i256 loc(#loc4) +// CHECK-NEXT: %246 = arith.addi %238, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %247 = arith.addi %239, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %248 = arith.addi %237, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb39(%248, %246, %247, %245 : i256, i256, i256, i256) loc(#loc4) // CHECK-NEXT: ^bb41(%249: i256 loc({{.*}}:55:4)): // pred: ^bb39 -// CHECK-NEXT: %250 = llvm.inttoptr %229 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %249, %250 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb42(%147 : i256) loc(#loc16) +// CHECK-NEXT: %250 = llvm.inttoptr %229 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %249, %250 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb42(%147 : i256) loc(#loc4) // CHECK-NEXT: ^bb42(%251: i256 loc({{.*}}:55:4)): // 2 preds: ^bb38, ^bb41 -// CHECK-NEXT: %252 = arith.addi %251, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb23(%252 : i256) loc(#loc16) +// CHECK-NEXT: %252 = arith.addi %251, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb23(%252 : i256) loc(#loc4) // CHECK-NEXT: ^bb43: // pred: ^bb23 -// CHECK-NEXT: %253 = arith.addi %85, %c96_i256 : i256 loc(#loc16) -// CHECK-NEXT: %254 = llvm.inttoptr %253 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %255 = llvm.load %254 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %256 = arith.addi %82, %c6_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb44(%c0_i256 : i256) loc(#loc16) +// CHECK-NEXT: %253 = arith.addi %85, %c96_i256 : i256 loc(#loc4) +// CHECK-NEXT: %254 = llvm.inttoptr %253 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %255 = llvm.load %254 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %256 = arith.addi %82, %c6_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb44(%c0_i256 : i256) loc(#loc4) // CHECK-NEXT: ^bb44(%257: i256 loc({{.*}}:55:4)): // 2 preds: ^bb43, ^bb45 -// CHECK-NEXT: %258 = arith.cmpi ult, %257, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %258, ^bb45(%257 : i256), ^bb46 loc(#loc16) +// CHECK-NEXT: %258 = arith.cmpi ult, %257, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %258, ^bb45(%257 : i256), ^bb46 loc(#loc4) // CHECK-NEXT: ^bb45(%259: i256 loc({{.*}}:55:4)): // pred: ^bb44 -// CHECK-NEXT: %260 = arith.muli %259, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %261 = arith.addi %255, %260 : i256 loc(#loc16) -// CHECK-NEXT: %262 = arith.addi %256, %259 : i256 loc(#loc16) -// CHECK-NEXT: %263 = llvm.inttoptr %261 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %264 = llvm.load %263 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %265 = arith.andi %264, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc16) -// CHECK-NEXT: %266 = llvm.inttoptr %262 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %265, %266 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %267 = arith.addi %259, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb44(%267 : i256) loc(#loc16) +// CHECK-NEXT: %260 = arith.muli %259, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %261 = arith.addi %255, %260 : i256 loc(#loc4) +// CHECK-NEXT: %262 = arith.addi %256, %259 : i256 loc(#loc4) +// CHECK-NEXT: %263 = llvm.inttoptr %261 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %264 = llvm.load %263 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %265 = arith.andi %264, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) +// CHECK-NEXT: %266 = llvm.inttoptr %262 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %265, %266 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %267 = arith.addi %259, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb44(%267 : i256) loc(#loc4) // CHECK-NEXT: ^bb46: // pred: ^bb44 -// CHECK-NEXT: %268 = arith.addi %85, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %269 = llvm.inttoptr %268 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %270 = llvm.load %269 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %271 = arith.andi %270, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc16) -// CHECK-NEXT: %272 = arith.addi %85, %c160_i256 : i256 loc(#loc16) -// CHECK-NEXT: %273 = llvm.inttoptr %272 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %274 = llvm.load %273 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %275 = arith.andi %274, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %276 = arith.shli %275, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %277 = arith.ori %271, %276 : i256 loc(#loc16) -// CHECK-NEXT: %278 = arith.addi %85, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %279 = llvm.inttoptr %278 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %280 = llvm.load %279 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %281 = arith.shrui %280, %c224_i256 : i256 loc(#loc16) -// CHECK-NEXT: %282 = arith.shli %281, %c200_i256 : i256 loc(#loc16) -// CHECK-NEXT: %283 = arith.ori %277, %282 : i256 loc(#loc16) -// CHECK-NEXT: %284 = arith.addi %82, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %285 = llvm.inttoptr %284 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %286 = llvm.load %285 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %287 = arith.andi %286, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc16) -// CHECK-NEXT: %288 = arith.ori %287, %283 : i256 loc(#loc16) -// CHECK-NEXT: %289 = llvm.inttoptr %284 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %288, %289 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %290 = arith.addi %79, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb11(%290 : i256) loc(#loc16) +// CHECK-NEXT: %268 = arith.addi %85, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %269 = llvm.inttoptr %268 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %270 = llvm.load %269 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %271 = arith.andi %270, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc4) +// CHECK-NEXT: %272 = arith.addi %85, %c160_i256 : i256 loc(#loc4) +// CHECK-NEXT: %273 = llvm.inttoptr %272 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %274 = llvm.load %273 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %275 = arith.andi %274, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %276 = arith.shli %275, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %277 = arith.ori %271, %276 : i256 loc(#loc4) +// CHECK-NEXT: %278 = arith.addi %85, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %279 = llvm.inttoptr %278 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %280 = llvm.load %279 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %281 = arith.shrui %280, %c224_i256 : i256 loc(#loc4) +// CHECK-NEXT: %282 = arith.shli %281, %c200_i256 : i256 loc(#loc4) +// CHECK-NEXT: %283 = arith.ori %277, %282 : i256 loc(#loc4) +// CHECK-NEXT: %284 = arith.addi %82, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %285 = llvm.inttoptr %284 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %286 = llvm.load %285 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %287 = arith.andi %286, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc4) +// CHECK-NEXT: %288 = arith.ori %287, %283 : i256 loc(#loc4) +// CHECK-NEXT: %289 = llvm.inttoptr %284 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %288, %289 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %290 = arith.addi %79, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb11(%290 : i256) loc(#loc4) // CHECK-NEXT: ^bb47: // pred: ^bb11 -// CHECK-NEXT: %291 = arith.addi %1, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %292 = llvm.inttoptr %291 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %293 = llvm.load %292 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %294 = llvm.inttoptr %293 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %295 = llvm.load %294 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %296 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %297 = llvm.load %296 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %298 = arith.shrui %297, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %299 = arith.andi %297, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %300 = arith.cmpi eq, %299, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: %301 = arith.andi %298, %c127_i256 : i256 loc(#loc16) -// CHECK-NEXT: %302 = arith.select %300, %301, %298 : i256 loc(#loc16) -// CHECK-NEXT: %303 = arith.cmpi ult, %302, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %304 = arith.extui %303 : i1 to i256 loc(#loc16) -// CHECK-NEXT: %305 = arith.cmpi eq, %299, %304 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %305, ^bb48, ^bb49 loc(#loc16) +// CHECK-NEXT: %291 = arith.addi %1, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %292 = llvm.inttoptr %291 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %293 = llvm.load %292 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%293, %c19_i256) : (i256, i256) -> () loc(#loc4) +// CHECK-NEXT: %294 = arith.addi %1, %c160_i256 : i256 loc(#loc4) +// CHECK-NEXT: %295 = llvm.inttoptr %294 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %296 = llvm.load %295 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %297 = llvm.inttoptr %296 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %298 = llvm.load %297 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %299 = arith.addi %296, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %300 = arith.cmpi ugt, %298, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %300, ^bb48, ^bb49 loc(#loc4) // CHECK-NEXT: ^bb48: // pred: ^bb47 -// CHECK-NEXT: %306 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %306 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %307 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c34_i256, %307 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %308 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%308, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb49 loc(#loc16) +// CHECK-NEXT: %301 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %301 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %302 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %302 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %303 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%303, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb49 loc(#loc4) // CHECK-NEXT: ^bb49: // 2 preds: ^bb47, ^bb48 -// CHECK-NEXT: %309 = arith.cmpi ugt, %302, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %309, ^bb50, ^bb53 loc(#loc16) +// CHECK-NEXT: %304 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %305 = llvm.load %304 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %306 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %298, %306 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %307 = arith.cmpi ult, %298, %305 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %307, ^bb50, ^bb53 loc(#loc4) // CHECK-NEXT: ^bb50: // pred: ^bb49 -// CHECK-NEXT: %310 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c19_i256, %310 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %311 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %312 = "llvm.intrcall"(%311, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %313 = arith.addi %295, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %314 = arith.divui %313, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %315 = arith.addi %312, %314 : i256 loc(#loc16) -// CHECK-NEXT: %316 = arith.cmpi ult, %295, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %317 = arith.select %316, %312, %315 : i256 loc(#loc16) -// CHECK-NEXT: %318 = arith.addi %302, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %319 = arith.divui %318, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %320 = arith.addi %312, %319 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb51(%317 : i256) loc(#loc16) -// CHECK-NEXT: ^bb51(%321: i256 loc({{.*}}:55:4)): // 2 preds: ^bb50, ^bb52 -// CHECK-NEXT: %322 = arith.cmpi ult, %321, %320 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %322, ^bb52(%321 : i256), ^bb53 loc(#loc16) -// CHECK-NEXT: ^bb52(%323: i256 loc({{.*}}:55:4)): // pred: ^bb51 -// CHECK-NEXT: %324 = llvm.inttoptr %323 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %324 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %325 = arith.addi %323, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb51(%325 : i256) loc(#loc16) +// CHECK-NEXT: %308 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c20_i256, %308 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %309 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %310 = "llvm.intrcall"(%309, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %311 = arith.addi %310, %298 : i256 loc(#loc4) +// CHECK-NEXT: %312 = arith.addi %310, %305 : i256 loc(#loc4) +// CHECK-NEXT: %313 = arith.subi %312, %311 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb51(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb51(%314: i256 loc({{.*}}:55:4)): // 2 preds: ^bb50, ^bb52 +// CHECK-NEXT: %315 = arith.cmpi ult, %314, %313 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %315, ^bb52(%314 : i256), ^bb53 loc(#loc4) +// CHECK-NEXT: ^bb52(%316: i256 loc({{.*}}:55:4)): // pred: ^bb51 +// CHECK-NEXT: %317 = arith.addi %311, %316 : i256 loc(#loc4) +// CHECK-NEXT: %318 = llvm.inttoptr %317 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %318 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %319 = arith.addi %316, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb51(%319 : i256) loc(#loc4) // CHECK-NEXT: ^bb53: // 2 preds: ^bb49, ^bb51 -// CHECK-NEXT: %326 = arith.cmpi ugt, %295, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %326, ^bb57, ^bb54 loc(#loc16) -// CHECK-NEXT: ^bb54: // pred: ^bb53 -// CHECK-NEXT: %327 = arith.cmpi ne, %295, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %327, ^bb56, ^bb55 loc(#loc16) -// CHECK-NEXT: ^bb55: // pred: ^bb54 -// CHECK-NEXT: %328 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %328 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb63 loc(#loc16) +// CHECK-NEXT: %320 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c20_i256, %320 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %321 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %322 = "llvm.intrcall"(%321, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb54(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb54(%323: i256 loc({{.*}}:55:4)): // 2 preds: ^bb53, ^bb55 +// CHECK-NEXT: %324 = arith.cmpi ult, %323, %298 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %324, ^bb55(%323 : i256), ^bb56 loc(#loc4) +// CHECK-NEXT: ^bb55(%325: i256 loc({{.*}}:55:4)): // pred: ^bb54 +// CHECK-NEXT: %326 = arith.muli %325, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %327 = arith.addi %299, %326 : i256 loc(#loc4) +// CHECK-NEXT: %328 = arith.addi %322, %325 : i256 loc(#loc4) +// CHECK-NEXT: %329 = llvm.inttoptr %327 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %330 = llvm.load %329 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %331 = llvm.inttoptr %328 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %330, %331 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %332 = arith.addi %325, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb54(%332 : i256) loc(#loc4) // CHECK-NEXT: ^bb56: // pred: ^bb54 -// CHECK-NEXT: %329 = arith.addi %293, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %330 = llvm.inttoptr %329 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %331 = llvm.load %330 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %332 = arith.muli %295, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %333 = arith.subi %c256_i256, %332 : i256 loc(#loc16) -// CHECK-NEXT: %334 = arith.shli %c-1_i256, %333 : i256 loc(#loc16) -// CHECK-NEXT: %335 = arith.andi %331, %334 : i256 loc(#loc16) -// CHECK-NEXT: %336 = arith.muli %295, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %337 = arith.ori %335, %336 : i256 loc(#loc16) -// CHECK-NEXT: %338 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %337, %338 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb63 loc(#loc16) -// CHECK-NEXT: ^bb57: // pred: ^bb53 -// CHECK-NEXT: %339 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c19_i256, %339 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %340 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %341 = "llvm.intrcall"(%340, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %342 = arith.addi %293, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %343 = arith.andi %295, %c-32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb58(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb58(%344: i256 loc({{.*}}:55:4)): // 2 preds: ^bb57, ^bb59 -// CHECK-NEXT: %345 = arith.cmpi ult, %344, %343 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %345, ^bb59(%344 : i256), ^bb60 loc(#loc16) -// CHECK-NEXT: ^bb59(%346: i256 loc({{.*}}:55:4)): // pred: ^bb58 -// CHECK-NEXT: %347 = arith.divui %346, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %348 = arith.addi %342, %346 : i256 loc(#loc16) -// CHECK-NEXT: %349 = llvm.inttoptr %348 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %350 = llvm.load %349 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %351 = arith.addi %341, %347 : i256 loc(#loc16) -// CHECK-NEXT: %352 = llvm.inttoptr %351 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %350, %352 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %353 = arith.addi %346, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb58(%353 : i256) loc(#loc16) -// CHECK-NEXT: ^bb60: // pred: ^bb58 -// CHECK-NEXT: %354 = arith.cmpi ult, %343, %295 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %354, ^bb61, ^bb62 loc(#loc16) -// CHECK-NEXT: ^bb61: // pred: ^bb60 -// CHECK-NEXT: %355 = arith.andi %295, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %356 = arith.divui %343, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %357 = arith.addi %342, %343 : i256 loc(#loc16) -// CHECK-NEXT: %358 = llvm.inttoptr %357 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %359 = llvm.load %358 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %360 = arith.muli %355, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %361 = arith.subi %c256_i256, %360 : i256 loc(#loc16) -// CHECK-NEXT: %362 = arith.shli %c-1_i256, %361 : i256 loc(#loc16) -// CHECK-NEXT: %363 = arith.andi %359, %362 : i256 loc(#loc16) -// CHECK-NEXT: %364 = arith.addi %341, %356 : i256 loc(#loc16) -// CHECK-NEXT: %365 = llvm.inttoptr %364 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %363, %365 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb62 loc(#loc16) -// CHECK-NEXT: ^bb62: // 2 preds: ^bb60, ^bb61 -// CHECK-NEXT: %366 = arith.muli %295, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %367 = arith.ori %366, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %368 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %367, %368 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb63 loc(#loc16) -// CHECK-NEXT: ^bb63: // 3 preds: ^bb55, ^bb56, ^bb62 -// CHECK-NEXT: %369 = arith.addi %1, %c160_i256 : i256 loc(#loc16) -// CHECK-NEXT: %370 = llvm.inttoptr %369 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %371 = llvm.load %370 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %372 = llvm.inttoptr %371 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %373 = llvm.load %372 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %374 = arith.addi %371, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %375 = arith.cmpi ugt, %373, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %375, ^bb64, ^bb65 loc(#loc16) -// CHECK-NEXT: ^bb64: // pred: ^bb63 -// CHECK-NEXT: %376 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %376 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %377 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %377 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %378 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%378, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb65 loc(#loc16) -// CHECK-NEXT: ^bb65: // 2 preds: ^bb63, ^bb64 -// CHECK-NEXT: %379 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %380 = llvm.load %379 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %381 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %373, %381 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %382 = arith.cmpi ult, %373, %380 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %382, ^bb66, ^bb69 loc(#loc16) -// CHECK-NEXT: ^bb66: // pred: ^bb65 -// CHECK-NEXT: %383 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c20_i256, %383 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %384 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %385 = "llvm.intrcall"(%384, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %386 = arith.addi %385, %373 : i256 loc(#loc16) -// CHECK-NEXT: %387 = arith.addi %385, %380 : i256 loc(#loc16) -// CHECK-NEXT: %388 = arith.subi %387, %386 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb67(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb67(%389: i256 loc({{.*}}:55:4)): // 2 preds: ^bb66, ^bb68 -// CHECK-NEXT: %390 = arith.cmpi ult, %389, %388 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %390, ^bb68(%389 : i256), ^bb69 loc(#loc16) -// CHECK-NEXT: ^bb68(%391: i256 loc({{.*}}:55:4)): // pred: ^bb67 -// CHECK-NEXT: %392 = arith.addi %386, %391 : i256 loc(#loc16) -// CHECK-NEXT: %393 = llvm.inttoptr %392 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %393 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %394 = arith.addi %391, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb67(%394 : i256) loc(#loc16) -// CHECK-NEXT: ^bb69: // 2 preds: ^bb65, ^bb67 -// CHECK-NEXT: %395 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c20_i256, %395 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %396 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %397 = "llvm.intrcall"(%396, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb70(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb70(%398: i256 loc({{.*}}:55:4)): // 2 preds: ^bb69, ^bb71 -// CHECK-NEXT: %399 = arith.cmpi ult, %398, %373 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %399, ^bb71(%398 : i256), ^bb72 loc(#loc16) -// CHECK-NEXT: ^bb71(%400: i256 loc({{.*}}:55:4)): // pred: ^bb70 -// CHECK-NEXT: %401 = arith.muli %400, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %402 = arith.addi %374, %401 : i256 loc(#loc16) -// CHECK-NEXT: %403 = arith.addi %397, %400 : i256 loc(#loc16) -// CHECK-NEXT: %404 = llvm.inttoptr %402 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %405 = llvm.load %404 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %406 = llvm.inttoptr %403 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %405, %406 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %407 = arith.addi %400, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb70(%407 : i256) loc(#loc16) -// CHECK-NEXT: ^bb72: // pred: ^bb70 -// CHECK-NEXT: %408 = arith.addi %1, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %409 = llvm.inttoptr %408 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %410 = llvm.load %409 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %411 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %410, %411 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %412 = arith.addi %1, %c224_i256 : i256 loc(#loc16) -// CHECK-NEXT: %413 = llvm.inttoptr %412 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %414 = llvm.load %413 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %415 = arith.andi %414, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc16) -// CHECK-NEXT: %416 = arith.addi %1, %c256_i256 : i256 loc(#loc16) -// CHECK-NEXT: %417 = llvm.inttoptr %416 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %418 = llvm.load %417 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %419 = arith.andi %418, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %420 = arith.shli %419, %c224_i256 : i256 loc(#loc16) -// CHECK-NEXT: %421 = arith.ori %415, %420 : i256 loc(#loc16) -// CHECK-NEXT: %422 = arith.addi %1, %c288_i256 : i256 loc(#loc16) -// CHECK-NEXT: %423 = llvm.inttoptr %422 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %424 = llvm.load %423 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %425 = arith.andi %424, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %426 = arith.shli %425, %c232_i256 : i256 loc(#loc16) -// CHECK-NEXT: %427 = arith.ori %421, %426 : i256 loc(#loc16) -// CHECK-NEXT: %428 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %429 = llvm.load %428 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %430 = arith.andi %429, %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 : i256 loc(#loc16) -// CHECK-NEXT: %431 = arith.ori %430, %427 : i256 loc(#loc16) -// CHECK-NEXT: %432 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %431, %432 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %433 = arith.addi %1, %c320_i256 : i256 loc(#loc16) -// CHECK-NEXT: %434 = llvm.inttoptr %433 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %435 = llvm.load %434 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %436 = llvm.inttoptr %435 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %437 = llvm.load %436 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %438 = arith.andi %437, %c4722366482869645213695_i256 : i256 loc(#loc16) -// CHECK-NEXT: %439 = arith.addi %435, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %440 = llvm.inttoptr %439 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %441 = llvm.load %440 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %442 = arith.andi %441, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %443 = arith.shli %442, %c72_i256 : i256 loc(#loc16) -// CHECK-NEXT: %444 = arith.ori %438, %443 : i256 loc(#loc16) -// CHECK-NEXT: %445 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %446 = llvm.load %445 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %447 = arith.andi %446, %c-1208925819614629174706176_i256 : i256 loc(#loc16) -// CHECK-NEXT: %448 = arith.ori %447, %444 : i256 loc(#loc16) -// CHECK-NEXT: %449 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %448, %449 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %450 = arith.addi %435, %c64_i256 : i256 loc(#loc16) -// CHECK-NEXT: %451 = llvm.inttoptr %450 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %452 = llvm.load %451 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %453 = llvm.inttoptr %452 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %454 = llvm.load %453 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %455 = arith.addi %452, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %456 = arith.cmpi ugt, %454, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %456, ^bb73, ^bb74 loc(#loc16) -// CHECK-NEXT: ^bb73: // pred: ^bb72 -// CHECK-NEXT: %457 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %457 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %458 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %458 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %459 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%459, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb74 loc(#loc16) -// CHECK-NEXT: ^bb74: // 2 preds: ^bb72, ^bb73 -// CHECK-NEXT: %460 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %461 = llvm.load %460 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %462 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %454, %462 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %463 = arith.cmpi ult, %454, %461 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %463, ^bb75, ^bb82 loc(#loc16) -// CHECK-NEXT: ^bb75: // pred: ^bb74 -// CHECK-NEXT: %464 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c24_i256, %464 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %465 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %466 = "llvm.intrcall"(%465, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %467 = arith.addi %466, %454 : i256 loc(#loc16) -// CHECK-NEXT: %468 = arith.addi %466, %461 : i256 loc(#loc16) -// CHECK-NEXT: %469 = arith.subi %468, %467 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb76(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb76(%470: i256 loc({{.*}}:55:4)): // 2 preds: ^bb75, ^bb81 -// CHECK-NEXT: %471 = arith.cmpi ult, %470, %469 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %471, ^bb77(%470 : i256), ^bb82 loc(#loc16) -// CHECK-NEXT: ^bb77(%472: i256 loc({{.*}}:55:4)): // pred: ^bb76 -// CHECK-NEXT: %473 = arith.addi %467, %472 : i256 loc(#loc16) -// CHECK-NEXT: %474 = llvm.inttoptr %473 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %475 = llvm.load %474 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %476 = llvm.inttoptr %473 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %476 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %477 = arith.cmpi ugt, %475, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %477, ^bb78, ^bb81(%472 : i256) loc(#loc16) -// CHECK-NEXT: ^bb78: // pred: ^bb77 -// CHECK-NEXT: %478 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %473, %478 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %479 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %480 = "llvm.intrcall"(%479, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %481 = arith.addi %475, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %482 = arith.divui %481, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb79(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb79(%483: i256 loc({{.*}}:55:4)): // 2 preds: ^bb78, ^bb80 -// CHECK-NEXT: %484 = arith.cmpi ult, %483, %482 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %484, ^bb80(%483 : i256), ^bb81(%472 : i256) loc(#loc16) -// CHECK-NEXT: ^bb80(%485: i256 loc({{.*}}:55:4)): // pred: ^bb79 -// CHECK-NEXT: %486 = arith.addi %480, %485 : i256 loc(#loc16) -// CHECK-NEXT: %487 = llvm.inttoptr %486 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %487 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %488 = arith.addi %485, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb79(%488 : i256) loc(#loc16) -// CHECK-NEXT: ^bb81(%489: i256 loc({{.*}}:55:4)): // 2 preds: ^bb77, ^bb79 -// CHECK-NEXT: %490 = arith.addi %489, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb76(%490 : i256) loc(#loc16) -// CHECK-NEXT: ^bb82: // 2 preds: ^bb74, ^bb76 -// CHECK-NEXT: %491 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c24_i256, %491 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %492 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %493 = "llvm.intrcall"(%492, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb83(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb83(%494: i256 loc({{.*}}:55:4)): // 2 preds: ^bb82, ^bb102 -// CHECK-NEXT: %495 = arith.cmpi ult, %494, %454 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %495, ^bb84(%494 : i256), ^bb103 loc(#loc16) -// CHECK-NEXT: ^bb84(%496: i256 loc({{.*}}:55:4)): // pred: ^bb83 -// CHECK-NEXT: %497 = arith.muli %496, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %498 = arith.addi %455, %497 : i256 loc(#loc16) -// CHECK-NEXT: %499 = arith.addi %493, %496 : i256 loc(#loc16) -// CHECK-NEXT: %500 = llvm.inttoptr %498 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %501 = llvm.load %500 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %502 = llvm.inttoptr %501 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %503 = llvm.load %502 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %504 = arith.addi %501, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %505 = arith.cmpi ugt, %503, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %505, ^bb85, ^bb86 loc(#loc16) -// CHECK-NEXT: ^bb85: // pred: ^bb84 -// CHECK-NEXT: %506 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %506 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %507 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %507 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %508 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%508, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb86 loc(#loc16) -// CHECK-NEXT: ^bb86: // 2 preds: ^bb84, ^bb85 -// CHECK-NEXT: %509 = llvm.inttoptr %499 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %510 = llvm.load %509 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %511 = llvm.inttoptr %499 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %503, %511 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %512 = arith.cmpi ult, %503, %510 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %512, ^bb87, ^bb92 loc(#loc16) -// CHECK-NEXT: ^bb87: // pred: ^bb86 -// CHECK-NEXT: %513 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %499, %513 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %514 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %515 = "llvm.intrcall"(%514, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %516 = arith.addi %503, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %517 = arith.divui %516, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %518 = arith.addi %515, %517 : i256 loc(#loc16) -// CHECK-NEXT: %519 = arith.remui %503, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %520 = arith.cmpi ne, %519, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %520, ^bb88, ^bb89 loc(#loc16) -// CHECK-NEXT: ^bb88: // pred: ^bb87 -// CHECK-NEXT: %521 = arith.muli %519, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %522 = arith.subi %c256_i256, %521 : i256 loc(#loc16) -// CHECK-NEXT: %523 = arith.shrui %c-1_i256, %522 : i256 loc(#loc16) -// CHECK-NEXT: %524 = arith.subi %518, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %525 = llvm.inttoptr %524 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %526 = llvm.load %525 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %527 = arith.andi %526, %523 : i256 loc(#loc16) -// CHECK-NEXT: %528 = llvm.inttoptr %524 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %527, %528 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb89 loc(#loc16) -// CHECK-NEXT: ^bb89: // 2 preds: ^bb87, ^bb88 -// CHECK-NEXT: %529 = arith.addi %510, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %530 = arith.divui %529, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %531 = arith.addi %515, %530 : i256 loc(#loc16) -// CHECK-NEXT: %532 = arith.subi %531, %518 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb90(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb90(%533: i256 loc({{.*}}:55:4)): // 2 preds: ^bb89, ^bb91 -// CHECK-NEXT: %534 = arith.cmpi ult, %533, %532 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %534, ^bb91(%533 : i256), ^bb92 loc(#loc16) -// CHECK-NEXT: ^bb91(%535: i256 loc({{.*}}:55:4)): // pred: ^bb90 -// CHECK-NEXT: %536 = arith.addi %518, %535 : i256 loc(#loc16) -// CHECK-NEXT: %537 = llvm.inttoptr %536 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %537 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %538 = arith.addi %535, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb90(%538 : i256) loc(#loc16) -// CHECK-NEXT: ^bb92: // 2 preds: ^bb86, ^bb90 -// CHECK-NEXT: %539 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %499, %539 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %540 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %541 = "llvm.intrcall"(%540, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %542 = arith.cmpi uge, %503, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %543 = arith.subi %503, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %544 = arith.select %542, %543, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb93(%c0_i256, %504, %541, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb93(%545: i256 loc({{.*}}:55:4), %546: i256 loc({{.*}}:55:4), %547: i256 loc({{.*}}:55:4), %548: i256 loc({{.*}}:55:4)): // 2 preds: ^bb92, ^bb97 -// CHECK-NEXT: %549 = arith.cmpi ult, %545, %544 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %549, ^bb94(%545, %546, %547, %548 : i256, i256, i256, i256), ^bb98(%546, %547, %548 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb94(%550: i256 loc({{.*}}:55:4), %551: i256 loc({{.*}}:55:4), %552: i256 loc({{.*}}:55:4), %553: i256 loc({{.*}}:55:4)): // pred: ^bb93 -// CHECK-NEXT: cf.br ^bb95(%c0_i256, %551, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb95(%554: i256 loc({{.*}}:55:4), %555: i256 loc({{.*}}:55:4), %556: i256 loc({{.*}}:55:4), %557: i256 loc({{.*}}:55:4)): // 2 preds: ^bb94, ^bb96 -// CHECK-NEXT: %558 = arith.cmpi ult, %554, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %558, ^bb96(%554, %555, %556, %557 : i256, i256, i256, i256), ^bb97(%555, %557 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb96(%559: i256 loc({{.*}}:55:4), %560: i256 loc({{.*}}:55:4), %561: i256 loc({{.*}}:55:4), %562: i256 loc({{.*}}:55:4)): // pred: ^bb95 -// CHECK-NEXT: %563 = llvm.inttoptr %560 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %564 = llvm.load %563 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %565 = arith.andi %564, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %566 = arith.shli %565, %561 : i256 loc(#loc16) -// CHECK-NEXT: %567 = arith.ori %562, %566 : i256 loc(#loc16) -// CHECK-NEXT: %568 = arith.addi %560, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %569 = arith.addi %561, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %570 = arith.addi %559, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb95(%570, %568, %569, %567 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb97(%571: i256 loc({{.*}}:55:4), %572: i256 loc({{.*}}:55:4)): // pred: ^bb95 -// CHECK-NEXT: %573 = llvm.inttoptr %552 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %572, %573 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %574 = arith.addi %552, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %575 = arith.addi %553, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %576 = arith.addi %550, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb93(%576, %571, %574, %575 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb98(%577: i256 loc({{.*}}:55:4), %578: i256 loc({{.*}}:55:4), %579: i256 loc({{.*}}:55:4)): // pred: ^bb93 -// CHECK-NEXT: %580 = arith.cmpi ult, %579, %503 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %580, ^bb99(%579, %577, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb102(%496 : i256) loc(#loc16) -// CHECK-NEXT: ^bb99(%581: i256 loc({{.*}}:55:4), %582: i256 loc({{.*}}:55:4), %583: i256 loc({{.*}}:55:4), %584: i256 loc({{.*}}:55:4)): // 2 preds: ^bb98, ^bb100 -// CHECK-NEXT: %585 = arith.cmpi ult, %581, %503 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %585, ^bb100(%581, %582, %583, %584 : i256, i256, i256, i256), ^bb101(%584 : i256) loc(#loc16) -// CHECK-NEXT: ^bb100(%586: i256 loc({{.*}}:55:4), %587: i256 loc({{.*}}:55:4), %588: i256 loc({{.*}}:55:4), %589: i256 loc({{.*}}:55:4)): // pred: ^bb99 -// CHECK-NEXT: %590 = llvm.inttoptr %587 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %591 = llvm.load %590 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %592 = arith.andi %591, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %593 = arith.shli %592, %588 : i256 loc(#loc16) -// CHECK-NEXT: %594 = arith.ori %589, %593 : i256 loc(#loc16) -// CHECK-NEXT: %595 = arith.addi %587, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %596 = arith.addi %588, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %597 = arith.addi %586, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb99(%597, %595, %596, %594 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb101(%598: i256 loc({{.*}}:55:4)): // pred: ^bb99 -// CHECK-NEXT: %599 = llvm.inttoptr %578 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %598, %599 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb102(%496 : i256) loc(#loc16) -// CHECK-NEXT: ^bb102(%600: i256 loc({{.*}}:55:4)): // 2 preds: ^bb98, ^bb101 -// CHECK-NEXT: %601 = arith.addi %600, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb83(%601 : i256) loc(#loc16) -// CHECK-NEXT: ^bb103: // pred: ^bb83 -// CHECK-NEXT: %602 = arith.addi %435, %c96_i256 : i256 loc(#loc16) -// CHECK-NEXT: %603 = llvm.inttoptr %602 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %604 = llvm.load %603 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb104(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb104(%605: i256 loc({{.*}}:55:4)): // 2 preds: ^bb103, ^bb105 -// CHECK-NEXT: %606 = arith.cmpi ult, %605, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %606, ^bb105(%605 : i256), ^bb106 loc(#loc16) -// CHECK-NEXT: ^bb105(%607: i256 loc({{.*}}:55:4)): // pred: ^bb104 -// CHECK-NEXT: %608 = arith.muli %607, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %609 = arith.addi %604, %608 : i256 loc(#loc16) -// CHECK-NEXT: %610 = arith.addi %607, %c25_i256 : i256 loc(#loc16) -// CHECK-NEXT: %611 = llvm.inttoptr %609 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %612 = llvm.load %611 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %613 = arith.andi %612, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc16) -// CHECK-NEXT: %614 = llvm.inttoptr %610 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %613, %614 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %615 = arith.addi %607, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb104(%615 : i256) loc(#loc16) -// CHECK-NEXT: ^bb106: // pred: ^bb104 -// CHECK-NEXT: %616 = arith.addi %435, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %617 = llvm.inttoptr %616 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %618 = llvm.load %617 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %619 = arith.andi %618, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc16) -// CHECK-NEXT: %620 = arith.addi %435, %c160_i256 : i256 loc(#loc16) -// CHECK-NEXT: %621 = llvm.inttoptr %620 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %622 = llvm.load %621 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %623 = arith.andi %622, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %624 = arith.shli %623, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %625 = arith.ori %619, %624 : i256 loc(#loc16) -// CHECK-NEXT: %626 = arith.addi %435, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %627 = llvm.inttoptr %626 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %628 = llvm.load %627 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %629 = arith.shrui %628, %c224_i256 : i256 loc(#loc16) -// CHECK-NEXT: %630 = arith.shli %629, %c200_i256 : i256 loc(#loc16) -// CHECK-NEXT: %631 = arith.ori %625, %630 : i256 loc(#loc16) -// CHECK-NEXT: %632 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %633 = llvm.load %632 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %634 = arith.andi %633, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc16) -// CHECK-NEXT: %635 = arith.ori %634, %631 : i256 loc(#loc16) -// CHECK-NEXT: %636 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %635, %636 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %637 = arith.addi %1, %c352_i256 : i256 loc(#loc16) -// CHECK-NEXT: %638 = llvm.inttoptr %637 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %639 = llvm.load %638 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb107(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb107(%640: i256 loc({{.*}}:55:4)): // 2 preds: ^bb106, ^bb108 -// CHECK-NEXT: %641 = arith.cmpi ult, %640, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %641, ^bb108(%640 : i256), ^bb109 loc(#loc16) -// CHECK-NEXT: ^bb108(%642: i256 loc({{.*}}:55:4)): // pred: ^bb107 -// CHECK-NEXT: %643 = arith.muli %642, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %644 = arith.addi %639, %643 : i256 loc(#loc16) -// CHECK-NEXT: %645 = arith.addi %642, %c28_i256 : i256 loc(#loc16) -// CHECK-NEXT: %646 = llvm.inttoptr %644 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %647 = llvm.load %646 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %648 = arith.andi %647, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc16) -// CHECK-NEXT: %649 = llvm.inttoptr %645 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %648, %649 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %650 = arith.addi %642, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb107(%650 : i256) loc(#loc16) -// CHECK-NEXT: ^bb109: // pred: ^bb107 -// CHECK-NEXT: %651 = arith.addi %1, %c384_i256 : i256 loc(#loc16) -// CHECK-NEXT: %652 = llvm.inttoptr %651 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %653 = llvm.load %652 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %654 = llvm.inttoptr %653 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %655 = llvm.load %654 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %656 = arith.addi %653, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %657 = arith.cmpi ugt, %655, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %657, ^bb110, ^bb111 loc(#loc16) -// CHECK-NEXT: ^bb110: // pred: ^bb109 -// CHECK-NEXT: %658 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %658 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %659 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %659 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %660 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%660, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb111 loc(#loc16) -// CHECK-NEXT: ^bb111: // 2 preds: ^bb109, ^bb110 -// CHECK-NEXT: %661 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %662 = llvm.load %661 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %663 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %655, %663 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %664 = arith.cmpi ult, %655, %662 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %664, ^bb112, ^bb127 loc(#loc16) -// CHECK-NEXT: ^bb112: // pred: ^bb111 -// CHECK-NEXT: %665 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c30_i256, %665 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %666 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %667 = "llvm.intrcall"(%666, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %668 = arith.addi %667, %655 : i256 loc(#loc16) -// CHECK-NEXT: %669 = arith.addi %667, %662 : i256 loc(#loc16) -// CHECK-NEXT: %670 = arith.subi %669, %668 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb113(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb113(%671: i256 loc({{.*}}:55:4)): // 2 preds: ^bb112, ^bb126 -// CHECK-NEXT: %672 = arith.cmpi ult, %671, %670 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %672, ^bb114(%671 : i256), ^bb127 loc(#loc16) -// CHECK-NEXT: ^bb114(%673: i256 loc({{.*}}:55:4)): // pred: ^bb113 -// CHECK-NEXT: %674 = arith.addi %668, %673 : i256 loc(#loc16) -// CHECK-NEXT: %675 = llvm.inttoptr %674 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %676 = llvm.load %675 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %677 = llvm.inttoptr %674 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %677 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %678 = arith.cmpi ugt, %676, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %678, ^bb115, ^bb126(%673 : i256) loc(#loc16) -// CHECK-NEXT: ^bb115: // pred: ^bb114 -// CHECK-NEXT: %679 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %674, %679 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %680 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %681 = "llvm.intrcall"(%680, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %682 = arith.muli %676, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb116(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb116(%683: i256 loc({{.*}}:55:4)): // 2 preds: ^bb115, ^bb125 -// CHECK-NEXT: %684 = arith.cmpi ult, %683, %682 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %684, ^bb117(%683 : i256), ^bb126(%673 : i256) loc(#loc16) -// CHECK-NEXT: ^bb117(%685: i256 loc({{.*}}:55:4)): // pred: ^bb116 -// CHECK-NEXT: %686 = arith.addi %681, %685 : i256 loc(#loc16) -// CHECK-NEXT: %687 = llvm.inttoptr %686 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %687 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %688 = arith.addi %686, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %689 = llvm.inttoptr %688 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %690 = llvm.load %689 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %691 = llvm.inttoptr %688 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %691 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %692 = arith.cmpi ugt, %690, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %692, ^bb118, ^bb125 loc(#loc16) -// CHECK-NEXT: ^bb118: // pred: ^bb117 -// CHECK-NEXT: %693 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %688, %693 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %694 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %695 = "llvm.intrcall"(%694, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb119(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb119(%696: i256 loc({{.*}}:55:4)): // 2 preds: ^bb118, ^bb124 -// CHECK-NEXT: %697 = arith.cmpi ult, %696, %690 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %697, ^bb120(%696 : i256), ^bb125 loc(#loc16) -// CHECK-NEXT: ^bb120(%698: i256 loc({{.*}}:55:4)): // pred: ^bb119 -// CHECK-NEXT: %699 = arith.addi %695, %698 : i256 loc(#loc16) -// CHECK-NEXT: %700 = llvm.inttoptr %699 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %701 = llvm.load %700 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %702 = llvm.inttoptr %699 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %702 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %703 = arith.cmpi ugt, %701, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %703, ^bb121, ^bb124(%698 : i256) loc(#loc16) -// CHECK-NEXT: ^bb121: // pred: ^bb120 -// CHECK-NEXT: %704 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %699, %704 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %705 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %706 = "llvm.intrcall"(%705, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %707 = arith.addi %701, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %708 = arith.divui %707, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb122(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb122(%709: i256 loc({{.*}}:55:4)): // 2 preds: ^bb121, ^bb123 -// CHECK-NEXT: %710 = arith.cmpi ult, %709, %708 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %710, ^bb123(%709 : i256), ^bb124(%698 : i256) loc(#loc16) -// CHECK-NEXT: ^bb123(%711: i256 loc({{.*}}:55:4)): // pred: ^bb122 -// CHECK-NEXT: %712 = arith.addi %706, %711 : i256 loc(#loc16) -// CHECK-NEXT: %713 = llvm.inttoptr %712 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %713 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %714 = arith.addi %711, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb122(%714 : i256) loc(#loc16) -// CHECK-NEXT: ^bb124(%715: i256 loc({{.*}}:55:4)): // 2 preds: ^bb120, ^bb122 -// CHECK-NEXT: %716 = arith.addi %715, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb119(%716 : i256) loc(#loc16) -// CHECK-NEXT: ^bb125: // 2 preds: ^bb117, ^bb119 -// CHECK-NEXT: %717 = arith.addi %686, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %718 = llvm.inttoptr %717 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %718 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %719 = arith.addi %686, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: %720 = llvm.inttoptr %719 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %720 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %721 = arith.addi %686, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: %722 = llvm.inttoptr %721 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %722 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %723 = arith.addi %685, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb116(%723 : i256) loc(#loc16) -// CHECK-NEXT: ^bb126(%724: i256 loc({{.*}}:55:4)): // 2 preds: ^bb114, ^bb116 -// CHECK-NEXT: %725 = arith.addi %724, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb113(%725 : i256) loc(#loc16) -// CHECK-NEXT: ^bb127: // 2 preds: ^bb111, ^bb113 -// CHECK-NEXT: %726 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c30_i256, %726 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %727 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %728 = "llvm.intrcall"(%727, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb128(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb128(%729: i256 loc({{.*}}:55:4)): // 2 preds: ^bb127, ^bb180 -// CHECK-NEXT: %730 = arith.cmpi ult, %729, %655 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %730, ^bb129(%729 : i256), ^bb181 loc(#loc16) -// CHECK-NEXT: ^bb129(%731: i256 loc({{.*}}:55:4)): // pred: ^bb128 -// CHECK-NEXT: %732 = arith.muli %731, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %733 = arith.addi %656, %732 : i256 loc(#loc16) -// CHECK-NEXT: %734 = arith.addi %728, %731 : i256 loc(#loc16) -// CHECK-NEXT: %735 = llvm.inttoptr %733 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %736 = llvm.load %735 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %737 = llvm.inttoptr %736 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %738 = llvm.load %737 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %739 = arith.addi %736, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %740 = arith.cmpi ugt, %738, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %740, ^bb130, ^bb131 loc(#loc16) -// CHECK-NEXT: ^bb130: // pred: ^bb129 -// CHECK-NEXT: %741 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %741 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %742 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %742 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %743 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%743, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb131 loc(#loc16) -// CHECK-NEXT: ^bb131: // 2 preds: ^bb129, ^bb130 -// CHECK-NEXT: %744 = llvm.inttoptr %734 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %745 = llvm.load %744 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %746 = llvm.inttoptr %734 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %738, %746 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %747 = arith.cmpi ult, %738, %745 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %747, ^bb132, ^bb143 loc(#loc16) -// CHECK-NEXT: ^bb132: // pred: ^bb131 -// CHECK-NEXT: %748 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %734, %748 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %749 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %750 = "llvm.intrcall"(%749, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %751 = arith.muli %738, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: %752 = arith.addi %750, %751 : i256 loc(#loc16) -// CHECK-NEXT: %753 = arith.muli %745, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: %754 = arith.addi %750, %753 : i256 loc(#loc16) -// CHECK-NEXT: %755 = arith.subi %754, %752 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb133(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb133(%756: i256 loc({{.*}}:55:4)): // 2 preds: ^bb132, ^bb142 -// CHECK-NEXT: %757 = arith.cmpi ult, %756, %755 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %757, ^bb134(%756 : i256), ^bb143 loc(#loc16) -// CHECK-NEXT: ^bb134(%758: i256 loc({{.*}}:55:4)): // pred: ^bb133 -// CHECK-NEXT: %759 = arith.addi %752, %758 : i256 loc(#loc16) -// CHECK-NEXT: %760 = llvm.inttoptr %759 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %760 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %761 = arith.addi %759, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %762 = llvm.inttoptr %761 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %763 = llvm.load %762 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %764 = llvm.inttoptr %761 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %764 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %765 = arith.cmpi ugt, %763, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %765, ^bb135, ^bb142 loc(#loc16) -// CHECK-NEXT: ^bb135: // pred: ^bb134 -// CHECK-NEXT: %766 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %761, %766 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %767 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %768 = "llvm.intrcall"(%767, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb136(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb136(%769: i256 loc({{.*}}:55:4)): // 2 preds: ^bb135, ^bb141 -// CHECK-NEXT: %770 = arith.cmpi ult, %769, %763 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %770, ^bb137(%769 : i256), ^bb142 loc(#loc16) -// CHECK-NEXT: ^bb137(%771: i256 loc({{.*}}:55:4)): // pred: ^bb136 -// CHECK-NEXT: %772 = arith.addi %768, %771 : i256 loc(#loc16) -// CHECK-NEXT: %773 = llvm.inttoptr %772 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %774 = llvm.load %773 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %775 = llvm.inttoptr %772 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %775 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %776 = arith.cmpi ugt, %774, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %776, ^bb138, ^bb141(%771 : i256) loc(#loc16) +// CHECK-NEXT: %333 = arith.addi %1, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %334 = llvm.inttoptr %333 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %335 = llvm.load %334 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %336 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %335, %336 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %337 = arith.addi %1, %c224_i256 : i256 loc(#loc4) +// CHECK-NEXT: %338 = llvm.inttoptr %337 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %339 = llvm.load %338 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %340 = arith.andi %339, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc4) +// CHECK-NEXT: %341 = arith.addi %1, %c256_i256 : i256 loc(#loc4) +// CHECK-NEXT: %342 = llvm.inttoptr %341 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %343 = llvm.load %342 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %344 = arith.andi %343, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %345 = arith.shli %344, %c224_i256 : i256 loc(#loc4) +// CHECK-NEXT: %346 = arith.ori %340, %345 : i256 loc(#loc4) +// CHECK-NEXT: %347 = arith.addi %1, %c288_i256 : i256 loc(#loc4) +// CHECK-NEXT: %348 = llvm.inttoptr %347 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %349 = llvm.load %348 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %350 = arith.andi %349, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %351 = arith.shli %350, %c232_i256 : i256 loc(#loc4) +// CHECK-NEXT: %352 = arith.ori %346, %351 : i256 loc(#loc4) +// CHECK-NEXT: %353 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %354 = llvm.load %353 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %355 = arith.andi %354, %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 : i256 loc(#loc4) +// CHECK-NEXT: %356 = arith.ori %355, %352 : i256 loc(#loc4) +// CHECK-NEXT: %357 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %356, %357 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %358 = arith.addi %1, %c320_i256 : i256 loc(#loc4) +// CHECK-NEXT: %359 = llvm.inttoptr %358 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %360 = llvm.load %359 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %361 = llvm.inttoptr %360 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %362 = llvm.load %361 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %363 = arith.andi %362, %c4722366482869645213695_i256 : i256 loc(#loc4) +// CHECK-NEXT: %364 = arith.addi %360, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %365 = llvm.inttoptr %364 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %366 = llvm.load %365 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %367 = arith.andi %366, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %368 = arith.shli %367, %c72_i256 : i256 loc(#loc4) +// CHECK-NEXT: %369 = arith.ori %363, %368 : i256 loc(#loc4) +// CHECK-NEXT: %370 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %371 = llvm.load %370 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %372 = arith.andi %371, %c-1208925819614629174706176_i256 : i256 loc(#loc4) +// CHECK-NEXT: %373 = arith.ori %372, %369 : i256 loc(#loc4) +// CHECK-NEXT: %374 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %373, %374 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %375 = arith.addi %360, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: %376 = llvm.inttoptr %375 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %377 = llvm.load %376 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %378 = llvm.inttoptr %377 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %379 = llvm.load %378 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %380 = arith.addi %377, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %381 = arith.cmpi ugt, %379, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %381, ^bb57, ^bb58 loc(#loc4) +// CHECK-NEXT: ^bb57: // pred: ^bb56 +// CHECK-NEXT: %382 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %382 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %383 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %383 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %384 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%384, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb58 loc(#loc4) +// CHECK-NEXT: ^bb58: // 2 preds: ^bb56, ^bb57 +// CHECK-NEXT: %385 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %386 = llvm.load %385 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %387 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %379, %387 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %388 = arith.cmpi ult, %379, %386 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %388, ^bb59, ^bb66 loc(#loc4) +// CHECK-NEXT: ^bb59: // pred: ^bb58 +// CHECK-NEXT: %389 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c24_i256, %389 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %390 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %391 = "llvm.intrcall"(%390, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %392 = arith.addi %391, %379 : i256 loc(#loc4) +// CHECK-NEXT: %393 = arith.addi %391, %386 : i256 loc(#loc4) +// CHECK-NEXT: %394 = arith.subi %393, %392 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb60(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb60(%395: i256 loc({{.*}}:55:4)): // 2 preds: ^bb59, ^bb65 +// CHECK-NEXT: %396 = arith.cmpi ult, %395, %394 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %396, ^bb61(%395 : i256), ^bb66 loc(#loc4) +// CHECK-NEXT: ^bb61(%397: i256 loc({{.*}}:55:4)): // pred: ^bb60 +// CHECK-NEXT: %398 = arith.addi %392, %397 : i256 loc(#loc4) +// CHECK-NEXT: %399 = llvm.inttoptr %398 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %400 = llvm.load %399 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %401 = llvm.inttoptr %398 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %401 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %402 = arith.cmpi ugt, %400, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %402, ^bb62, ^bb65(%397 : i256) loc(#loc4) +// CHECK-NEXT: ^bb62: // pred: ^bb61 +// CHECK-NEXT: %403 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %398, %403 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %404 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %405 = "llvm.intrcall"(%404, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %406 = arith.addi %400, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %407 = arith.divui %406, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb63(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb63(%408: i256 loc({{.*}}:55:4)): // 2 preds: ^bb62, ^bb64 +// CHECK-NEXT: %409 = arith.cmpi ult, %408, %407 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %409, ^bb64(%408 : i256), ^bb65(%397 : i256) loc(#loc4) +// CHECK-NEXT: ^bb64(%410: i256 loc({{.*}}:55:4)): // pred: ^bb63 +// CHECK-NEXT: %411 = arith.addi %405, %410 : i256 loc(#loc4) +// CHECK-NEXT: %412 = llvm.inttoptr %411 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %412 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %413 = arith.addi %410, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb63(%413 : i256) loc(#loc4) +// CHECK-NEXT: ^bb65(%414: i256 loc({{.*}}:55:4)): // 2 preds: ^bb61, ^bb63 +// CHECK-NEXT: %415 = arith.addi %414, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb60(%415 : i256) loc(#loc4) +// CHECK-NEXT: ^bb66: // 2 preds: ^bb58, ^bb60 +// CHECK-NEXT: %416 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c24_i256, %416 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %417 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %418 = "llvm.intrcall"(%417, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb67(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb67(%419: i256 loc({{.*}}:55:4)): // 2 preds: ^bb66, ^bb86 +// CHECK-NEXT: %420 = arith.cmpi ult, %419, %379 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %420, ^bb68(%419 : i256), ^bb87 loc(#loc4) +// CHECK-NEXT: ^bb68(%421: i256 loc({{.*}}:55:4)): // pred: ^bb67 +// CHECK-NEXT: %422 = arith.muli %421, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %423 = arith.addi %380, %422 : i256 loc(#loc4) +// CHECK-NEXT: %424 = arith.addi %418, %421 : i256 loc(#loc4) +// CHECK-NEXT: %425 = llvm.inttoptr %423 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %426 = llvm.load %425 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %427 = llvm.inttoptr %426 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %428 = llvm.load %427 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %429 = arith.addi %426, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %430 = arith.cmpi ugt, %428, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %430, ^bb69, ^bb70 loc(#loc4) +// CHECK-NEXT: ^bb69: // pred: ^bb68 +// CHECK-NEXT: %431 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %431 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %432 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %432 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %433 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%433, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb70 loc(#loc4) +// CHECK-NEXT: ^bb70: // 2 preds: ^bb68, ^bb69 +// CHECK-NEXT: %434 = llvm.inttoptr %424 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %435 = llvm.load %434 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %436 = llvm.inttoptr %424 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %428, %436 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %437 = arith.cmpi ult, %428, %435 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %437, ^bb71, ^bb76 loc(#loc4) +// CHECK-NEXT: ^bb71: // pred: ^bb70 +// CHECK-NEXT: %438 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %424, %438 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %439 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %440 = "llvm.intrcall"(%439, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %441 = arith.addi %428, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %442 = arith.divui %441, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %443 = arith.addi %440, %442 : i256 loc(#loc4) +// CHECK-NEXT: %444 = arith.remui %428, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %445 = arith.cmpi ne, %444, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %445, ^bb72, ^bb73 loc(#loc4) +// CHECK-NEXT: ^bb72: // pred: ^bb71 +// CHECK-NEXT: %446 = arith.muli %444, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %447 = arith.subi %c256_i256, %446 : i256 loc(#loc4) +// CHECK-NEXT: %448 = arith.shrui %c-1_i256, %447 : i256 loc(#loc4) +// CHECK-NEXT: %449 = arith.subi %443, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %450 = llvm.inttoptr %449 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %451 = llvm.load %450 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %452 = arith.andi %451, %448 : i256 loc(#loc4) +// CHECK-NEXT: %453 = llvm.inttoptr %449 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %452, %453 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb73 loc(#loc4) +// CHECK-NEXT: ^bb73: // 2 preds: ^bb71, ^bb72 +// CHECK-NEXT: %454 = arith.addi %435, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %455 = arith.divui %454, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %456 = arith.addi %440, %455 : i256 loc(#loc4) +// CHECK-NEXT: %457 = arith.subi %456, %443 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb74(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb74(%458: i256 loc({{.*}}:55:4)): // 2 preds: ^bb73, ^bb75 +// CHECK-NEXT: %459 = arith.cmpi ult, %458, %457 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %459, ^bb75(%458 : i256), ^bb76 loc(#loc4) +// CHECK-NEXT: ^bb75(%460: i256 loc({{.*}}:55:4)): // pred: ^bb74 +// CHECK-NEXT: %461 = arith.addi %443, %460 : i256 loc(#loc4) +// CHECK-NEXT: %462 = llvm.inttoptr %461 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %462 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %463 = arith.addi %460, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb74(%463 : i256) loc(#loc4) +// CHECK-NEXT: ^bb76: // 2 preds: ^bb70, ^bb74 +// CHECK-NEXT: %464 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %424, %464 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %465 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %466 = "llvm.intrcall"(%465, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %467 = arith.cmpi uge, %428, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %468 = arith.subi %428, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %469 = arith.select %467, %468, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb77(%c0_i256, %429, %466, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb77(%470: i256 loc({{.*}}:55:4), %471: i256 loc({{.*}}:55:4), %472: i256 loc({{.*}}:55:4), %473: i256 loc({{.*}}:55:4)): // 2 preds: ^bb76, ^bb81 +// CHECK-NEXT: %474 = arith.cmpi ult, %470, %469 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %474, ^bb78(%470, %471, %472, %473 : i256, i256, i256, i256), ^bb82(%471, %472, %473 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb78(%475: i256 loc({{.*}}:55:4), %476: i256 loc({{.*}}:55:4), %477: i256 loc({{.*}}:55:4), %478: i256 loc({{.*}}:55:4)): // pred: ^bb77 +// CHECK-NEXT: cf.br ^bb79(%c0_i256, %476, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb79(%479: i256 loc({{.*}}:55:4), %480: i256 loc({{.*}}:55:4), %481: i256 loc({{.*}}:55:4), %482: i256 loc({{.*}}:55:4)): // 2 preds: ^bb78, ^bb80 +// CHECK-NEXT: %483 = arith.cmpi ult, %479, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %483, ^bb80(%479, %480, %481, %482 : i256, i256, i256, i256), ^bb81(%480, %482 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb80(%484: i256 loc({{.*}}:55:4), %485: i256 loc({{.*}}:55:4), %486: i256 loc({{.*}}:55:4), %487: i256 loc({{.*}}:55:4)): // pred: ^bb79 +// CHECK-NEXT: %488 = llvm.inttoptr %485 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %489 = llvm.load %488 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %490 = arith.andi %489, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %491 = arith.shli %490, %486 : i256 loc(#loc4) +// CHECK-NEXT: %492 = arith.ori %487, %491 : i256 loc(#loc4) +// CHECK-NEXT: %493 = arith.addi %485, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %494 = arith.addi %486, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %495 = arith.addi %484, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb79(%495, %493, %494, %492 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb81(%496: i256 loc({{.*}}:55:4), %497: i256 loc({{.*}}:55:4)): // pred: ^bb79 +// CHECK-NEXT: %498 = llvm.inttoptr %477 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %497, %498 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %499 = arith.addi %477, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %500 = arith.addi %478, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %501 = arith.addi %475, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb77(%501, %496, %499, %500 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb82(%502: i256 loc({{.*}}:55:4), %503: i256 loc({{.*}}:55:4), %504: i256 loc({{.*}}:55:4)): // pred: ^bb77 +// CHECK-NEXT: %505 = arith.cmpi ult, %504, %428 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %505, ^bb83(%504, %502, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb86(%421 : i256) loc(#loc4) +// CHECK-NEXT: ^bb83(%506: i256 loc({{.*}}:55:4), %507: i256 loc({{.*}}:55:4), %508: i256 loc({{.*}}:55:4), %509: i256 loc({{.*}}:55:4)): // 2 preds: ^bb82, ^bb84 +// CHECK-NEXT: %510 = arith.cmpi ult, %506, %428 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %510, ^bb84(%506, %507, %508, %509 : i256, i256, i256, i256), ^bb85(%509 : i256) loc(#loc4) +// CHECK-NEXT: ^bb84(%511: i256 loc({{.*}}:55:4), %512: i256 loc({{.*}}:55:4), %513: i256 loc({{.*}}:55:4), %514: i256 loc({{.*}}:55:4)): // pred: ^bb83 +// CHECK-NEXT: %515 = llvm.inttoptr %512 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %516 = llvm.load %515 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %517 = arith.andi %516, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %518 = arith.shli %517, %513 : i256 loc(#loc4) +// CHECK-NEXT: %519 = arith.ori %514, %518 : i256 loc(#loc4) +// CHECK-NEXT: %520 = arith.addi %512, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %521 = arith.addi %513, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %522 = arith.addi %511, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb83(%522, %520, %521, %519 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb85(%523: i256 loc({{.*}}:55:4)): // pred: ^bb83 +// CHECK-NEXT: %524 = llvm.inttoptr %503 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %523, %524 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb86(%421 : i256) loc(#loc4) +// CHECK-NEXT: ^bb86(%525: i256 loc({{.*}}:55:4)): // 2 preds: ^bb82, ^bb85 +// CHECK-NEXT: %526 = arith.addi %525, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb67(%526 : i256) loc(#loc4) +// CHECK-NEXT: ^bb87: // pred: ^bb67 +// CHECK-NEXT: %527 = arith.addi %360, %c96_i256 : i256 loc(#loc4) +// CHECK-NEXT: %528 = llvm.inttoptr %527 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %529 = llvm.load %528 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb88(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb88(%530: i256 loc({{.*}}:55:4)): // 2 preds: ^bb87, ^bb89 +// CHECK-NEXT: %531 = arith.cmpi ult, %530, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %531, ^bb89(%530 : i256), ^bb90 loc(#loc4) +// CHECK-NEXT: ^bb89(%532: i256 loc({{.*}}:55:4)): // pred: ^bb88 +// CHECK-NEXT: %533 = arith.muli %532, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %534 = arith.addi %529, %533 : i256 loc(#loc4) +// CHECK-NEXT: %535 = arith.addi %532, %c25_i256 : i256 loc(#loc4) +// CHECK-NEXT: %536 = llvm.inttoptr %534 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %537 = llvm.load %536 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %538 = arith.andi %537, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) +// CHECK-NEXT: %539 = llvm.inttoptr %535 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %538, %539 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %540 = arith.addi %532, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb88(%540 : i256) loc(#loc4) +// CHECK-NEXT: ^bb90: // pred: ^bb88 +// CHECK-NEXT: %541 = arith.addi %360, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %542 = llvm.inttoptr %541 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %543 = llvm.load %542 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %544 = arith.andi %543, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc4) +// CHECK-NEXT: %545 = arith.addi %360, %c160_i256 : i256 loc(#loc4) +// CHECK-NEXT: %546 = llvm.inttoptr %545 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %547 = llvm.load %546 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %548 = arith.andi %547, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %549 = arith.shli %548, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %550 = arith.ori %544, %549 : i256 loc(#loc4) +// CHECK-NEXT: %551 = arith.addi %360, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %552 = llvm.inttoptr %551 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %553 = llvm.load %552 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %554 = arith.shrui %553, %c224_i256 : i256 loc(#loc4) +// CHECK-NEXT: %555 = arith.shli %554, %c200_i256 : i256 loc(#loc4) +// CHECK-NEXT: %556 = arith.ori %550, %555 : i256 loc(#loc4) +// CHECK-NEXT: %557 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %558 = llvm.load %557 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %559 = arith.andi %558, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc4) +// CHECK-NEXT: %560 = arith.ori %559, %556 : i256 loc(#loc4) +// CHECK-NEXT: %561 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %560, %561 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %562 = arith.addi %1, %c352_i256 : i256 loc(#loc4) +// CHECK-NEXT: %563 = llvm.inttoptr %562 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %564 = llvm.load %563 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb91(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb91(%565: i256 loc({{.*}}:55:4)): // 2 preds: ^bb90, ^bb92 +// CHECK-NEXT: %566 = arith.cmpi ult, %565, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %566, ^bb92(%565 : i256), ^bb93 loc(#loc4) +// CHECK-NEXT: ^bb92(%567: i256 loc({{.*}}:55:4)): // pred: ^bb91 +// CHECK-NEXT: %568 = arith.muli %567, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %569 = arith.addi %564, %568 : i256 loc(#loc4) +// CHECK-NEXT: %570 = arith.addi %567, %c28_i256 : i256 loc(#loc4) +// CHECK-NEXT: %571 = llvm.inttoptr %569 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %572 = llvm.load %571 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %573 = arith.andi %572, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) +// CHECK-NEXT: %574 = llvm.inttoptr %570 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %573, %574 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %575 = arith.addi %567, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb91(%575 : i256) loc(#loc4) +// CHECK-NEXT: ^bb93: // pred: ^bb91 +// CHECK-NEXT: %576 = arith.addi %1, %c384_i256 : i256 loc(#loc4) +// CHECK-NEXT: %577 = llvm.inttoptr %576 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %578 = llvm.load %577 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %579 = llvm.inttoptr %578 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %580 = llvm.load %579 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %581 = arith.addi %578, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %582 = arith.cmpi ugt, %580, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %582, ^bb94, ^bb95 loc(#loc4) +// CHECK-NEXT: ^bb94: // pred: ^bb93 +// CHECK-NEXT: %583 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %583 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %584 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %584 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %585 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%585, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb95 loc(#loc4) +// CHECK-NEXT: ^bb95: // 2 preds: ^bb93, ^bb94 +// CHECK-NEXT: %586 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %587 = llvm.load %586 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %588 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %580, %588 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %589 = arith.cmpi ult, %580, %587 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %589, ^bb96, ^bb114 loc(#loc4) +// CHECK-NEXT: ^bb96: // pred: ^bb95 +// CHECK-NEXT: %590 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c30_i256, %590 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %591 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %592 = "llvm.intrcall"(%591, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %593 = arith.addi %592, %580 : i256 loc(#loc4) +// CHECK-NEXT: %594 = arith.addi %592, %587 : i256 loc(#loc4) +// CHECK-NEXT: %595 = arith.subi %594, %593 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb97(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb97(%596: i256 loc({{.*}}:55:4)): // 2 preds: ^bb96, ^bb113 +// CHECK-NEXT: %597 = arith.cmpi ult, %596, %595 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %597, ^bb98(%596 : i256), ^bb114 loc(#loc4) +// CHECK-NEXT: ^bb98(%598: i256 loc({{.*}}:55:4)): // pred: ^bb97 +// CHECK-NEXT: %599 = arith.addi %593, %598 : i256 loc(#loc4) +// CHECK-NEXT: %600 = llvm.inttoptr %599 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %601 = llvm.load %600 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %602 = llvm.inttoptr %599 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %602 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %603 = arith.cmpi ugt, %601, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %603, ^bb99, ^bb113(%598 : i256) loc(#loc4) +// CHECK-NEXT: ^bb99: // pred: ^bb98 +// CHECK-NEXT: %604 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %599, %604 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %605 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %606 = "llvm.intrcall"(%605, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %607 = arith.muli %601, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb100(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb100(%608: i256 loc({{.*}}:55:4)): // 2 preds: ^bb99, ^bb112 +// CHECK-NEXT: %609 = arith.cmpi ult, %608, %607 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %609, ^bb101(%608 : i256), ^bb113(%598 : i256) loc(#loc4) +// CHECK-NEXT: ^bb101(%610: i256 loc({{.*}}:55:4)): // pred: ^bb100 +// CHECK-NEXT: %611 = arith.addi %606, %610 : i256 loc(#loc4) +// CHECK-NEXT: %612 = llvm.inttoptr %611 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %612 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %613 = arith.addi %611, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %614 = llvm.inttoptr %613 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %615 = llvm.load %614 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %616 = llvm.inttoptr %613 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %616 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %617 = arith.cmpi ugt, %615, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %617, ^bb102, ^bb109 loc(#loc4) +// CHECK-NEXT: ^bb102: // pred: ^bb101 +// CHECK-NEXT: %618 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %613, %618 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %619 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %620 = "llvm.intrcall"(%619, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb103(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb103(%621: i256 loc({{.*}}:55:4)): // 2 preds: ^bb102, ^bb108 +// CHECK-NEXT: %622 = arith.cmpi ult, %621, %615 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %622, ^bb104(%621 : i256), ^bb109 loc(#loc4) +// CHECK-NEXT: ^bb104(%623: i256 loc({{.*}}:55:4)): // pred: ^bb103 +// CHECK-NEXT: %624 = arith.addi %620, %623 : i256 loc(#loc4) +// CHECK-NEXT: %625 = llvm.inttoptr %624 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %626 = llvm.load %625 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %627 = llvm.inttoptr %624 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %627 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %628 = arith.cmpi ugt, %626, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %628, ^bb105, ^bb108(%623 : i256) loc(#loc4) +// CHECK-NEXT: ^bb105: // pred: ^bb104 +// CHECK-NEXT: %629 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %624, %629 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %630 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %631 = "llvm.intrcall"(%630, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %632 = arith.addi %626, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %633 = arith.divui %632, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb106(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb106(%634: i256 loc({{.*}}:55:4)): // 2 preds: ^bb105, ^bb107 +// CHECK-NEXT: %635 = arith.cmpi ult, %634, %633 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %635, ^bb107(%634 : i256), ^bb108(%623 : i256) loc(#loc4) +// CHECK-NEXT: ^bb107(%636: i256 loc({{.*}}:55:4)): // pred: ^bb106 +// CHECK-NEXT: %637 = arith.addi %631, %636 : i256 loc(#loc4) +// CHECK-NEXT: %638 = llvm.inttoptr %637 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %638 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %639 = arith.addi %636, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb106(%639 : i256) loc(#loc4) +// CHECK-NEXT: ^bb108(%640: i256 loc({{.*}}:55:4)): // 2 preds: ^bb104, ^bb106 +// CHECK-NEXT: %641 = arith.addi %640, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb103(%641 : i256) loc(#loc4) +// CHECK-NEXT: ^bb109: // 2 preds: ^bb101, ^bb103 +// CHECK-NEXT: %642 = arith.addi %611, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb110(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb110(%643: i256 loc({{.*}}:55:4)): // 2 preds: ^bb109, ^bb111 +// CHECK-NEXT: %644 = arith.cmpi ult, %643, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %644, ^bb111(%643 : i256), ^bb112 loc(#loc4) +// CHECK-NEXT: ^bb111(%645: i256 loc({{.*}}:55:4)): // pred: ^bb110 +// CHECK-NEXT: %646 = arith.addi %642, %645 : i256 loc(#loc4) +// CHECK-NEXT: %647 = llvm.inttoptr %646 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %647 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %648 = arith.addi %645, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb110(%648 : i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb112: // pred: ^bb110 +// CHECK-NEXT: %649 = arith.addi %611, %c4_i256 : i256 loc(#loc4) +// CHECK-NEXT: %650 = llvm.inttoptr %649 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %650 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %651 = arith.addi %610, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb100(%651 : i256) loc(#loc4) +// CHECK-NEXT: ^bb113(%652: i256 loc({{.*}}:55:4)): // 2 preds: ^bb98, ^bb100 +// CHECK-NEXT: %653 = arith.addi %652, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb97(%653 : i256) loc(#loc4) +// CHECK-NEXT: ^bb114: // 2 preds: ^bb95, ^bb97 +// CHECK-NEXT: %654 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c30_i256, %654 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %655 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %656 = "llvm.intrcall"(%655, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb115(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb115(%657: i256 loc({{.*}}:55:4)): // 2 preds: ^bb114, ^bb170 +// CHECK-NEXT: %658 = arith.cmpi ult, %657, %580 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %658, ^bb116(%657 : i256), ^bb171 loc(#loc4) +// CHECK-NEXT: ^bb116(%659: i256 loc({{.*}}:55:4)): // pred: ^bb115 +// CHECK-NEXT: %660 = arith.muli %659, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %661 = arith.addi %581, %660 : i256 loc(#loc4) +// CHECK-NEXT: %662 = arith.addi %656, %659 : i256 loc(#loc4) +// CHECK-NEXT: %663 = llvm.inttoptr %661 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %664 = llvm.load %663 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %665 = llvm.inttoptr %664 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %666 = llvm.load %665 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %667 = arith.addi %664, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %668 = arith.cmpi ugt, %666, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %668, ^bb117, ^bb118 loc(#loc4) +// CHECK-NEXT: ^bb117: // pred: ^bb116 +// CHECK-NEXT: %669 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %669 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %670 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %670 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %671 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%671, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb118 loc(#loc4) +// CHECK-NEXT: ^bb118: // 2 preds: ^bb116, ^bb117 +// CHECK-NEXT: %672 = llvm.inttoptr %662 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %673 = llvm.load %672 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %674 = llvm.inttoptr %662 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %666, %674 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %675 = arith.cmpi ult, %666, %673 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %675, ^bb119, ^bb133 loc(#loc4) +// CHECK-NEXT: ^bb119: // pred: ^bb118 +// CHECK-NEXT: %676 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %662, %676 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %677 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %678 = "llvm.intrcall"(%677, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %679 = arith.muli %666, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: %680 = arith.addi %678, %679 : i256 loc(#loc4) +// CHECK-NEXT: %681 = arith.muli %673, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: %682 = arith.addi %678, %681 : i256 loc(#loc4) +// CHECK-NEXT: %683 = arith.subi %682, %680 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb120(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb120(%684: i256 loc({{.*}}:55:4)): // 2 preds: ^bb119, ^bb132 +// CHECK-NEXT: %685 = arith.cmpi ult, %684, %683 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %685, ^bb121(%684 : i256), ^bb133 loc(#loc4) +// CHECK-NEXT: ^bb121(%686: i256 loc({{.*}}:55:4)): // pred: ^bb120 +// CHECK-NEXT: %687 = arith.addi %680, %686 : i256 loc(#loc4) +// CHECK-NEXT: %688 = llvm.inttoptr %687 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %688 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %689 = arith.addi %687, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %690 = llvm.inttoptr %689 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %691 = llvm.load %690 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %692 = llvm.inttoptr %689 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %692 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %693 = arith.cmpi ugt, %691, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %693, ^bb122, ^bb129 loc(#loc4) +// CHECK-NEXT: ^bb122: // pred: ^bb121 +// CHECK-NEXT: %694 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %689, %694 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %695 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %696 = "llvm.intrcall"(%695, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb123(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb123(%697: i256 loc({{.*}}:55:4)): // 2 preds: ^bb122, ^bb128 +// CHECK-NEXT: %698 = arith.cmpi ult, %697, %691 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %698, ^bb124(%697 : i256), ^bb129 loc(#loc4) +// CHECK-NEXT: ^bb124(%699: i256 loc({{.*}}:55:4)): // pred: ^bb123 +// CHECK-NEXT: %700 = arith.addi %696, %699 : i256 loc(#loc4) +// CHECK-NEXT: %701 = llvm.inttoptr %700 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %702 = llvm.load %701 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %703 = llvm.inttoptr %700 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %703 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %704 = arith.cmpi ugt, %702, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %704, ^bb125, ^bb128(%699 : i256) loc(#loc4) +// CHECK-NEXT: ^bb125: // pred: ^bb124 +// CHECK-NEXT: %705 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %700, %705 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %706 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %707 = "llvm.intrcall"(%706, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %708 = arith.addi %702, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %709 = arith.divui %708, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb126(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb126(%710: i256 loc({{.*}}:55:4)): // 2 preds: ^bb125, ^bb127 +// CHECK-NEXT: %711 = arith.cmpi ult, %710, %709 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %711, ^bb127(%710 : i256), ^bb128(%699 : i256) loc(#loc4) +// CHECK-NEXT: ^bb127(%712: i256 loc({{.*}}:55:4)): // pred: ^bb126 +// CHECK-NEXT: %713 = arith.addi %707, %712 : i256 loc(#loc4) +// CHECK-NEXT: %714 = llvm.inttoptr %713 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %714 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %715 = arith.addi %712, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb126(%715 : i256) loc(#loc4) +// CHECK-NEXT: ^bb128(%716: i256 loc({{.*}}:55:4)): // 2 preds: ^bb124, ^bb126 +// CHECK-NEXT: %717 = arith.addi %716, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb123(%717 : i256) loc(#loc4) +// CHECK-NEXT: ^bb129: // 2 preds: ^bb121, ^bb123 +// CHECK-NEXT: %718 = arith.addi %687, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb130(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb130(%719: i256 loc({{.*}}:55:4)): // 2 preds: ^bb129, ^bb131 +// CHECK-NEXT: %720 = arith.cmpi ult, %719, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %720, ^bb131(%719 : i256), ^bb132 loc(#loc4) +// CHECK-NEXT: ^bb131(%721: i256 loc({{.*}}:55:4)): // pred: ^bb130 +// CHECK-NEXT: %722 = arith.addi %718, %721 : i256 loc(#loc4) +// CHECK-NEXT: %723 = llvm.inttoptr %722 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %723 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %724 = arith.addi %721, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb130(%724 : i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb132: // pred: ^bb130 +// CHECK-NEXT: %725 = arith.addi %687, %c4_i256 : i256 loc(#loc4) +// CHECK-NEXT: %726 = llvm.inttoptr %725 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %726 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %727 = arith.addi %686, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb120(%727 : i256) loc(#loc4) +// CHECK-NEXT: ^bb133: // 2 preds: ^bb118, ^bb120 +// CHECK-NEXT: %728 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %662, %728 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %729 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %730 = "llvm.intrcall"(%729, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb134(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb134(%731: i256 loc({{.*}}:55:4)): // 2 preds: ^bb133, ^bb169 +// CHECK-NEXT: %732 = arith.cmpi ult, %731, %666 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %732, ^bb135(%731 : i256), ^bb170(%659 : i256) loc(#loc4) +// CHECK-NEXT: ^bb135(%733: i256 loc({{.*}}:55:4)): // pred: ^bb134 +// CHECK-NEXT: %734 = arith.muli %733, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %735 = arith.addi %667, %734 : i256 loc(#loc4) +// CHECK-NEXT: %736 = arith.muli %733, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: %737 = arith.addi %730, %736 : i256 loc(#loc4) +// CHECK-NEXT: %738 = llvm.inttoptr %735 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %739 = llvm.load %738 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %740 = llvm.inttoptr %739 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %741 = llvm.load %740 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %742 = arith.andi %741, %c4722366482869645213695_i256 : i256 loc(#loc4) +// CHECK-NEXT: %743 = arith.addi %739, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %744 = llvm.inttoptr %743 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %745 = llvm.load %744 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %746 = arith.andi %745, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %747 = arith.shli %746, %c72_i256 : i256 loc(#loc4) +// CHECK-NEXT: %748 = arith.ori %742, %747 : i256 loc(#loc4) +// CHECK-NEXT: %749 = llvm.inttoptr %737 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %750 = llvm.load %749 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %751 = arith.andi %750, %c-1208925819614629174706176_i256 : i256 loc(#loc4) +// CHECK-NEXT: %752 = arith.ori %751, %748 : i256 loc(#loc4) +// CHECK-NEXT: %753 = llvm.inttoptr %737 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %752, %753 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %754 = arith.addi %739, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: %755 = llvm.inttoptr %754 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %756 = llvm.load %755 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %757 = arith.addi %737, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %758 = llvm.inttoptr %756 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %759 = llvm.load %758 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %760 = arith.addi %756, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %761 = arith.cmpi ugt, %759, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %761, ^bb136, ^bb137 loc(#loc4) +// CHECK-NEXT: ^bb136: // pred: ^bb135 +// CHECK-NEXT: %762 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %762 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %763 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %763 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %764 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%764, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb137 loc(#loc4) +// CHECK-NEXT: ^bb137: // 2 preds: ^bb135, ^bb136 +// CHECK-NEXT: %765 = llvm.inttoptr %757 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %766 = llvm.load %765 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %767 = llvm.inttoptr %757 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %759, %767 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %768 = arith.cmpi ult, %759, %766 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %768, ^bb138, ^bb145 loc(#loc4) // CHECK-NEXT: ^bb138: // pred: ^bb137 -// CHECK-NEXT: %777 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %772, %777 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %778 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %779 = "llvm.intrcall"(%778, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %780 = arith.addi %774, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %781 = arith.divui %780, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb139(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb139(%782: i256 loc({{.*}}:55:4)): // 2 preds: ^bb138, ^bb140 -// CHECK-NEXT: %783 = arith.cmpi ult, %782, %781 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %783, ^bb140(%782 : i256), ^bb141(%771 : i256) loc(#loc16) -// CHECK-NEXT: ^bb140(%784: i256 loc({{.*}}:55:4)): // pred: ^bb139 -// CHECK-NEXT: %785 = arith.addi %779, %784 : i256 loc(#loc16) -// CHECK-NEXT: %786 = llvm.inttoptr %785 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %786 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %787 = arith.addi %784, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb139(%787 : i256) loc(#loc16) -// CHECK-NEXT: ^bb141(%788: i256 loc({{.*}}:55:4)): // 2 preds: ^bb137, ^bb139 -// CHECK-NEXT: %789 = arith.addi %788, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb136(%789 : i256) loc(#loc16) -// CHECK-NEXT: ^bb142: // 2 preds: ^bb134, ^bb136 -// CHECK-NEXT: %790 = arith.addi %759, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %791 = llvm.inttoptr %790 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %791 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %792 = arith.addi %759, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: %793 = llvm.inttoptr %792 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %793 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %794 = arith.addi %759, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: %795 = llvm.inttoptr %794 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %795 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %796 = arith.addi %758, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb133(%796 : i256) loc(#loc16) -// CHECK-NEXT: ^bb143: // 2 preds: ^bb131, ^bb133 -// CHECK-NEXT: %797 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %734, %797 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %798 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %799 = "llvm.intrcall"(%798, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb144(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb144(%800: i256 loc({{.*}}:55:4)): // 2 preds: ^bb143, ^bb179 -// CHECK-NEXT: %801 = arith.cmpi ult, %800, %738 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %801, ^bb145(%800 : i256), ^bb180(%731 : i256) loc(#loc16) -// CHECK-NEXT: ^bb145(%802: i256 loc({{.*}}:55:4)): // pred: ^bb144 -// CHECK-NEXT: %803 = arith.muli %802, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %804 = arith.addi %739, %803 : i256 loc(#loc16) -// CHECK-NEXT: %805 = arith.muli %802, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: %806 = arith.addi %799, %805 : i256 loc(#loc16) -// CHECK-NEXT: %807 = llvm.inttoptr %804 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %808 = llvm.load %807 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %809 = llvm.inttoptr %808 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %810 = llvm.load %809 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %811 = arith.andi %810, %c4722366482869645213695_i256 : i256 loc(#loc16) -// CHECK-NEXT: %812 = arith.addi %808, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %813 = llvm.inttoptr %812 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %814 = llvm.load %813 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %815 = arith.andi %814, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %816 = arith.shli %815, %c72_i256 : i256 loc(#loc16) -// CHECK-NEXT: %817 = arith.ori %811, %816 : i256 loc(#loc16) -// CHECK-NEXT: %818 = llvm.inttoptr %806 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %819 = llvm.load %818 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %820 = arith.andi %819, %c-1208925819614629174706176_i256 : i256 loc(#loc16) -// CHECK-NEXT: %821 = arith.ori %820, %817 : i256 loc(#loc16) -// CHECK-NEXT: %822 = llvm.inttoptr %806 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %821, %822 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %823 = arith.addi %808, %c64_i256 : i256 loc(#loc16) -// CHECK-NEXT: %824 = llvm.inttoptr %823 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %825 = llvm.load %824 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %826 = arith.addi %806, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %827 = llvm.inttoptr %825 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %828 = llvm.load %827 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %829 = arith.addi %825, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %830 = arith.cmpi ugt, %828, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %830, ^bb146, ^bb147 loc(#loc16) -// CHECK-NEXT: ^bb146: // pred: ^bb145 -// CHECK-NEXT: %831 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %831 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %832 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %832 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %833 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%833, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb147 loc(#loc16) -// CHECK-NEXT: ^bb147: // 2 preds: ^bb145, ^bb146 -// CHECK-NEXT: %834 = llvm.inttoptr %826 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %835 = llvm.load %834 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %836 = llvm.inttoptr %826 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %828, %836 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %837 = arith.cmpi ult, %828, %835 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %837, ^bb148, ^bb155 loc(#loc16) +// CHECK-NEXT: %769 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %757, %769 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %770 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %771 = "llvm.intrcall"(%770, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %772 = arith.addi %771, %759 : i256 loc(#loc4) +// CHECK-NEXT: %773 = arith.addi %771, %766 : i256 loc(#loc4) +// CHECK-NEXT: %774 = arith.subi %773, %772 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb139(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb139(%775: i256 loc({{.*}}:55:4)): // 2 preds: ^bb138, ^bb144 +// CHECK-NEXT: %776 = arith.cmpi ult, %775, %774 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %776, ^bb140(%775 : i256), ^bb145 loc(#loc4) +// CHECK-NEXT: ^bb140(%777: i256 loc({{.*}}:55:4)): // pred: ^bb139 +// CHECK-NEXT: %778 = arith.addi %772, %777 : i256 loc(#loc4) +// CHECK-NEXT: %779 = llvm.inttoptr %778 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %780 = llvm.load %779 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %781 = llvm.inttoptr %778 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %781 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %782 = arith.cmpi ugt, %780, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %782, ^bb141, ^bb144(%777 : i256) loc(#loc4) +// CHECK-NEXT: ^bb141: // pred: ^bb140 +// CHECK-NEXT: %783 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %778, %783 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %784 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %785 = "llvm.intrcall"(%784, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %786 = arith.addi %780, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %787 = arith.divui %786, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb142(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb142(%788: i256 loc({{.*}}:55:4)): // 2 preds: ^bb141, ^bb143 +// CHECK-NEXT: %789 = arith.cmpi ult, %788, %787 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %789, ^bb143(%788 : i256), ^bb144(%777 : i256) loc(#loc4) +// CHECK-NEXT: ^bb143(%790: i256 loc({{.*}}:55:4)): // pred: ^bb142 +// CHECK-NEXT: %791 = arith.addi %785, %790 : i256 loc(#loc4) +// CHECK-NEXT: %792 = llvm.inttoptr %791 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %792 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %793 = arith.addi %790, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb142(%793 : i256) loc(#loc4) +// CHECK-NEXT: ^bb144(%794: i256 loc({{.*}}:55:4)): // 2 preds: ^bb140, ^bb142 +// CHECK-NEXT: %795 = arith.addi %794, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb139(%795 : i256) loc(#loc4) +// CHECK-NEXT: ^bb145: // 2 preds: ^bb137, ^bb139 +// CHECK-NEXT: %796 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %757, %796 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %797 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %798 = "llvm.intrcall"(%797, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb146(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb146(%799: i256 loc({{.*}}:55:4)): // 2 preds: ^bb145, ^bb165 +// CHECK-NEXT: %800 = arith.cmpi ult, %799, %759 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %800, ^bb147(%799 : i256), ^bb166 loc(#loc4) +// CHECK-NEXT: ^bb147(%801: i256 loc({{.*}}:55:4)): // pred: ^bb146 +// CHECK-NEXT: %802 = arith.muli %801, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %803 = arith.addi %760, %802 : i256 loc(#loc4) +// CHECK-NEXT: %804 = arith.addi %798, %801 : i256 loc(#loc4) +// CHECK-NEXT: %805 = llvm.inttoptr %803 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %806 = llvm.load %805 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %807 = llvm.inttoptr %806 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %808 = llvm.load %807 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %809 = arith.addi %806, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %810 = arith.cmpi ugt, %808, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %810, ^bb148, ^bb149 loc(#loc4) // CHECK-NEXT: ^bb148: // pred: ^bb147 -// CHECK-NEXT: %838 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %826, %838 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %839 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %840 = "llvm.intrcall"(%839, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %841 = arith.addi %840, %828 : i256 loc(#loc16) -// CHECK-NEXT: %842 = arith.addi %840, %835 : i256 loc(#loc16) -// CHECK-NEXT: %843 = arith.subi %842, %841 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb149(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb149(%844: i256 loc({{.*}}:55:4)): // 2 preds: ^bb148, ^bb154 -// CHECK-NEXT: %845 = arith.cmpi ult, %844, %843 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %845, ^bb150(%844 : i256), ^bb155 loc(#loc16) -// CHECK-NEXT: ^bb150(%846: i256 loc({{.*}}:55:4)): // pred: ^bb149 -// CHECK-NEXT: %847 = arith.addi %841, %846 : i256 loc(#loc16) -// CHECK-NEXT: %848 = llvm.inttoptr %847 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %849 = llvm.load %848 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %850 = llvm.inttoptr %847 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %850 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %851 = arith.cmpi ugt, %849, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %851, ^bb151, ^bb154(%846 : i256) loc(#loc16) +// CHECK-NEXT: %811 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %811 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %812 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %812 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %813 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%813, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb149 loc(#loc4) +// CHECK-NEXT: ^bb149: // 2 preds: ^bb147, ^bb148 +// CHECK-NEXT: %814 = llvm.inttoptr %804 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %815 = llvm.load %814 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %816 = llvm.inttoptr %804 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %808, %816 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %817 = arith.cmpi ult, %808, %815 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %817, ^bb150, ^bb155 loc(#loc4) +// CHECK-NEXT: ^bb150: // pred: ^bb149 +// CHECK-NEXT: %818 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %804, %818 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %819 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %820 = "llvm.intrcall"(%819, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %821 = arith.addi %808, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %822 = arith.divui %821, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %823 = arith.addi %820, %822 : i256 loc(#loc4) +// CHECK-NEXT: %824 = arith.remui %808, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %825 = arith.cmpi ne, %824, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %825, ^bb151, ^bb152 loc(#loc4) // CHECK-NEXT: ^bb151: // pred: ^bb150 -// CHECK-NEXT: %852 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %847, %852 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %853 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %854 = "llvm.intrcall"(%853, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %855 = arith.addi %849, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %856 = arith.divui %855, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb152(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb152(%857: i256 loc({{.*}}:55:4)): // 2 preds: ^bb151, ^bb153 -// CHECK-NEXT: %858 = arith.cmpi ult, %857, %856 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %858, ^bb153(%857 : i256), ^bb154(%846 : i256) loc(#loc16) -// CHECK-NEXT: ^bb153(%859: i256 loc({{.*}}:55:4)): // pred: ^bb152 -// CHECK-NEXT: %860 = arith.addi %854, %859 : i256 loc(#loc16) -// CHECK-NEXT: %861 = llvm.inttoptr %860 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %861 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %862 = arith.addi %859, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb152(%862 : i256) loc(#loc16) -// CHECK-NEXT: ^bb154(%863: i256 loc({{.*}}:55:4)): // 2 preds: ^bb150, ^bb152 -// CHECK-NEXT: %864 = arith.addi %863, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb149(%864 : i256) loc(#loc16) -// CHECK-NEXT: ^bb155: // 2 preds: ^bb147, ^bb149 -// CHECK-NEXT: %865 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %826, %865 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %866 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %867 = "llvm.intrcall"(%866, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb156(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb156(%868: i256 loc({{.*}}:55:4)): // 2 preds: ^bb155, ^bb175 -// CHECK-NEXT: %869 = arith.cmpi ult, %868, %828 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %869, ^bb157(%868 : i256), ^bb176 loc(#loc16) -// CHECK-NEXT: ^bb157(%870: i256 loc({{.*}}:55:4)): // pred: ^bb156 -// CHECK-NEXT: %871 = arith.muli %870, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %872 = arith.addi %829, %871 : i256 loc(#loc16) -// CHECK-NEXT: %873 = arith.addi %867, %870 : i256 loc(#loc16) -// CHECK-NEXT: %874 = llvm.inttoptr %872 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %875 = llvm.load %874 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %876 = llvm.inttoptr %875 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %877 = llvm.load %876 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %878 = arith.addi %875, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %879 = arith.cmpi ugt, %877, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %879, ^bb158, ^bb159 loc(#loc16) -// CHECK-NEXT: ^bb158: // pred: ^bb157 -// CHECK-NEXT: %880 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %880 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %881 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %881 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %882 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%882, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb159 loc(#loc16) -// CHECK-NEXT: ^bb159: // 2 preds: ^bb157, ^bb158 -// CHECK-NEXT: %883 = llvm.inttoptr %873 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %884 = llvm.load %883 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %885 = llvm.inttoptr %873 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %877, %885 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %886 = arith.cmpi ult, %877, %884 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %886, ^bb160, ^bb165 loc(#loc16) -// CHECK-NEXT: ^bb160: // pred: ^bb159 -// CHECK-NEXT: %887 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %873, %887 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %888 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %889 = "llvm.intrcall"(%888, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %890 = arith.addi %877, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %891 = arith.divui %890, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %892 = arith.addi %889, %891 : i256 loc(#loc16) -// CHECK-NEXT: %893 = arith.remui %877, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %894 = arith.cmpi ne, %893, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %894, ^bb161, ^bb162 loc(#loc16) -// CHECK-NEXT: ^bb161: // pred: ^bb160 -// CHECK-NEXT: %895 = arith.muli %893, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %896 = arith.subi %c256_i256, %895 : i256 loc(#loc16) -// CHECK-NEXT: %897 = arith.shrui %c-1_i256, %896 : i256 loc(#loc16) -// CHECK-NEXT: %898 = arith.subi %892, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %899 = llvm.inttoptr %898 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %900 = llvm.load %899 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %901 = arith.andi %900, %897 : i256 loc(#loc16) -// CHECK-NEXT: %902 = llvm.inttoptr %898 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %901, %902 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb162 loc(#loc16) -// CHECK-NEXT: ^bb162: // 2 preds: ^bb160, ^bb161 -// CHECK-NEXT: %903 = arith.addi %884, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %904 = arith.divui %903, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %905 = arith.addi %889, %904 : i256 loc(#loc16) -// CHECK-NEXT: %906 = arith.subi %905, %892 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb163(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb163(%907: i256 loc({{.*}}:55:4)): // 2 preds: ^bb162, ^bb164 -// CHECK-NEXT: %908 = arith.cmpi ult, %907, %906 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %908, ^bb164(%907 : i256), ^bb165 loc(#loc16) -// CHECK-NEXT: ^bb164(%909: i256 loc({{.*}}:55:4)): // pred: ^bb163 -// CHECK-NEXT: %910 = arith.addi %892, %909 : i256 loc(#loc16) -// CHECK-NEXT: %911 = llvm.inttoptr %910 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %911 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %912 = arith.addi %909, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb163(%912 : i256) loc(#loc16) -// CHECK-NEXT: ^bb165: // 2 preds: ^bb159, ^bb163 -// CHECK-NEXT: %913 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %873, %913 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %914 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %915 = "llvm.intrcall"(%914, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %916 = arith.cmpi uge, %877, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %917 = arith.subi %877, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %918 = arith.select %916, %917, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb166(%c0_i256, %878, %915, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb166(%919: i256 loc({{.*}}:55:4), %920: i256 loc({{.*}}:55:4), %921: i256 loc({{.*}}:55:4), %922: i256 loc({{.*}}:55:4)): // 2 preds: ^bb165, ^bb170 -// CHECK-NEXT: %923 = arith.cmpi ult, %919, %918 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %923, ^bb167(%919, %920, %921, %922 : i256, i256, i256, i256), ^bb171(%920, %921, %922 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb167(%924: i256 loc({{.*}}:55:4), %925: i256 loc({{.*}}:55:4), %926: i256 loc({{.*}}:55:4), %927: i256 loc({{.*}}:55:4)): // pred: ^bb166 -// CHECK-NEXT: cf.br ^bb168(%c0_i256, %925, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb168(%928: i256 loc({{.*}}:55:4), %929: i256 loc({{.*}}:55:4), %930: i256 loc({{.*}}:55:4), %931: i256 loc({{.*}}:55:4)): // 2 preds: ^bb167, ^bb169 -// CHECK-NEXT: %932 = arith.cmpi ult, %928, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %932, ^bb169(%928, %929, %930, %931 : i256, i256, i256, i256), ^bb170(%929, %931 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb169(%933: i256 loc({{.*}}:55:4), %934: i256 loc({{.*}}:55:4), %935: i256 loc({{.*}}:55:4), %936: i256 loc({{.*}}:55:4)): // pred: ^bb168 -// CHECK-NEXT: %937 = llvm.inttoptr %934 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %938 = llvm.load %937 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %939 = arith.andi %938, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %940 = arith.shli %939, %935 : i256 loc(#loc16) -// CHECK-NEXT: %941 = arith.ori %936, %940 : i256 loc(#loc16) -// CHECK-NEXT: %942 = arith.addi %934, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %943 = arith.addi %935, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %944 = arith.addi %933, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb168(%944, %942, %943, %941 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb170(%945: i256 loc({{.*}}:55:4), %946: i256 loc({{.*}}:55:4)): // pred: ^bb168 -// CHECK-NEXT: %947 = llvm.inttoptr %926 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %946, %947 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %948 = arith.addi %926, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %949 = arith.addi %927, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %950 = arith.addi %924, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb166(%950, %945, %948, %949 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb171(%951: i256 loc({{.*}}:55:4), %952: i256 loc({{.*}}:55:4), %953: i256 loc({{.*}}:55:4)): // pred: ^bb166 -// CHECK-NEXT: %954 = arith.cmpi ult, %953, %877 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %954, ^bb172(%953, %951, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb175(%870 : i256) loc(#loc16) -// CHECK-NEXT: ^bb172(%955: i256 loc({{.*}}:55:4), %956: i256 loc({{.*}}:55:4), %957: i256 loc({{.*}}:55:4), %958: i256 loc({{.*}}:55:4)): // 2 preds: ^bb171, ^bb173 -// CHECK-NEXT: %959 = arith.cmpi ult, %955, %877 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %959, ^bb173(%955, %956, %957, %958 : i256, i256, i256, i256), ^bb174(%958 : i256) loc(#loc16) -// CHECK-NEXT: ^bb173(%960: i256 loc({{.*}}:55:4), %961: i256 loc({{.*}}:55:4), %962: i256 loc({{.*}}:55:4), %963: i256 loc({{.*}}:55:4)): // pred: ^bb172 -// CHECK-NEXT: %964 = llvm.inttoptr %961 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %965 = llvm.load %964 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %966 = arith.andi %965, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %967 = arith.shli %966, %962 : i256 loc(#loc16) -// CHECK-NEXT: %968 = arith.ori %963, %967 : i256 loc(#loc16) -// CHECK-NEXT: %969 = arith.addi %961, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %970 = arith.addi %962, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %971 = arith.addi %960, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb172(%971, %969, %970, %968 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb174(%972: i256 loc({{.*}}:55:4)): // pred: ^bb172 -// CHECK-NEXT: %973 = llvm.inttoptr %952 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %972, %973 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb175(%870 : i256) loc(#loc16) -// CHECK-NEXT: ^bb175(%974: i256 loc({{.*}}:55:4)): // 2 preds: ^bb171, ^bb174 -// CHECK-NEXT: %975 = arith.addi %974, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb156(%975 : i256) loc(#loc16) -// CHECK-NEXT: ^bb176: // pred: ^bb156 -// CHECK-NEXT: %976 = arith.addi %808, %c96_i256 : i256 loc(#loc16) -// CHECK-NEXT: %977 = llvm.inttoptr %976 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %978 = llvm.load %977 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %979 = arith.addi %806, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb177(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb177(%980: i256 loc({{.*}}:55:4)): // 2 preds: ^bb176, ^bb178 -// CHECK-NEXT: %981 = arith.cmpi ult, %980, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %981, ^bb178(%980 : i256), ^bb179 loc(#loc16) -// CHECK-NEXT: ^bb178(%982: i256 loc({{.*}}:55:4)): // pred: ^bb177 -// CHECK-NEXT: %983 = arith.muli %982, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %984 = arith.addi %978, %983 : i256 loc(#loc16) -// CHECK-NEXT: %985 = arith.addi %979, %982 : i256 loc(#loc16) -// CHECK-NEXT: %986 = llvm.inttoptr %984 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %987 = llvm.load %986 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %988 = arith.andi %987, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc16) -// CHECK-NEXT: %989 = llvm.inttoptr %985 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %988, %989 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %990 = arith.addi %982, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb177(%990 : i256) loc(#loc16) -// CHECK-NEXT: ^bb179: // pred: ^bb177 -// CHECK-NEXT: %991 = arith.addi %808, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %992 = llvm.inttoptr %991 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %993 = llvm.load %992 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %994 = arith.andi %993, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc16) -// CHECK-NEXT: %995 = arith.addi %808, %c160_i256 : i256 loc(#loc16) -// CHECK-NEXT: %996 = llvm.inttoptr %995 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %997 = llvm.load %996 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %998 = arith.andi %997, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %999 = arith.shli %998, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1000 = arith.ori %994, %999 : i256 loc(#loc16) -// CHECK-NEXT: %1001 = arith.addi %808, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1002 = llvm.inttoptr %1001 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1003 = llvm.load %1002 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1004 = arith.shrui %1003, %c224_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1005 = arith.shli %1004, %c200_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1006 = arith.ori %1000, %1005 : i256 loc(#loc16) -// CHECK-NEXT: %1007 = arith.addi %806, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1008 = llvm.inttoptr %1007 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1009 = llvm.load %1008 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %1010 = arith.andi %1009, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1011 = arith.ori %1010, %1006 : i256 loc(#loc16) -// CHECK-NEXT: %1012 = llvm.inttoptr %1007 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1011, %1012 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1013 = arith.addi %802, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb144(%1013 : i256) loc(#loc16) -// CHECK-NEXT: ^bb180(%1014: i256 loc({{.*}}:55:4)): // pred: ^bb144 -// CHECK-NEXT: %1015 = arith.addi %1014, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb128(%1015 : i256) loc(#loc16) -// CHECK-NEXT: ^bb181: // pred: ^bb128 -// CHECK-NEXT: %1016 = arith.addi %1, %c416_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1017 = llvm.inttoptr %1016 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1018 = llvm.load %1017 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb182(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb182(%1019: i256 loc({{.*}}:55:4)): // 2 preds: ^bb181, ^bb183 -// CHECK-NEXT: %1020 = arith.cmpi ult, %1019, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1020, ^bb183(%1019 : i256), ^bb184 loc(#loc16) -// CHECK-NEXT: ^bb183(%1021: i256 loc({{.*}}:55:4)): // pred: ^bb182 -// CHECK-NEXT: %1022 = arith.muli %1021, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1023 = arith.addi %1018, %1022 : i256 loc(#loc16) -// CHECK-NEXT: %1024 = arith.addi %1021, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1025 = llvm.inttoptr %1023 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1026 = llvm.load %1025 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1027 = arith.andi %1026, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1028 = llvm.inttoptr %1024 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1027, %1028 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1029 = arith.addi %1021, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb182(%1029 : i256) loc(#loc16) -// CHECK-NEXT: ^bb184: // pred: ^bb182 -// CHECK-NEXT: %1030 = arith.addi %1, %c448_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1031 = llvm.inttoptr %1030 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1032 = llvm.load %1031 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb185(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb185(%1033: i256 loc({{.*}}:55:4)): // 2 preds: ^bb184, ^bb186 -// CHECK-NEXT: %1034 = arith.cmpi ult, %1033, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1034, ^bb186(%1033 : i256), ^bb187 loc(#loc16) -// CHECK-NEXT: ^bb186(%1035: i256 loc({{.*}}:55:4)): // pred: ^bb185 -// CHECK-NEXT: %1036 = arith.muli %1035, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1037 = arith.addi %1032, %1036 : i256 loc(#loc16) -// CHECK-NEXT: %1038 = arith.addi %1035, %c36_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1039 = llvm.inttoptr %1037 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1040 = llvm.load %1039 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1041 = arith.andi %1040, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1042 = llvm.inttoptr %1038 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1041, %1042 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1043 = arith.addi %1035, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb185(%1043 : i256) loc(#loc16) -// CHECK-NEXT: ^bb187: // pred: ^bb185 -// CHECK-NEXT: %1044 = arith.addi %1, %c480_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1045 = llvm.inttoptr %1044 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1046 = llvm.load %1045 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb188(%c0_i256, %1046, %c41_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb188(%1047: i256 loc({{.*}}:55:4), %1048: i256 loc({{.*}}:55:4), %1049: i256 loc({{.*}}:55:4), %1050: i256 loc({{.*}}:55:4)): // 2 preds: ^bb187, ^bb192 -// CHECK-NEXT: %1051 = arith.cmpi ult, %1047, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1051, ^bb189(%1047, %1048, %1049, %1050 : i256, i256, i256, i256), ^bb193(%1048, %1049, %1050 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb189(%1052: i256 loc({{.*}}:55:4), %1053: i256 loc({{.*}}:55:4), %1054: i256 loc({{.*}}:55:4), %1055: i256 loc({{.*}}:55:4)): // pred: ^bb188 -// CHECK-NEXT: cf.br ^bb190(%c0_i256, %1053, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb190(%1056: i256 loc({{.*}}:55:4), %1057: i256 loc({{.*}}:55:4), %1058: i256 loc({{.*}}:55:4), %1059: i256 loc({{.*}}:55:4)): // 2 preds: ^bb189, ^bb191 -// CHECK-NEXT: %1060 = arith.cmpi ult, %1056, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1060, ^bb191(%1056, %1057, %1058, %1059 : i256, i256, i256, i256), ^bb192(%1057, %1059 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb191(%1061: i256 loc({{.*}}:55:4), %1062: i256 loc({{.*}}:55:4), %1063: i256 loc({{.*}}:55:4), %1064: i256 loc({{.*}}:55:4)): // pred: ^bb190 -// CHECK-NEXT: %1065 = llvm.inttoptr %1062 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1066 = llvm.load %1065 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1067 = arith.andi %1066, %c4722366482869645213695_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1068 = arith.shli %1067, %1063 : i256 loc(#loc16) -// CHECK-NEXT: %1069 = arith.ori %1064, %1068 : i256 loc(#loc16) -// CHECK-NEXT: %1070 = arith.addi %1062, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1071 = arith.addi %1063, %c72_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1072 = arith.addi %1061, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb190(%1072, %1070, %1071, %1069 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb192(%1073: i256 loc({{.*}}:55:4), %1074: i256 loc({{.*}}:55:4)): // pred: ^bb190 -// CHECK-NEXT: %1075 = llvm.inttoptr %1054 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1074, %1075 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1076 = arith.addi %1054, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1077 = arith.addi %1055, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1078 = arith.addi %1052, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb188(%1078, %1073, %1076, %1077 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb193(%1079: i256 loc({{.*}}:55:4), %1080: i256 loc({{.*}}:55:4), %1081: i256 loc({{.*}}:55:4)): // pred: ^bb188 -// CHECK-NEXT: %1082 = arith.cmpi ult, %1081, %c7_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1082, ^bb194(%1081, %1079, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb197 loc(#loc16) -// CHECK-NEXT: ^bb194(%1083: i256 loc({{.*}}:55:4), %1084: i256 loc({{.*}}:55:4), %1085: i256 loc({{.*}}:55:4), %1086: i256 loc({{.*}}:55:4)): // 2 preds: ^bb193, ^bb195 -// CHECK-NEXT: %1087 = arith.cmpi ult, %1083, %c7_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1087, ^bb195(%1083, %1084, %1085, %1086 : i256, i256, i256, i256), ^bb196(%1086 : i256) loc(#loc16) -// CHECK-NEXT: ^bb195(%1088: i256 loc({{.*}}:55:4), %1089: i256 loc({{.*}}:55:4), %1090: i256 loc({{.*}}:55:4), %1091: i256 loc({{.*}}:55:4)): // pred: ^bb194 -// CHECK-NEXT: %1092 = llvm.inttoptr %1089 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1093 = llvm.load %1092 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1094 = arith.andi %1093, %c4722366482869645213695_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1095 = arith.shli %1094, %1090 : i256 loc(#loc16) -// CHECK-NEXT: %1096 = arith.ori %1091, %1095 : i256 loc(#loc16) -// CHECK-NEXT: %1097 = arith.addi %1089, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1098 = arith.addi %1090, %c72_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1099 = arith.addi %1088, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb194(%1099, %1097, %1098, %1096 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb196(%1100: i256 loc({{.*}}:55:4)): // pred: ^bb194 -// CHECK-NEXT: %1101 = llvm.inttoptr %1080 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1100, %1101 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb197 loc(#loc16) +// CHECK-NEXT: %826 = arith.muli %824, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %827 = arith.subi %c256_i256, %826 : i256 loc(#loc4) +// CHECK-NEXT: %828 = arith.shrui %c-1_i256, %827 : i256 loc(#loc4) +// CHECK-NEXT: %829 = arith.subi %823, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %830 = llvm.inttoptr %829 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %831 = llvm.load %830 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %832 = arith.andi %831, %828 : i256 loc(#loc4) +// CHECK-NEXT: %833 = llvm.inttoptr %829 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %832, %833 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb152 loc(#loc4) +// CHECK-NEXT: ^bb152: // 2 preds: ^bb150, ^bb151 +// CHECK-NEXT: %834 = arith.addi %815, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %835 = arith.divui %834, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %836 = arith.addi %820, %835 : i256 loc(#loc4) +// CHECK-NEXT: %837 = arith.subi %836, %823 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb153(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb153(%838: i256 loc({{.*}}:55:4)): // 2 preds: ^bb152, ^bb154 +// CHECK-NEXT: %839 = arith.cmpi ult, %838, %837 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %839, ^bb154(%838 : i256), ^bb155 loc(#loc4) +// CHECK-NEXT: ^bb154(%840: i256 loc({{.*}}:55:4)): // pred: ^bb153 +// CHECK-NEXT: %841 = arith.addi %823, %840 : i256 loc(#loc4) +// CHECK-NEXT: %842 = llvm.inttoptr %841 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %842 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %843 = arith.addi %840, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb153(%843 : i256) loc(#loc4) +// CHECK-NEXT: ^bb155: // 2 preds: ^bb149, ^bb153 +// CHECK-NEXT: %844 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %804, %844 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %845 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %846 = "llvm.intrcall"(%845, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %847 = arith.cmpi uge, %808, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %848 = arith.subi %808, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %849 = arith.select %847, %848, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb156(%c0_i256, %809, %846, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb156(%850: i256 loc({{.*}}:55:4), %851: i256 loc({{.*}}:55:4), %852: i256 loc({{.*}}:55:4), %853: i256 loc({{.*}}:55:4)): // 2 preds: ^bb155, ^bb160 +// CHECK-NEXT: %854 = arith.cmpi ult, %850, %849 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %854, ^bb157(%850, %851, %852, %853 : i256, i256, i256, i256), ^bb161(%851, %852, %853 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb157(%855: i256 loc({{.*}}:55:4), %856: i256 loc({{.*}}:55:4), %857: i256 loc({{.*}}:55:4), %858: i256 loc({{.*}}:55:4)): // pred: ^bb156 +// CHECK-NEXT: cf.br ^bb158(%c0_i256, %856, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb158(%859: i256 loc({{.*}}:55:4), %860: i256 loc({{.*}}:55:4), %861: i256 loc({{.*}}:55:4), %862: i256 loc({{.*}}:55:4)): // 2 preds: ^bb157, ^bb159 +// CHECK-NEXT: %863 = arith.cmpi ult, %859, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %863, ^bb159(%859, %860, %861, %862 : i256, i256, i256, i256), ^bb160(%860, %862 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb159(%864: i256 loc({{.*}}:55:4), %865: i256 loc({{.*}}:55:4), %866: i256 loc({{.*}}:55:4), %867: i256 loc({{.*}}:55:4)): // pred: ^bb158 +// CHECK-NEXT: %868 = llvm.inttoptr %865 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %869 = llvm.load %868 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %870 = arith.andi %869, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %871 = arith.shli %870, %866 : i256 loc(#loc4) +// CHECK-NEXT: %872 = arith.ori %867, %871 : i256 loc(#loc4) +// CHECK-NEXT: %873 = arith.addi %865, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %874 = arith.addi %866, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %875 = arith.addi %864, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb158(%875, %873, %874, %872 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb160(%876: i256 loc({{.*}}:55:4), %877: i256 loc({{.*}}:55:4)): // pred: ^bb158 +// CHECK-NEXT: %878 = llvm.inttoptr %857 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %877, %878 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %879 = arith.addi %857, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %880 = arith.addi %858, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %881 = arith.addi %855, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb156(%881, %876, %879, %880 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb161(%882: i256 loc({{.*}}:55:4), %883: i256 loc({{.*}}:55:4), %884: i256 loc({{.*}}:55:4)): // pred: ^bb156 +// CHECK-NEXT: %885 = arith.cmpi ult, %884, %808 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %885, ^bb162(%884, %882, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb165(%801 : i256) loc(#loc4) +// CHECK-NEXT: ^bb162(%886: i256 loc({{.*}}:55:4), %887: i256 loc({{.*}}:55:4), %888: i256 loc({{.*}}:55:4), %889: i256 loc({{.*}}:55:4)): // 2 preds: ^bb161, ^bb163 +// CHECK-NEXT: %890 = arith.cmpi ult, %886, %808 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %890, ^bb163(%886, %887, %888, %889 : i256, i256, i256, i256), ^bb164(%889 : i256) loc(#loc4) +// CHECK-NEXT: ^bb163(%891: i256 loc({{.*}}:55:4), %892: i256 loc({{.*}}:55:4), %893: i256 loc({{.*}}:55:4), %894: i256 loc({{.*}}:55:4)): // pred: ^bb162 +// CHECK-NEXT: %895 = llvm.inttoptr %892 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %896 = llvm.load %895 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %897 = arith.andi %896, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %898 = arith.shli %897, %893 : i256 loc(#loc4) +// CHECK-NEXT: %899 = arith.ori %894, %898 : i256 loc(#loc4) +// CHECK-NEXT: %900 = arith.addi %892, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %901 = arith.addi %893, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %902 = arith.addi %891, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb162(%902, %900, %901, %899 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb164(%903: i256 loc({{.*}}:55:4)): // pred: ^bb162 +// CHECK-NEXT: %904 = llvm.inttoptr %883 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %903, %904 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb165(%801 : i256) loc(#loc4) +// CHECK-NEXT: ^bb165(%905: i256 loc({{.*}}:55:4)): // 2 preds: ^bb161, ^bb164 +// CHECK-NEXT: %906 = arith.addi %905, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb146(%906 : i256) loc(#loc4) +// CHECK-NEXT: ^bb166: // pred: ^bb146 +// CHECK-NEXT: %907 = arith.addi %739, %c96_i256 : i256 loc(#loc4) +// CHECK-NEXT: %908 = llvm.inttoptr %907 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %909 = llvm.load %908 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %910 = arith.addi %737, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb167(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb167(%911: i256 loc({{.*}}:55:4)): // 2 preds: ^bb166, ^bb168 +// CHECK-NEXT: %912 = arith.cmpi ult, %911, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %912, ^bb168(%911 : i256), ^bb169 loc(#loc4) +// CHECK-NEXT: ^bb168(%913: i256 loc({{.*}}:55:4)): // pred: ^bb167 +// CHECK-NEXT: %914 = arith.muli %913, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %915 = arith.addi %909, %914 : i256 loc(#loc4) +// CHECK-NEXT: %916 = arith.addi %910, %913 : i256 loc(#loc4) +// CHECK-NEXT: %917 = llvm.inttoptr %915 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %918 = llvm.load %917 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %919 = arith.andi %918, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) +// CHECK-NEXT: %920 = llvm.inttoptr %916 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %919, %920 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %921 = arith.addi %913, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb167(%921 : i256) loc(#loc4) +// CHECK-NEXT: ^bb169: // pred: ^bb167 +// CHECK-NEXT: %922 = arith.addi %739, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %923 = llvm.inttoptr %922 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %924 = llvm.load %923 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %925 = arith.andi %924, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc4) +// CHECK-NEXT: %926 = arith.addi %739, %c160_i256 : i256 loc(#loc4) +// CHECK-NEXT: %927 = llvm.inttoptr %926 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %928 = llvm.load %927 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %929 = arith.andi %928, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %930 = arith.shli %929, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %931 = arith.ori %925, %930 : i256 loc(#loc4) +// CHECK-NEXT: %932 = arith.addi %739, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %933 = llvm.inttoptr %932 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %934 = llvm.load %933 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %935 = arith.shrui %934, %c224_i256 : i256 loc(#loc4) +// CHECK-NEXT: %936 = arith.shli %935, %c200_i256 : i256 loc(#loc4) +// CHECK-NEXT: %937 = arith.ori %931, %936 : i256 loc(#loc4) +// CHECK-NEXT: %938 = arith.addi %737, %c4_i256 : i256 loc(#loc4) +// CHECK-NEXT: %939 = llvm.inttoptr %938 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %940 = llvm.load %939 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %941 = arith.andi %940, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc4) +// CHECK-NEXT: %942 = arith.ori %941, %937 : i256 loc(#loc4) +// CHECK-NEXT: %943 = llvm.inttoptr %938 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %942, %943 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %944 = arith.addi %733, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb134(%944 : i256) loc(#loc4) +// CHECK-NEXT: ^bb170(%945: i256 loc({{.*}}:55:4)): // pred: ^bb134 +// CHECK-NEXT: %946 = arith.addi %945, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb115(%946 : i256) loc(#loc4) +// CHECK-NEXT: ^bb171: // pred: ^bb115 +// CHECK-NEXT: %947 = arith.addi %1, %c416_i256 : i256 loc(#loc4) +// CHECK-NEXT: %948 = llvm.inttoptr %947 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %949 = llvm.load %948 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb172(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb172(%950: i256 loc({{.*}}:55:4)): // 2 preds: ^bb171, ^bb173 +// CHECK-NEXT: %951 = arith.cmpi ult, %950, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %951, ^bb173(%950 : i256), ^bb174 loc(#loc4) +// CHECK-NEXT: ^bb173(%952: i256 loc({{.*}}:55:4)): // pred: ^bb172 +// CHECK-NEXT: %953 = arith.muli %952, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %954 = arith.addi %949, %953 : i256 loc(#loc4) +// CHECK-NEXT: %955 = arith.addi %952, %c31_i256 : i256 loc(#loc4) +// CHECK-NEXT: %956 = llvm.inttoptr %954 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %957 = llvm.load %956 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %958 = arith.andi %957, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc4) +// CHECK-NEXT: %959 = llvm.inttoptr %955 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %958, %959 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %960 = arith.addi %952, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb172(%960 : i256) loc(#loc4) +// CHECK-NEXT: ^bb174: // pred: ^bb172 +// CHECK-NEXT: %961 = arith.addi %1, %c448_i256 : i256 loc(#loc4) +// CHECK-NEXT: %962 = llvm.inttoptr %961 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %963 = llvm.load %962 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb175(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb175(%964: i256 loc({{.*}}:55:4)): // 2 preds: ^bb174, ^bb176 +// CHECK-NEXT: %965 = arith.cmpi ult, %964, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %965, ^bb176(%964 : i256), ^bb177 loc(#loc4) +// CHECK-NEXT: ^bb176(%966: i256 loc({{.*}}:55:4)): // pred: ^bb175 +// CHECK-NEXT: %967 = arith.muli %966, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %968 = arith.addi %963, %967 : i256 loc(#loc4) +// CHECK-NEXT: %969 = arith.addi %966, %c36_i256 : i256 loc(#loc4) +// CHECK-NEXT: %970 = llvm.inttoptr %968 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %971 = llvm.load %970 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %972 = arith.andi %971, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc4) +// CHECK-NEXT: %973 = llvm.inttoptr %969 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %972, %973 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %974 = arith.addi %966, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb175(%974 : i256) loc(#loc4) +// CHECK-NEXT: ^bb177: // pred: ^bb175 +// CHECK-NEXT: %975 = arith.addi %1, %c480_i256 : i256 loc(#loc4) +// CHECK-NEXT: %976 = llvm.inttoptr %975 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %977 = llvm.load %976 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb178(%c0_i256, %977, %c41_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb178(%978: i256 loc({{.*}}:55:4), %979: i256 loc({{.*}}:55:4), %980: i256 loc({{.*}}:55:4), %981: i256 loc({{.*}}:55:4)): // 2 preds: ^bb177, ^bb182 +// CHECK-NEXT: %982 = arith.cmpi ult, %978, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %982, ^bb179(%978, %979, %980, %981 : i256, i256, i256, i256), ^bb183(%979, %980, %981 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb179(%983: i256 loc({{.*}}:55:4), %984: i256 loc({{.*}}:55:4), %985: i256 loc({{.*}}:55:4), %986: i256 loc({{.*}}:55:4)): // pred: ^bb178 +// CHECK-NEXT: cf.br ^bb180(%c0_i256, %984, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb180(%987: i256 loc({{.*}}:55:4), %988: i256 loc({{.*}}:55:4), %989: i256 loc({{.*}}:55:4), %990: i256 loc({{.*}}:55:4)): // 2 preds: ^bb179, ^bb181 +// CHECK-NEXT: %991 = arith.cmpi ult, %987, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %991, ^bb181(%987, %988, %989, %990 : i256, i256, i256, i256), ^bb182(%988, %990 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb181(%992: i256 loc({{.*}}:55:4), %993: i256 loc({{.*}}:55:4), %994: i256 loc({{.*}}:55:4), %995: i256 loc({{.*}}:55:4)): // pred: ^bb180 +// CHECK-NEXT: %996 = llvm.inttoptr %993 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %997 = llvm.load %996 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %998 = arith.andi %997, %c4722366482869645213695_i256 : i256 loc(#loc4) +// CHECK-NEXT: %999 = arith.shli %998, %994 : i256 loc(#loc4) +// CHECK-NEXT: %1000 = arith.ori %995, %999 : i256 loc(#loc4) +// CHECK-NEXT: %1001 = arith.addi %993, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1002 = arith.addi %994, %c72_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1003 = arith.addi %992, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb180(%1003, %1001, %1002, %1000 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb182(%1004: i256 loc({{.*}}:55:4), %1005: i256 loc({{.*}}:55:4)): // pred: ^bb180 +// CHECK-NEXT: %1006 = llvm.inttoptr %985 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1005, %1006 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1007 = arith.addi %985, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1008 = arith.addi %986, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1009 = arith.addi %983, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb178(%1009, %1004, %1007, %1008 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb183(%1010: i256 loc({{.*}}:55:4), %1011: i256 loc({{.*}}:55:4), %1012: i256 loc({{.*}}:55:4)): // pred: ^bb178 +// CHECK-NEXT: %1013 = arith.cmpi ult, %1012, %c7_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1013, ^bb184(%1012, %1010, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb187 loc(#loc4) +// CHECK-NEXT: ^bb184(%1014: i256 loc({{.*}}:55:4), %1015: i256 loc({{.*}}:55:4), %1016: i256 loc({{.*}}:55:4), %1017: i256 loc({{.*}}:55:4)): // 2 preds: ^bb183, ^bb185 +// CHECK-NEXT: %1018 = arith.cmpi ult, %1014, %c7_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1018, ^bb185(%1014, %1015, %1016, %1017 : i256, i256, i256, i256), ^bb186(%1017 : i256) loc(#loc4) +// CHECK-NEXT: ^bb185(%1019: i256 loc({{.*}}:55:4), %1020: i256 loc({{.*}}:55:4), %1021: i256 loc({{.*}}:55:4), %1022: i256 loc({{.*}}:55:4)): // pred: ^bb184 +// CHECK-NEXT: %1023 = llvm.inttoptr %1020 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1024 = llvm.load %1023 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1025 = arith.andi %1024, %c4722366482869645213695_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1026 = arith.shli %1025, %1021 : i256 loc(#loc4) +// CHECK-NEXT: %1027 = arith.ori %1022, %1026 : i256 loc(#loc4) +// CHECK-NEXT: %1028 = arith.addi %1020, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1029 = arith.addi %1021, %c72_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1030 = arith.addi %1019, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb184(%1030, %1028, %1029, %1027 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb186(%1031: i256 loc({{.*}}:55:4)): // pred: ^bb184 +// CHECK-NEXT: %1032 = llvm.inttoptr %1011 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1031, %1032 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb187 loc(#loc4) +// CHECK-NEXT: ^bb187: // 2 preds: ^bb183, ^bb186 +// CHECK-NEXT: %1033 = arith.addi %1, %c512_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1034 = llvm.inttoptr %1033 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1035 = llvm.load %1034 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: call @__sol.copy.memory.storage.string(%1035, %c44_i256) : (i256, i256) -> () loc(#loc4) +// CHECK-NEXT: %1036 = arith.addi %1, %c544_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1037 = llvm.inttoptr %1036 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1038 = llvm.load %1037 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb188(%c0_i256, %1038, %c45_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb188(%1039: i256 loc({{.*}}:55:4), %1040: i256 loc({{.*}}:55:4), %1041: i256 loc({{.*}}:55:4), %1042: i256 loc({{.*}}:55:4)): // 2 preds: ^bb187, ^bb192 +// CHECK-NEXT: %1043 = arith.cmpi ult, %1039, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1043, ^bb189(%1039, %1040, %1041, %1042 : i256, i256, i256, i256), ^bb193(%1040, %1041, %1042 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb189(%1044: i256 loc({{.*}}:55:4), %1045: i256 loc({{.*}}:55:4), %1046: i256 loc({{.*}}:55:4), %1047: i256 loc({{.*}}:55:4)): // pred: ^bb188 +// CHECK-NEXT: cf.br ^bb190(%c0_i256, %1045, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb190(%1048: i256 loc({{.*}}:55:4), %1049: i256 loc({{.*}}:55:4), %1050: i256 loc({{.*}}:55:4), %1051: i256 loc({{.*}}:55:4)): // 2 preds: ^bb189, ^bb191 +// CHECK-NEXT: %1052 = arith.cmpi ult, %1048, %c4_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1052, ^bb191(%1048, %1049, %1050, %1051 : i256, i256, i256, i256), ^bb192(%1049, %1051 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb191(%1053: i256 loc({{.*}}:55:4), %1054: i256 loc({{.*}}:55:4), %1055: i256 loc({{.*}}:55:4), %1056: i256 loc({{.*}}:55:4)): // pred: ^bb190 +// CHECK-NEXT: %1057 = llvm.inttoptr %1054 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1058 = llvm.load %1057 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1059 = arith.shrui %1058, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1060 = arith.andi %1059, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1061 = arith.shli %1060, %1055 : i256 loc(#loc4) +// CHECK-NEXT: %1062 = arith.ori %1056, %1061 : i256 loc(#loc4) +// CHECK-NEXT: %1063 = arith.addi %1054, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1064 = arith.addi %1055, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1065 = arith.addi %1053, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb190(%1065, %1063, %1064, %1062 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb192(%1066: i256 loc({{.*}}:55:4), %1067: i256 loc({{.*}}:55:4)): // pred: ^bb190 +// CHECK-NEXT: %1068 = llvm.inttoptr %1046 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1067, %1068 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1069 = arith.addi %1046, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1070 = arith.addi %1047, %c4_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1071 = arith.addi %1044, %c4_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb188(%1071, %1066, %1069, %1070 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb193(%1072: i256 loc({{.*}}:55:4), %1073: i256 loc({{.*}}:55:4), %1074: i256 loc({{.*}}:55:4)): // pred: ^bb188 +// CHECK-NEXT: %1075 = arith.cmpi ult, %1074, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1075, ^bb194(%1074, %1072, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb197 loc(#loc4) +// CHECK-NEXT: ^bb194(%1076: i256 loc({{.*}}:55:4), %1077: i256 loc({{.*}}:55:4), %1078: i256 loc({{.*}}:55:4), %1079: i256 loc({{.*}}:55:4)): // 2 preds: ^bb193, ^bb195 +// CHECK-NEXT: %1080 = arith.cmpi ult, %1076, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1080, ^bb195(%1076, %1077, %1078, %1079 : i256, i256, i256, i256), ^bb196(%1079 : i256) loc(#loc4) +// CHECK-NEXT: ^bb195(%1081: i256 loc({{.*}}:55:4), %1082: i256 loc({{.*}}:55:4), %1083: i256 loc({{.*}}:55:4), %1084: i256 loc({{.*}}:55:4)): // pred: ^bb194 +// CHECK-NEXT: %1085 = llvm.inttoptr %1082 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1086 = llvm.load %1085 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1087 = arith.shrui %1086, %c192_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1088 = arith.andi %1087, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1089 = arith.shli %1088, %1083 : i256 loc(#loc4) +// CHECK-NEXT: %1090 = arith.ori %1084, %1089 : i256 loc(#loc4) +// CHECK-NEXT: %1091 = arith.addi %1082, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1092 = arith.addi %1083, %c64_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1093 = arith.addi %1081, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb194(%1093, %1091, %1092, %1090 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb196(%1094: i256 loc({{.*}}:55:4)): // pred: ^bb194 +// CHECK-NEXT: %1095 = llvm.inttoptr %1073 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1094, %1095 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb197 loc(#loc4) // CHECK-NEXT: ^bb197: // 2 preds: ^bb193, ^bb196 -// CHECK-NEXT: %1102 = arith.addi %1, %c512_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1103 = llvm.inttoptr %1102 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1104 = llvm.load %1103 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1105 = llvm.inttoptr %1104 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1106 = llvm.load %1105 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1107 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1108 = llvm.load %1107 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %1109 = arith.shrui %1108, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1110 = arith.andi %1108, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1111 = arith.cmpi eq, %1110, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1112 = arith.andi %1109, %c127_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1113 = arith.select %1111, %1112, %1109 : i256 loc(#loc16) -// CHECK-NEXT: %1114 = arith.cmpi ult, %1113, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1115 = arith.extui %1114 : i1 to i256 loc(#loc16) -// CHECK-NEXT: %1116 = arith.cmpi eq, %1110, %1115 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1116, ^bb198, ^bb199 loc(#loc16) -// CHECK-NEXT: ^bb198: // pred: ^bb197 -// CHECK-NEXT: %1117 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1117 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1118 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c34_i256, %1118 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1119 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%1119, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb199 loc(#loc16) -// CHECK-NEXT: ^bb199: // 2 preds: ^bb197, ^bb198 -// CHECK-NEXT: %1120 = arith.cmpi ugt, %1113, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1120, ^bb200, ^bb203 loc(#loc16) -// CHECK-NEXT: ^bb200: // pred: ^bb199 -// CHECK-NEXT: %1121 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c44_i256, %1121 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1122 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1123 = "llvm.intrcall"(%1122, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %1124 = arith.addi %1106, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1125 = arith.divui %1124, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1126 = arith.addi %1123, %1125 : i256 loc(#loc16) -// CHECK-NEXT: %1127 = arith.cmpi ult, %1106, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1128 = arith.select %1127, %1123, %1126 : i256 loc(#loc16) -// CHECK-NEXT: %1129 = arith.addi %1113, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1130 = arith.divui %1129, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1131 = arith.addi %1123, %1130 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb201(%1128 : i256) loc(#loc16) -// CHECK-NEXT: ^bb201(%1132: i256 loc({{.*}}:55:4)): // 2 preds: ^bb200, ^bb202 -// CHECK-NEXT: %1133 = arith.cmpi ult, %1132, %1131 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1133, ^bb202(%1132 : i256), ^bb203 loc(#loc16) -// CHECK-NEXT: ^bb202(%1134: i256 loc({{.*}}:55:4)): // pred: ^bb201 -// CHECK-NEXT: %1135 = llvm.inttoptr %1134 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %1135 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1136 = arith.addi %1134, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb201(%1136 : i256) loc(#loc16) -// CHECK-NEXT: ^bb203: // 2 preds: ^bb199, ^bb201 -// CHECK-NEXT: %1137 = arith.cmpi ugt, %1106, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1137, ^bb207, ^bb204 loc(#loc16) -// CHECK-NEXT: ^bb204: // pred: ^bb203 -// CHECK-NEXT: %1138 = arith.cmpi ne, %1106, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1138, ^bb206, ^bb205 loc(#loc16) -// CHECK-NEXT: ^bb205: // pred: ^bb204 -// CHECK-NEXT: %1139 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %1139 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb213 loc(#loc16) -// CHECK-NEXT: ^bb206: // pred: ^bb204 -// CHECK-NEXT: %1140 = arith.addi %1104, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1141 = llvm.inttoptr %1140 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1142 = llvm.load %1141 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1143 = arith.muli %1106, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1144 = arith.subi %c256_i256, %1143 : i256 loc(#loc16) -// CHECK-NEXT: %1145 = arith.shli %c-1_i256, %1144 : i256 loc(#loc16) -// CHECK-NEXT: %1146 = arith.andi %1142, %1145 : i256 loc(#loc16) -// CHECK-NEXT: %1147 = arith.muli %1106, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1148 = arith.ori %1146, %1147 : i256 loc(#loc16) -// CHECK-NEXT: %1149 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1148, %1149 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb213 loc(#loc16) -// CHECK-NEXT: ^bb207: // pred: ^bb203 -// CHECK-NEXT: %1150 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c44_i256, %1150 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1151 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1152 = "llvm.intrcall"(%1151, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %1153 = arith.addi %1104, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1154 = arith.andi %1106, %c-32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb208(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb208(%1155: i256 loc({{.*}}:55:4)): // 2 preds: ^bb207, ^bb209 -// CHECK-NEXT: %1156 = arith.cmpi ult, %1155, %1154 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1156, ^bb209(%1155 : i256), ^bb210 loc(#loc16) -// CHECK-NEXT: ^bb209(%1157: i256 loc({{.*}}:55:4)): // pred: ^bb208 -// CHECK-NEXT: %1158 = arith.divui %1157, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1159 = arith.addi %1153, %1157 : i256 loc(#loc16) -// CHECK-NEXT: %1160 = llvm.inttoptr %1159 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1161 = llvm.load %1160 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1162 = arith.addi %1152, %1158 : i256 loc(#loc16) -// CHECK-NEXT: %1163 = llvm.inttoptr %1162 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1161, %1163 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1164 = arith.addi %1157, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb208(%1164 : i256) loc(#loc16) -// CHECK-NEXT: ^bb210: // pred: ^bb208 -// CHECK-NEXT: %1165 = arith.cmpi ult, %1154, %1106 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1165, ^bb211, ^bb212 loc(#loc16) -// CHECK-NEXT: ^bb211: // pred: ^bb210 -// CHECK-NEXT: %1166 = arith.andi %1106, %c31_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1167 = arith.divui %1154, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1168 = arith.addi %1153, %1154 : i256 loc(#loc16) -// CHECK-NEXT: %1169 = llvm.inttoptr %1168 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1170 = llvm.load %1169 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1171 = arith.muli %1166, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1172 = arith.subi %c256_i256, %1171 : i256 loc(#loc16) -// CHECK-NEXT: %1173 = arith.shli %c-1_i256, %1172 : i256 loc(#loc16) -// CHECK-NEXT: %1174 = arith.andi %1170, %1173 : i256 loc(#loc16) -// CHECK-NEXT: %1175 = arith.addi %1152, %1167 : i256 loc(#loc16) -// CHECK-NEXT: %1176 = llvm.inttoptr %1175 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1174, %1176 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb212 loc(#loc16) -// CHECK-NEXT: ^bb212: // 2 preds: ^bb210, ^bb211 -// CHECK-NEXT: %1177 = arith.muli %1106, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1178 = arith.ori %1177, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1179 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1178, %1179 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb213 loc(#loc16) -// CHECK-NEXT: ^bb213: // 3 preds: ^bb205, ^bb206, ^bb212 -// CHECK-NEXT: %1180 = arith.addi %1, %c544_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1181 = llvm.inttoptr %1180 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1182 = llvm.load %1181 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb214(%c0_i256, %1182, %c45_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb214(%1183: i256 loc({{.*}}:55:4), %1184: i256 loc({{.*}}:55:4), %1185: i256 loc({{.*}}:55:4), %1186: i256 loc({{.*}}:55:4)): // 2 preds: ^bb213, ^bb218 -// CHECK-NEXT: %1187 = arith.cmpi ult, %1183, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1187, ^bb215(%1183, %1184, %1185, %1186 : i256, i256, i256, i256), ^bb219(%1184, %1185, %1186 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb215(%1188: i256 loc({{.*}}:55:4), %1189: i256 loc({{.*}}:55:4), %1190: i256 loc({{.*}}:55:4), %1191: i256 loc({{.*}}:55:4)): // pred: ^bb214 -// CHECK-NEXT: cf.br ^bb216(%c0_i256, %1189, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb216(%1192: i256 loc({{.*}}:55:4), %1193: i256 loc({{.*}}:55:4), %1194: i256 loc({{.*}}:55:4), %1195: i256 loc({{.*}}:55:4)): // 2 preds: ^bb215, ^bb217 -// CHECK-NEXT: %1196 = arith.cmpi ult, %1192, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1196, ^bb217(%1192, %1193, %1194, %1195 : i256, i256, i256, i256), ^bb218(%1193, %1195 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb217(%1197: i256 loc({{.*}}:55:4), %1198: i256 loc({{.*}}:55:4), %1199: i256 loc({{.*}}:55:4), %1200: i256 loc({{.*}}:55:4)): // pred: ^bb216 -// CHECK-NEXT: %1201 = llvm.inttoptr %1198 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1202 = llvm.load %1201 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1203 = arith.shrui %1202, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1204 = arith.andi %1203, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1205 = arith.shli %1204, %1199 : i256 loc(#loc16) -// CHECK-NEXT: %1206 = arith.ori %1200, %1205 : i256 loc(#loc16) -// CHECK-NEXT: %1207 = arith.addi %1198, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1208 = arith.addi %1199, %c64_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1209 = arith.addi %1197, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb216(%1209, %1207, %1208, %1206 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb218(%1210: i256 loc({{.*}}:55:4), %1211: i256 loc({{.*}}:55:4)): // pred: ^bb216 -// CHECK-NEXT: %1212 = llvm.inttoptr %1190 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1211, %1212 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1213 = arith.addi %1190, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1214 = arith.addi %1191, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1215 = arith.addi %1188, %c4_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb214(%1215, %1210, %1213, %1214 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb219(%1216: i256 loc({{.*}}:55:4), %1217: i256 loc({{.*}}:55:4), %1218: i256 loc({{.*}}:55:4)): // pred: ^bb214 -// CHECK-NEXT: %1219 = arith.cmpi ult, %1218, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1219, ^bb220(%1218, %1216, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb223 loc(#loc16) -// CHECK-NEXT: ^bb220(%1220: i256 loc({{.*}}:55:4), %1221: i256 loc({{.*}}:55:4), %1222: i256 loc({{.*}}:55:4), %1223: i256 loc({{.*}}:55:4)): // 2 preds: ^bb219, ^bb221 -// CHECK-NEXT: %1224 = arith.cmpi ult, %1220, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1224, ^bb221(%1220, %1221, %1222, %1223 : i256, i256, i256, i256), ^bb222(%1223 : i256) loc(#loc16) -// CHECK-NEXT: ^bb221(%1225: i256 loc({{.*}}:55:4), %1226: i256 loc({{.*}}:55:4), %1227: i256 loc({{.*}}:55:4), %1228: i256 loc({{.*}}:55:4)): // pred: ^bb220 -// CHECK-NEXT: %1229 = llvm.inttoptr %1226 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1230 = llvm.load %1229 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1231 = arith.shrui %1230, %c192_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1232 = arith.andi %1231, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1233 = arith.shli %1232, %1227 : i256 loc(#loc16) -// CHECK-NEXT: %1234 = arith.ori %1228, %1233 : i256 loc(#loc16) -// CHECK-NEXT: %1235 = arith.addi %1226, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1236 = arith.addi %1227, %c64_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1237 = arith.addi %1225, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb220(%1237, %1235, %1236, %1234 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb222(%1238: i256 loc({{.*}}:55:4)): // pred: ^bb220 -// CHECK-NEXT: %1239 = llvm.inttoptr %1217 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1238, %1239 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb223 loc(#loc16) -// CHECK-NEXT: ^bb223: // 2 preds: ^bb219, ^bb222 -// CHECK-NEXT: %1240 = arith.addi %1, %c576_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1241 = llvm.inttoptr %1240 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1242 = llvm.load %1241 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb224(%c0_i256, %1242, %c47_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb224(%1243: i256 loc({{.*}}:55:4), %1244: i256 loc({{.*}}:55:4), %1245: i256 loc({{.*}}:55:4), %1246: i256 loc({{.*}}:55:4)): // 2 preds: ^bb223, ^bb228 -// CHECK-NEXT: %1247 = arith.cmpi ult, %1243, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1247, ^bb225(%1243, %1244, %1245, %1246 : i256, i256, i256, i256), ^bb229(%1244, %1245, %1246 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb225(%1248: i256 loc({{.*}}:55:4), %1249: i256 loc({{.*}}:55:4), %1250: i256 loc({{.*}}:55:4), %1251: i256 loc({{.*}}:55:4)): // pred: ^bb224 -// CHECK-NEXT: cf.br ^bb226(%c0_i256, %1249, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb226(%1252: i256 loc({{.*}}:55:4), %1253: i256 loc({{.*}}:55:4), %1254: i256 loc({{.*}}:55:4), %1255: i256 loc({{.*}}:55:4)): // 2 preds: ^bb225, ^bb227 -// CHECK-NEXT: %1256 = arith.cmpi ult, %1252, %c16_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1256, ^bb227(%1252, %1253, %1254, %1255 : i256, i256, i256, i256), ^bb228(%1253, %1255 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb227(%1257: i256 loc({{.*}}:55:4), %1258: i256 loc({{.*}}:55:4), %1259: i256 loc({{.*}}:55:4), %1260: i256 loc({{.*}}:55:4)): // pred: ^bb226 -// CHECK-NEXT: %1261 = llvm.inttoptr %1258 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1262 = llvm.load %1261 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1263 = arith.andi %1262, %c65535_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1264 = arith.shli %1263, %1259 : i256 loc(#loc16) -// CHECK-NEXT: %1265 = arith.ori %1260, %1264 : i256 loc(#loc16) -// CHECK-NEXT: %1266 = arith.addi %1258, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1267 = arith.addi %1259, %c16_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1268 = arith.addi %1257, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb226(%1268, %1266, %1267, %1265 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb228(%1269: i256 loc({{.*}}:55:4), %1270: i256 loc({{.*}}:55:4)): // pred: ^bb226 -// CHECK-NEXT: %1271 = llvm.inttoptr %1250 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1270, %1271 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1272 = arith.addi %1250, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1273 = arith.addi %1251, %c16_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1274 = arith.addi %1248, %c16_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb224(%1274, %1269, %1272, %1273 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb229(%1275: i256 loc({{.*}}:55:4), %1276: i256 loc({{.*}}:55:4), %1277: i256 loc({{.*}}:55:4)): // pred: ^bb224 -// CHECK-NEXT: %1278 = arith.cmpi ult, %1277, %c9_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1278, ^bb230(%1277, %1275, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb233 loc(#loc16) -// CHECK-NEXT: ^bb230(%1279: i256 loc({{.*}}:55:4), %1280: i256 loc({{.*}}:55:4), %1281: i256 loc({{.*}}:55:4), %1282: i256 loc({{.*}}:55:4)): // 2 preds: ^bb229, ^bb231 -// CHECK-NEXT: %1283 = arith.cmpi ult, %1279, %c9_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1283, ^bb231(%1279, %1280, %1281, %1282 : i256, i256, i256, i256), ^bb232(%1282 : i256) loc(#loc16) -// CHECK-NEXT: ^bb231(%1284: i256 loc({{.*}}:55:4), %1285: i256 loc({{.*}}:55:4), %1286: i256 loc({{.*}}:55:4), %1287: i256 loc({{.*}}:55:4)): // pred: ^bb230 -// CHECK-NEXT: %1288 = llvm.inttoptr %1285 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1289 = llvm.load %1288 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1290 = arith.andi %1289, %c65535_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1291 = arith.shli %1290, %1286 : i256 loc(#loc16) -// CHECK-NEXT: %1292 = arith.ori %1287, %1291 : i256 loc(#loc16) -// CHECK-NEXT: %1293 = arith.addi %1285, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1294 = arith.addi %1286, %c16_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1295 = arith.addi %1284, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb230(%1295, %1293, %1294, %1292 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb232(%1296: i256 loc({{.*}}:55:4)): // pred: ^bb230 -// CHECK-NEXT: %1297 = llvm.inttoptr %1276 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1296, %1297 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb233 loc(#loc16) -// CHECK-NEXT: ^bb233: // 2 preds: ^bb229, ^bb232 -// CHECK-NEXT: %1298 = arith.addi %1, %c608_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1299 = llvm.inttoptr %1298 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1300 = llvm.load %1299 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb234(%c0_i256, %1300, %c48_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb234(%1301: i256 loc({{.*}}:55:4), %1302: i256 loc({{.*}}:55:4), %1303: i256 loc({{.*}}:55:4), %1304: i256 loc({{.*}}:55:4)): // 2 preds: ^bb233, ^bb238 -// CHECK-NEXT: %1305 = arith.cmpi ult, %1301, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1305, ^bb235(%1301, %1302, %1303, %1304 : i256, i256, i256, i256), ^bb239(%1302, %1303, %1304 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb235(%1306: i256 loc({{.*}}:55:4), %1307: i256 loc({{.*}}:55:4), %1308: i256 loc({{.*}}:55:4), %1309: i256 loc({{.*}}:55:4)): // pred: ^bb234 -// CHECK-NEXT: cf.br ^bb236(%c0_i256, %1307, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb236(%1310: i256 loc({{.*}}:55:4), %1311: i256 loc({{.*}}:55:4), %1312: i256 loc({{.*}}:55:4), %1313: i256 loc({{.*}}:55:4)): // 2 preds: ^bb235, ^bb237 -// CHECK-NEXT: %1314 = arith.cmpi ult, %1310, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1314, ^bb237(%1310, %1311, %1312, %1313 : i256, i256, i256, i256), ^bb238(%1311, %1313 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb237(%1315: i256 loc({{.*}}:55:4), %1316: i256 loc({{.*}}:55:4), %1317: i256 loc({{.*}}:55:4), %1318: i256 loc({{.*}}:55:4)): // pred: ^bb236 -// CHECK-NEXT: %1319 = llvm.inttoptr %1316 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1320 = llvm.load %1319 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1321 = arith.andi %1320, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1322 = arith.shli %1321, %1317 : i256 loc(#loc16) -// CHECK-NEXT: %1323 = arith.ori %1318, %1322 : i256 loc(#loc16) -// CHECK-NEXT: %1324 = arith.addi %1316, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1325 = arith.addi %1317, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1326 = arith.addi %1315, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb236(%1326, %1324, %1325, %1323 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb238(%1327: i256 loc({{.*}}:55:4), %1328: i256 loc({{.*}}:55:4)): // pred: ^bb236 -// CHECK-NEXT: %1329 = llvm.inttoptr %1308 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1328, %1329 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1330 = arith.addi %1308, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1331 = arith.addi %1309, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1332 = arith.addi %1306, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb234(%1332, %1327, %1330, %1331 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb239(%1333: i256 loc({{.*}}:55:4), %1334: i256 loc({{.*}}:55:4), %1335: i256 loc({{.*}}:55:4)): // pred: ^bb234 -// CHECK-NEXT: %1336 = arith.cmpi ult, %1335, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1336, ^bb240(%1335, %1333, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb243 loc(#loc16) -// CHECK-NEXT: ^bb240(%1337: i256 loc({{.*}}:55:4), %1338: i256 loc({{.*}}:55:4), %1339: i256 loc({{.*}}:55:4), %1340: i256 loc({{.*}}:55:4)): // 2 preds: ^bb239, ^bb241 -// CHECK-NEXT: %1341 = arith.cmpi ult, %1337, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1341, ^bb241(%1337, %1338, %1339, %1340 : i256, i256, i256, i256), ^bb242(%1340 : i256) loc(#loc16) -// CHECK-NEXT: ^bb241(%1342: i256 loc({{.*}}:55:4), %1343: i256 loc({{.*}}:55:4), %1344: i256 loc({{.*}}:55:4), %1345: i256 loc({{.*}}:55:4)): // pred: ^bb240 -// CHECK-NEXT: %1346 = llvm.inttoptr %1343 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1347 = llvm.load %1346 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1348 = arith.andi %1347, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1349 = arith.shli %1348, %1344 : i256 loc(#loc16) -// CHECK-NEXT: %1350 = arith.ori %1345, %1349 : i256 loc(#loc16) -// CHECK-NEXT: %1351 = arith.addi %1343, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1352 = arith.addi %1344, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1353 = arith.addi %1342, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb240(%1353, %1351, %1352, %1350 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb242(%1354: i256 loc({{.*}}:55:4)): // pred: ^bb240 -// CHECK-NEXT: %1355 = llvm.inttoptr %1334 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1354, %1355 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb243 loc(#loc16) -// CHECK-NEXT: ^bb243: // 2 preds: ^bb239, ^bb242 -// CHECK-NEXT: %1356 = arith.addi %1, %c640_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1357 = llvm.inttoptr %1356 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1358 = llvm.load %1357 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb244(%c0_i256, %1358, %c50_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb244(%1359: i256 loc({{.*}}:55:4), %1360: i256 loc({{.*}}:55:4), %1361: i256 loc({{.*}}:55:4), %1362: i256 loc({{.*}}:55:4)): // 2 preds: ^bb243, ^bb248 -// CHECK-NEXT: %1363 = arith.cmpi ult, %1359, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1363, ^bb245(%1359, %1360, %1361, %1362 : i256, i256, i256, i256), ^bb249(%1360, %1361, %1362 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb245(%1364: i256 loc({{.*}}:55:4), %1365: i256 loc({{.*}}:55:4), %1366: i256 loc({{.*}}:55:4), %1367: i256 loc({{.*}}:55:4)): // pred: ^bb244 -// CHECK-NEXT: cf.br ^bb246(%c0_i256, %1365, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb246(%1368: i256 loc({{.*}}:55:4), %1369: i256 loc({{.*}}:55:4), %1370: i256 loc({{.*}}:55:4), %1371: i256 loc({{.*}}:55:4)): // 2 preds: ^bb245, ^bb247 -// CHECK-NEXT: %1372 = arith.cmpi ult, %1368, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1372, ^bb247(%1368, %1369, %1370, %1371 : i256, i256, i256, i256), ^bb248(%1369, %1371 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb247(%1373: i256 loc({{.*}}:55:4), %1374: i256 loc({{.*}}:55:4), %1375: i256 loc({{.*}}:55:4), %1376: i256 loc({{.*}}:55:4)): // pred: ^bb246 -// CHECK-NEXT: %1377 = llvm.inttoptr %1374 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1378 = llvm.load %1377 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1379 = arith.andi %1378, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1380 = arith.shli %1379, %1375 : i256 loc(#loc16) -// CHECK-NEXT: %1381 = arith.ori %1376, %1380 : i256 loc(#loc16) -// CHECK-NEXT: %1382 = arith.addi %1374, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1383 = arith.addi %1375, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1384 = arith.addi %1373, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb246(%1384, %1382, %1383, %1381 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb248(%1385: i256 loc({{.*}}:55:4), %1386: i256 loc({{.*}}:55:4)): // pred: ^bb246 -// CHECK-NEXT: %1387 = llvm.inttoptr %1366 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1386, %1387 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1388 = arith.addi %1366, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1389 = arith.addi %1367, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1390 = arith.addi %1364, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb244(%1390, %1385, %1388, %1389 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb249(%1391: i256 loc({{.*}}:55:4), %1392: i256 loc({{.*}}:55:4), %1393: i256 loc({{.*}}:55:4)): // pred: ^bb244 -// CHECK-NEXT: %1394 = arith.cmpi ult, %1393, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1394, ^bb250(%1393, %1391, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb253 loc(#loc16) -// CHECK-NEXT: ^bb250(%1395: i256 loc({{.*}}:55:4), %1396: i256 loc({{.*}}:55:4), %1397: i256 loc({{.*}}:55:4), %1398: i256 loc({{.*}}:55:4)): // 2 preds: ^bb249, ^bb251 -// CHECK-NEXT: %1399 = arith.cmpi ult, %1395, %c3_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1399, ^bb251(%1395, %1396, %1397, %1398 : i256, i256, i256, i256), ^bb252(%1398 : i256) loc(#loc16) -// CHECK-NEXT: ^bb251(%1400: i256 loc({{.*}}:55:4), %1401: i256 loc({{.*}}:55:4), %1402: i256 loc({{.*}}:55:4), %1403: i256 loc({{.*}}:55:4)): // pred: ^bb250 -// CHECK-NEXT: %1404 = llvm.inttoptr %1401 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1405 = llvm.load %1404 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1406 = arith.andi %1405, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1407 = arith.shli %1406, %1402 : i256 loc(#loc16) -// CHECK-NEXT: %1408 = arith.ori %1403, %1407 : i256 loc(#loc16) -// CHECK-NEXT: %1409 = arith.addi %1401, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1410 = arith.addi %1402, %c128_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1411 = arith.addi %1400, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb250(%1411, %1409, %1410, %1408 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb252(%1412: i256 loc({{.*}}:55:4)): // pred: ^bb250 -// CHECK-NEXT: %1413 = llvm.inttoptr %1392 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1412, %1413 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb253 loc(#loc16) -// CHECK-NEXT: ^bb253: // 2 preds: ^bb249, ^bb252 -// CHECK-NEXT: %1414 = arith.addi %1, %c672_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1415 = llvm.inttoptr %1414 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1416 = llvm.load %1415 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb254(%c0_i256, %1416, %c52_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb254(%1417: i256 loc({{.*}}:55:4), %1418: i256 loc({{.*}}:55:4), %1419: i256 loc({{.*}}:55:4), %1420: i256 loc({{.*}}:55:4)): // 2 preds: ^bb253, ^bb258 -// CHECK-NEXT: %1421 = arith.cmpi ult, %1417, %c0_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1421, ^bb255(%1417, %1418, %1419, %1420 : i256, i256, i256, i256), ^bb259(%1418, %1419, %1420 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb255(%1422: i256 loc({{.*}}:55:4), %1423: i256 loc({{.*}}:55:4), %1424: i256 loc({{.*}}:55:4), %1425: i256 loc({{.*}}:55:4)): // pred: ^bb254 -// CHECK-NEXT: cf.br ^bb256(%c0_i256, %1423, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb256(%1426: i256 loc({{.*}}:55:4), %1427: i256 loc({{.*}}:55:4), %1428: i256 loc({{.*}}:55:4), %1429: i256 loc({{.*}}:55:4)): // 2 preds: ^bb255, ^bb257 -// CHECK-NEXT: %1430 = arith.cmpi ult, %1426, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1430, ^bb257(%1426, %1427, %1428, %1429 : i256, i256, i256, i256), ^bb258(%1427, %1429 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb257(%1431: i256 loc({{.*}}:55:4), %1432: i256 loc({{.*}}:55:4), %1433: i256 loc({{.*}}:55:4), %1434: i256 loc({{.*}}:55:4)): // pred: ^bb256 -// CHECK-NEXT: %1435 = llvm.inttoptr %1432 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1436 = llvm.load %1435 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1437 = arith.andi %1436, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1438 = arith.shli %1437, %1433 : i256 loc(#loc16) -// CHECK-NEXT: %1439 = arith.ori %1434, %1438 : i256 loc(#loc16) -// CHECK-NEXT: %1440 = arith.addi %1432, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1441 = arith.addi %1433, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1442 = arith.addi %1431, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb256(%1442, %1440, %1441, %1439 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb258(%1443: i256 loc({{.*}}:55:4), %1444: i256 loc({{.*}}:55:4)): // pred: ^bb256 -// CHECK-NEXT: %1445 = llvm.inttoptr %1424 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1444, %1445 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1446 = arith.addi %1424, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1447 = arith.addi %1425, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1448 = arith.addi %1422, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb254(%1448, %1443, %1446, %1447 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb259(%1449: i256 loc({{.*}}:55:4), %1450: i256 loc({{.*}}:55:4), %1451: i256 loc({{.*}}:55:4)): // pred: ^bb254 -// CHECK-NEXT: %1452 = arith.cmpi ult, %1451, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1452, ^bb260(%1451, %1449, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb263 loc(#loc16) -// CHECK-NEXT: ^bb260(%1453: i256 loc({{.*}}:55:4), %1454: i256 loc({{.*}}:55:4), %1455: i256 loc({{.*}}:55:4), %1456: i256 loc({{.*}}:55:4)): // 2 preds: ^bb259, ^bb261 -// CHECK-NEXT: %1457 = arith.cmpi ult, %1453, %c5_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1457, ^bb261(%1453, %1454, %1455, %1456 : i256, i256, i256, i256), ^bb262(%1456 : i256) loc(#loc16) -// CHECK-NEXT: ^bb261(%1458: i256 loc({{.*}}:55:4), %1459: i256 loc({{.*}}:55:4), %1460: i256 loc({{.*}}:55:4), %1461: i256 loc({{.*}}:55:4)): // pred: ^bb260 -// CHECK-NEXT: %1462 = llvm.inttoptr %1459 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1463 = llvm.load %1462 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1464 = arith.andi %1463, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1465 = arith.shli %1464, %1460 : i256 loc(#loc16) -// CHECK-NEXT: %1466 = arith.ori %1461, %1465 : i256 loc(#loc16) -// CHECK-NEXT: %1467 = arith.addi %1459, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1468 = arith.addi %1460, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1469 = arith.addi %1458, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb260(%1469, %1467, %1468, %1466 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb262(%1470: i256 loc({{.*}}:55:4)): // pred: ^bb260 -// CHECK-NEXT: %1471 = llvm.inttoptr %1450 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1470, %1471 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb263 loc(#loc16) -// CHECK-NEXT: ^bb263: // 2 preds: ^bb259, ^bb262 -// CHECK-NEXT: %1472 = arith.addi %1, %c704_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1473 = llvm.inttoptr %1472 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1474 = llvm.load %1473 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1475 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1474, %1475 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1476 = arith.addi %1, %c736_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1477 = llvm.inttoptr %1476 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1478 = llvm.load %1477 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1479 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1478, %1479 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1480 = arith.addi %1, %c768_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1481 = llvm.inttoptr %1480 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1482 = llvm.load %1481 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1483 = llvm.inttoptr %1482 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1484 = llvm.load %1483 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1485 = arith.addi %1482, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1486 = arith.cmpi ugt, %1484, %c18446744073709551615_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1486, ^bb264, ^bb265 loc(#loc16) -// CHECK-NEXT: ^bb264: // pred: ^bb263 -// CHECK-NEXT: %1487 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1487 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1488 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c65_i256, %1488 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1489 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: "llvm.intrcall"(%1489, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc16) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc16) -// CHECK-NEXT: cf.br ^bb265 loc(#loc16) -// CHECK-NEXT: ^bb265: // 2 preds: ^bb263, ^bb264 -// CHECK-NEXT: %1490 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1491 = llvm.load %1490 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %1492 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1484, %1492 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1493 = arith.cmpi ult, %1484, %1491 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1493, ^bb266, ^bb269 loc(#loc16) -// CHECK-NEXT: ^bb266: // pred: ^bb265 -// CHECK-NEXT: %1494 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c55_i256, %1494 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1495 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1496 = "llvm.intrcall"(%1495, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: %1497 = arith.addi %1496, %1484 : i256 loc(#loc16) -// CHECK-NEXT: %1498 = arith.addi %1496, %1491 : i256 loc(#loc16) -// CHECK-NEXT: %1499 = arith.subi %1498, %1497 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb267(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb267(%1500: i256 loc({{.*}}:55:4)): // 2 preds: ^bb266, ^bb268 -// CHECK-NEXT: %1501 = arith.cmpi ult, %1500, %1499 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1501, ^bb268(%1500 : i256), ^bb269 loc(#loc16) -// CHECK-NEXT: ^bb268(%1502: i256 loc({{.*}}:55:4)): // pred: ^bb267 -// CHECK-NEXT: %1503 = arith.addi %1497, %1502 : i256 loc(#loc16) -// CHECK-NEXT: %1504 = llvm.inttoptr %1503 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %c0_i256, %1504 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1505 = arith.addi %1502, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb267(%1505 : i256) loc(#loc16) -// CHECK-NEXT: ^bb269: // 2 preds: ^bb265, ^bb267 -// CHECK-NEXT: %1506 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: llvm.store %c55_i256, %1506 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1507 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1508 = "llvm.intrcall"(%1507, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb270(%c0_i256 : i256) loc(#loc16) -// CHECK-NEXT: ^bb270(%1509: i256 loc({{.*}}:55:4)): // 2 preds: ^bb269, ^bb271 -// CHECK-NEXT: %1510 = arith.cmpi ult, %1509, %1484 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1510, ^bb271(%1509 : i256), ^bb272 loc(#loc16) -// CHECK-NEXT: ^bb271(%1511: i256 loc({{.*}}:55:4)): // pred: ^bb270 -// CHECK-NEXT: %1512 = arith.muli %1511, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1513 = arith.addi %1485, %1512 : i256 loc(#loc16) -// CHECK-NEXT: %1514 = arith.addi %1508, %1511 : i256 loc(#loc16) -// CHECK-NEXT: %1515 = llvm.inttoptr %1513 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1516 = llvm.load %1515 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1517 = arith.andi %1516, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1518 = llvm.inttoptr %1514 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1517, %1518 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1519 = arith.addi %1511, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb270(%1519 : i256) loc(#loc16) -// CHECK-NEXT: ^bb272: // pred: ^bb270 -// CHECK-NEXT: %1520 = arith.addi %1, %c800_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1521 = llvm.inttoptr %1520 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1522 = llvm.load %1521 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1523 = arith.andi %1522, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1524 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1525 = llvm.load %1524 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc16) -// CHECK-NEXT: %1526 = arith.andi %1525, %c-256_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1527 = arith.ori %1526, %1523 : i256 loc(#loc16) -// CHECK-NEXT: %1528 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1527, %1528 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1529 = arith.addi %1, %c832_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1530 = llvm.inttoptr %1529 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1531 = llvm.load %1530 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb273(%c0_i256, %1531, %c57_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb273(%1532: i256 loc({{.*}}:55:4), %1533: i256 loc({{.*}}:55:4), %1534: i256 loc({{.*}}:55:4), %1535: i256 loc({{.*}}:55:4)): // 2 preds: ^bb272, ^bb277 -// CHECK-NEXT: %1536 = arith.cmpi ult, %1532, %c2_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1536, ^bb274(%1532, %1533, %1534, %1535 : i256, i256, i256, i256), ^bb278(%1533, %1534, %1535 : i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb274(%1537: i256 loc({{.*}}:55:4), %1538: i256 loc({{.*}}:55:4), %1539: i256 loc({{.*}}:55:4), %1540: i256 loc({{.*}}:55:4)): // pred: ^bb273 -// CHECK-NEXT: cf.br ^bb275(%c0_i256, %1538, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb275(%1541: i256 loc({{.*}}:55:4), %1542: i256 loc({{.*}}:55:4), %1543: i256 loc({{.*}}:55:4), %1544: i256 loc({{.*}}:55:4)): // 2 preds: ^bb274, ^bb276 -// CHECK-NEXT: %1545 = arith.cmpi ult, %1541, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1545, ^bb276(%1541, %1542, %1543, %1544 : i256, i256, i256, i256), ^bb277(%1542, %1544 : i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb276(%1546: i256 loc({{.*}}:55:4), %1547: i256 loc({{.*}}:55:4), %1548: i256 loc({{.*}}:55:4), %1549: i256 loc({{.*}}:55:4)): // pred: ^bb275 -// CHECK-NEXT: %1550 = llvm.inttoptr %1547 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1551 = llvm.load %1550 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1552 = arith.andi %1551, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1553 = arith.shli %1552, %1548 : i256 loc(#loc16) -// CHECK-NEXT: %1554 = arith.ori %1549, %1553 : i256 loc(#loc16) -// CHECK-NEXT: %1555 = arith.addi %1547, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1556 = arith.addi %1548, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1557 = arith.addi %1546, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb275(%1557, %1555, %1556, %1554 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb277(%1558: i256 loc({{.*}}:55:4), %1559: i256 loc({{.*}}:55:4)): // pred: ^bb275 -// CHECK-NEXT: %1560 = llvm.inttoptr %1539 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1559, %1560 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: %1561 = arith.addi %1539, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1562 = arith.addi %1540, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1563 = arith.addi %1537, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb273(%1563, %1558, %1561, %1562 : i256, i256, i256, i256) loc(#loc16) -// CHECK-NEXT: ^bb278(%1564: i256 loc({{.*}}:55:4), %1565: i256 loc({{.*}}:55:4), %1566: i256 loc({{.*}}:55:4)): // pred: ^bb273 -// CHECK-NEXT: %1567 = arith.cmpi ult, %1566, %c33_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1567, ^bb279(%1566, %1564, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb282 loc(#loc16) -// CHECK-NEXT: ^bb279(%1568: i256 loc({{.*}}:55:4), %1569: i256 loc({{.*}}:55:4), %1570: i256 loc({{.*}}:55:4), %1571: i256 loc({{.*}}:55:4)): // 2 preds: ^bb278, ^bb280 -// CHECK-NEXT: %1572 = arith.cmpi ult, %1568, %c33_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.cond_br %1572, ^bb280(%1568, %1569, %1570, %1571 : i256, i256, i256, i256), ^bb281(%1571 : i256) loc(#loc16) -// CHECK-NEXT: ^bb280(%1573: i256 loc({{.*}}:55:4), %1574: i256 loc({{.*}}:55:4), %1575: i256 loc({{.*}}:55:4), %1576: i256 loc({{.*}}:55:4)): // pred: ^bb279 -// CHECK-NEXT: %1577 = llvm.inttoptr %1574 : i256 to !llvm.ptr<1> loc(#loc16) -// CHECK-NEXT: %1578 = llvm.load %1577 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc16) -// CHECK-NEXT: %1579 = arith.andi %1578, %c255_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1580 = arith.shli %1579, %1575 : i256 loc(#loc16) -// CHECK-NEXT: %1581 = arith.ori %1576, %1580 : i256 loc(#loc16) -// CHECK-NEXT: %1582 = arith.addi %1574, %c32_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1583 = arith.addi %1575, %c8_i256 : i256 loc(#loc16) -// CHECK-NEXT: %1584 = arith.addi %1573, %c1_i256 : i256 loc(#loc16) -// CHECK-NEXT: cf.br ^bb279(%1584, %1582, %1583, %1581 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc16) -// CHECK-NEXT: ^bb281(%1585: i256 loc({{.*}}:55:4)): // pred: ^bb279 -// CHECK-NEXT: %1586 = llvm.inttoptr %1565 : i256 to !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: llvm.store %1585, %1586 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc16) -// CHECK-NEXT: cf.br ^bb282 loc(#loc16) -// CHECK-NEXT: ^bb282: // 2 preds: ^bb278, ^bb281 -// CHECK-NEXT: return loc(#loc13) -// CHECK-NEXT: } loc(#loc13) +// CHECK-NEXT: %1096 = arith.addi %1, %c576_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1097 = llvm.inttoptr %1096 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1098 = llvm.load %1097 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb198(%c0_i256, %1098, %c47_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb198(%1099: i256 loc({{.*}}:55:4), %1100: i256 loc({{.*}}:55:4), %1101: i256 loc({{.*}}:55:4), %1102: i256 loc({{.*}}:55:4)): // 2 preds: ^bb197, ^bb202 +// CHECK-NEXT: %1103 = arith.cmpi ult, %1099, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1103, ^bb199(%1099, %1100, %1101, %1102 : i256, i256, i256, i256), ^bb203(%1100, %1101, %1102 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb199(%1104: i256 loc({{.*}}:55:4), %1105: i256 loc({{.*}}:55:4), %1106: i256 loc({{.*}}:55:4), %1107: i256 loc({{.*}}:55:4)): // pred: ^bb198 +// CHECK-NEXT: cf.br ^bb200(%c0_i256, %1105, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb200(%1108: i256 loc({{.*}}:55:4), %1109: i256 loc({{.*}}:55:4), %1110: i256 loc({{.*}}:55:4), %1111: i256 loc({{.*}}:55:4)): // 2 preds: ^bb199, ^bb201 +// CHECK-NEXT: %1112 = arith.cmpi ult, %1108, %c16_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1112, ^bb201(%1108, %1109, %1110, %1111 : i256, i256, i256, i256), ^bb202(%1109, %1111 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb201(%1113: i256 loc({{.*}}:55:4), %1114: i256 loc({{.*}}:55:4), %1115: i256 loc({{.*}}:55:4), %1116: i256 loc({{.*}}:55:4)): // pred: ^bb200 +// CHECK-NEXT: %1117 = llvm.inttoptr %1114 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1118 = llvm.load %1117 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1119 = arith.andi %1118, %c65535_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1120 = arith.shli %1119, %1115 : i256 loc(#loc4) +// CHECK-NEXT: %1121 = arith.ori %1116, %1120 : i256 loc(#loc4) +// CHECK-NEXT: %1122 = arith.addi %1114, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1123 = arith.addi %1115, %c16_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1124 = arith.addi %1113, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb200(%1124, %1122, %1123, %1121 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb202(%1125: i256 loc({{.*}}:55:4), %1126: i256 loc({{.*}}:55:4)): // pred: ^bb200 +// CHECK-NEXT: %1127 = llvm.inttoptr %1106 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1126, %1127 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1128 = arith.addi %1106, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1129 = arith.addi %1107, %c16_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1130 = arith.addi %1104, %c16_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb198(%1130, %1125, %1128, %1129 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb203(%1131: i256 loc({{.*}}:55:4), %1132: i256 loc({{.*}}:55:4), %1133: i256 loc({{.*}}:55:4)): // pred: ^bb198 +// CHECK-NEXT: %1134 = arith.cmpi ult, %1133, %c9_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1134, ^bb204(%1133, %1131, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb207 loc(#loc4) +// CHECK-NEXT: ^bb204(%1135: i256 loc({{.*}}:55:4), %1136: i256 loc({{.*}}:55:4), %1137: i256 loc({{.*}}:55:4), %1138: i256 loc({{.*}}:55:4)): // 2 preds: ^bb203, ^bb205 +// CHECK-NEXT: %1139 = arith.cmpi ult, %1135, %c9_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1139, ^bb205(%1135, %1136, %1137, %1138 : i256, i256, i256, i256), ^bb206(%1138 : i256) loc(#loc4) +// CHECK-NEXT: ^bb205(%1140: i256 loc({{.*}}:55:4), %1141: i256 loc({{.*}}:55:4), %1142: i256 loc({{.*}}:55:4), %1143: i256 loc({{.*}}:55:4)): // pred: ^bb204 +// CHECK-NEXT: %1144 = llvm.inttoptr %1141 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1145 = llvm.load %1144 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1146 = arith.andi %1145, %c65535_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1147 = arith.shli %1146, %1142 : i256 loc(#loc4) +// CHECK-NEXT: %1148 = arith.ori %1143, %1147 : i256 loc(#loc4) +// CHECK-NEXT: %1149 = arith.addi %1141, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1150 = arith.addi %1142, %c16_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1151 = arith.addi %1140, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb204(%1151, %1149, %1150, %1148 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb206(%1152: i256 loc({{.*}}:55:4)): // pred: ^bb204 +// CHECK-NEXT: %1153 = llvm.inttoptr %1132 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1152, %1153 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb207 loc(#loc4) +// CHECK-NEXT: ^bb207: // 2 preds: ^bb203, ^bb206 +// CHECK-NEXT: %1154 = arith.addi %1, %c608_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1155 = llvm.inttoptr %1154 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1156 = llvm.load %1155 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb208(%c0_i256, %1156, %c48_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb208(%1157: i256 loc({{.*}}:55:4), %1158: i256 loc({{.*}}:55:4), %1159: i256 loc({{.*}}:55:4), %1160: i256 loc({{.*}}:55:4)): // 2 preds: ^bb207, ^bb212 +// CHECK-NEXT: %1161 = arith.cmpi ult, %1157, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1161, ^bb209(%1157, %1158, %1159, %1160 : i256, i256, i256, i256), ^bb213(%1158, %1159, %1160 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb209(%1162: i256 loc({{.*}}:55:4), %1163: i256 loc({{.*}}:55:4), %1164: i256 loc({{.*}}:55:4), %1165: i256 loc({{.*}}:55:4)): // pred: ^bb208 +// CHECK-NEXT: cf.br ^bb210(%c0_i256, %1163, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb210(%1166: i256 loc({{.*}}:55:4), %1167: i256 loc({{.*}}:55:4), %1168: i256 loc({{.*}}:55:4), %1169: i256 loc({{.*}}:55:4)): // 2 preds: ^bb209, ^bb211 +// CHECK-NEXT: %1170 = arith.cmpi ult, %1166, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1170, ^bb211(%1166, %1167, %1168, %1169 : i256, i256, i256, i256), ^bb212(%1167, %1169 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb211(%1171: i256 loc({{.*}}:55:4), %1172: i256 loc({{.*}}:55:4), %1173: i256 loc({{.*}}:55:4), %1174: i256 loc({{.*}}:55:4)): // pred: ^bb210 +// CHECK-NEXT: %1175 = llvm.inttoptr %1172 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1176 = llvm.load %1175 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1177 = arith.andi %1176, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1178 = arith.shli %1177, %1173 : i256 loc(#loc4) +// CHECK-NEXT: %1179 = arith.ori %1174, %1178 : i256 loc(#loc4) +// CHECK-NEXT: %1180 = arith.addi %1172, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1181 = arith.addi %1173, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1182 = arith.addi %1171, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb210(%1182, %1180, %1181, %1179 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb212(%1183: i256 loc({{.*}}:55:4), %1184: i256 loc({{.*}}:55:4)): // pred: ^bb210 +// CHECK-NEXT: %1185 = llvm.inttoptr %1164 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1184, %1185 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1186 = arith.addi %1164, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1187 = arith.addi %1165, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1188 = arith.addi %1162, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb208(%1188, %1183, %1186, %1187 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb213(%1189: i256 loc({{.*}}:55:4), %1190: i256 loc({{.*}}:55:4), %1191: i256 loc({{.*}}:55:4)): // pred: ^bb208 +// CHECK-NEXT: %1192 = arith.cmpi ult, %1191, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1192, ^bb214(%1191, %1189, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb217 loc(#loc4) +// CHECK-NEXT: ^bb214(%1193: i256 loc({{.*}}:55:4), %1194: i256 loc({{.*}}:55:4), %1195: i256 loc({{.*}}:55:4), %1196: i256 loc({{.*}}:55:4)): // 2 preds: ^bb213, ^bb215 +// CHECK-NEXT: %1197 = arith.cmpi ult, %1193, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1197, ^bb215(%1193, %1194, %1195, %1196 : i256, i256, i256, i256), ^bb216(%1196 : i256) loc(#loc4) +// CHECK-NEXT: ^bb215(%1198: i256 loc({{.*}}:55:4), %1199: i256 loc({{.*}}:55:4), %1200: i256 loc({{.*}}:55:4), %1201: i256 loc({{.*}}:55:4)): // pred: ^bb214 +// CHECK-NEXT: %1202 = llvm.inttoptr %1199 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1203 = llvm.load %1202 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1204 = arith.andi %1203, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1205 = arith.shli %1204, %1200 : i256 loc(#loc4) +// CHECK-NEXT: %1206 = arith.ori %1201, %1205 : i256 loc(#loc4) +// CHECK-NEXT: %1207 = arith.addi %1199, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1208 = arith.addi %1200, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1209 = arith.addi %1198, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb214(%1209, %1207, %1208, %1206 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb216(%1210: i256 loc({{.*}}:55:4)): // pred: ^bb214 +// CHECK-NEXT: %1211 = llvm.inttoptr %1190 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1210, %1211 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb217 loc(#loc4) +// CHECK-NEXT: ^bb217: // 2 preds: ^bb213, ^bb216 +// CHECK-NEXT: %1212 = arith.addi %1, %c640_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1213 = llvm.inttoptr %1212 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1214 = llvm.load %1213 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb218(%c0_i256, %1214, %c50_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb218(%1215: i256 loc({{.*}}:55:4), %1216: i256 loc({{.*}}:55:4), %1217: i256 loc({{.*}}:55:4), %1218: i256 loc({{.*}}:55:4)): // 2 preds: ^bb217, ^bb222 +// CHECK-NEXT: %1219 = arith.cmpi ult, %1215, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1219, ^bb219(%1215, %1216, %1217, %1218 : i256, i256, i256, i256), ^bb223(%1216, %1217, %1218 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb219(%1220: i256 loc({{.*}}:55:4), %1221: i256 loc({{.*}}:55:4), %1222: i256 loc({{.*}}:55:4), %1223: i256 loc({{.*}}:55:4)): // pred: ^bb218 +// CHECK-NEXT: cf.br ^bb220(%c0_i256, %1221, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb220(%1224: i256 loc({{.*}}:55:4), %1225: i256 loc({{.*}}:55:4), %1226: i256 loc({{.*}}:55:4), %1227: i256 loc({{.*}}:55:4)): // 2 preds: ^bb219, ^bb221 +// CHECK-NEXT: %1228 = arith.cmpi ult, %1224, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1228, ^bb221(%1224, %1225, %1226, %1227 : i256, i256, i256, i256), ^bb222(%1225, %1227 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb221(%1229: i256 loc({{.*}}:55:4), %1230: i256 loc({{.*}}:55:4), %1231: i256 loc({{.*}}:55:4), %1232: i256 loc({{.*}}:55:4)): // pred: ^bb220 +// CHECK-NEXT: %1233 = llvm.inttoptr %1230 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1234 = llvm.load %1233 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1235 = arith.andi %1234, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1236 = arith.shli %1235, %1231 : i256 loc(#loc4) +// CHECK-NEXT: %1237 = arith.ori %1232, %1236 : i256 loc(#loc4) +// CHECK-NEXT: %1238 = arith.addi %1230, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1239 = arith.addi %1231, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1240 = arith.addi %1229, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb220(%1240, %1238, %1239, %1237 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb222(%1241: i256 loc({{.*}}:55:4), %1242: i256 loc({{.*}}:55:4)): // pred: ^bb220 +// CHECK-NEXT: %1243 = llvm.inttoptr %1222 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1242, %1243 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1244 = arith.addi %1222, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1245 = arith.addi %1223, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1246 = arith.addi %1220, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb218(%1246, %1241, %1244, %1245 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb223(%1247: i256 loc({{.*}}:55:4), %1248: i256 loc({{.*}}:55:4), %1249: i256 loc({{.*}}:55:4)): // pred: ^bb218 +// CHECK-NEXT: %1250 = arith.cmpi ult, %1249, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1250, ^bb224(%1249, %1247, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb227 loc(#loc4) +// CHECK-NEXT: ^bb224(%1251: i256 loc({{.*}}:55:4), %1252: i256 loc({{.*}}:55:4), %1253: i256 loc({{.*}}:55:4), %1254: i256 loc({{.*}}:55:4)): // 2 preds: ^bb223, ^bb225 +// CHECK-NEXT: %1255 = arith.cmpi ult, %1251, %c3_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1255, ^bb225(%1251, %1252, %1253, %1254 : i256, i256, i256, i256), ^bb226(%1254 : i256) loc(#loc4) +// CHECK-NEXT: ^bb225(%1256: i256 loc({{.*}}:55:4), %1257: i256 loc({{.*}}:55:4), %1258: i256 loc({{.*}}:55:4), %1259: i256 loc({{.*}}:55:4)): // pred: ^bb224 +// CHECK-NEXT: %1260 = llvm.inttoptr %1257 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1261 = llvm.load %1260 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1262 = arith.andi %1261, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1263 = arith.shli %1262, %1258 : i256 loc(#loc4) +// CHECK-NEXT: %1264 = arith.ori %1259, %1263 : i256 loc(#loc4) +// CHECK-NEXT: %1265 = arith.addi %1257, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1266 = arith.addi %1258, %c128_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1267 = arith.addi %1256, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb224(%1267, %1265, %1266, %1264 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb226(%1268: i256 loc({{.*}}:55:4)): // pred: ^bb224 +// CHECK-NEXT: %1269 = llvm.inttoptr %1248 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1268, %1269 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb227 loc(#loc4) +// CHECK-NEXT: ^bb227: // 2 preds: ^bb223, ^bb226 +// CHECK-NEXT: %1270 = arith.addi %1, %c672_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1271 = llvm.inttoptr %1270 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1272 = llvm.load %1271 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb228(%c0_i256, %1272, %c52_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb228(%1273: i256 loc({{.*}}:55:4), %1274: i256 loc({{.*}}:55:4), %1275: i256 loc({{.*}}:55:4), %1276: i256 loc({{.*}}:55:4)): // 2 preds: ^bb227, ^bb232 +// CHECK-NEXT: %1277 = arith.cmpi ult, %1273, %c0_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1277, ^bb229(%1273, %1274, %1275, %1276 : i256, i256, i256, i256), ^bb233(%1274, %1275, %1276 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb229(%1278: i256 loc({{.*}}:55:4), %1279: i256 loc({{.*}}:55:4), %1280: i256 loc({{.*}}:55:4), %1281: i256 loc({{.*}}:55:4)): // pred: ^bb228 +// CHECK-NEXT: cf.br ^bb230(%c0_i256, %1279, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb230(%1282: i256 loc({{.*}}:55:4), %1283: i256 loc({{.*}}:55:4), %1284: i256 loc({{.*}}:55:4), %1285: i256 loc({{.*}}:55:4)): // 2 preds: ^bb229, ^bb231 +// CHECK-NEXT: %1286 = arith.cmpi ult, %1282, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1286, ^bb231(%1282, %1283, %1284, %1285 : i256, i256, i256, i256), ^bb232(%1283, %1285 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb231(%1287: i256 loc({{.*}}:55:4), %1288: i256 loc({{.*}}:55:4), %1289: i256 loc({{.*}}:55:4), %1290: i256 loc({{.*}}:55:4)): // pred: ^bb230 +// CHECK-NEXT: %1291 = llvm.inttoptr %1288 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1292 = llvm.load %1291 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1293 = arith.andi %1292, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1294 = arith.shli %1293, %1289 : i256 loc(#loc4) +// CHECK-NEXT: %1295 = arith.ori %1290, %1294 : i256 loc(#loc4) +// CHECK-NEXT: %1296 = arith.addi %1288, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1297 = arith.addi %1289, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1298 = arith.addi %1287, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb230(%1298, %1296, %1297, %1295 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb232(%1299: i256 loc({{.*}}:55:4), %1300: i256 loc({{.*}}:55:4)): // pred: ^bb230 +// CHECK-NEXT: %1301 = llvm.inttoptr %1280 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1300, %1301 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1302 = arith.addi %1280, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1303 = arith.addi %1281, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1304 = arith.addi %1278, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb228(%1304, %1299, %1302, %1303 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb233(%1305: i256 loc({{.*}}:55:4), %1306: i256 loc({{.*}}:55:4), %1307: i256 loc({{.*}}:55:4)): // pred: ^bb228 +// CHECK-NEXT: %1308 = arith.cmpi ult, %1307, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1308, ^bb234(%1307, %1305, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb237 loc(#loc4) +// CHECK-NEXT: ^bb234(%1309: i256 loc({{.*}}:55:4), %1310: i256 loc({{.*}}:55:4), %1311: i256 loc({{.*}}:55:4), %1312: i256 loc({{.*}}:55:4)): // 2 preds: ^bb233, ^bb235 +// CHECK-NEXT: %1313 = arith.cmpi ult, %1309, %c5_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1313, ^bb235(%1309, %1310, %1311, %1312 : i256, i256, i256, i256), ^bb236(%1312 : i256) loc(#loc4) +// CHECK-NEXT: ^bb235(%1314: i256 loc({{.*}}:55:4), %1315: i256 loc({{.*}}:55:4), %1316: i256 loc({{.*}}:55:4), %1317: i256 loc({{.*}}:55:4)): // pred: ^bb234 +// CHECK-NEXT: %1318 = llvm.inttoptr %1315 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1319 = llvm.load %1318 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1320 = arith.andi %1319, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1321 = arith.shli %1320, %1316 : i256 loc(#loc4) +// CHECK-NEXT: %1322 = arith.ori %1317, %1321 : i256 loc(#loc4) +// CHECK-NEXT: %1323 = arith.addi %1315, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1324 = arith.addi %1316, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1325 = arith.addi %1314, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb234(%1325, %1323, %1324, %1322 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb236(%1326: i256 loc({{.*}}:55:4)): // pred: ^bb234 +// CHECK-NEXT: %1327 = llvm.inttoptr %1306 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1326, %1327 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb237 loc(#loc4) +// CHECK-NEXT: ^bb237: // 2 preds: ^bb233, ^bb236 +// CHECK-NEXT: %1328 = arith.addi %1, %c704_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1329 = llvm.inttoptr %1328 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1330 = llvm.load %1329 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1331 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1330, %1331 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1332 = arith.addi %1, %c736_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1333 = llvm.inttoptr %1332 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1334 = llvm.load %1333 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1335 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1334, %1335 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1336 = arith.addi %1, %c768_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1337 = llvm.inttoptr %1336 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1338 = llvm.load %1337 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1339 = llvm.inttoptr %1338 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1340 = llvm.load %1339 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1341 = arith.addi %1338, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1342 = arith.cmpi ugt, %1340, %c18446744073709551615_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1342, ^bb238, ^bb239 loc(#loc4) +// CHECK-NEXT: ^bb238: // pred: ^bb237 +// CHECK-NEXT: %1343 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1343 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1344 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c65_i256, %1344 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1345 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: "llvm.intrcall"(%1345, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc4) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc4) +// CHECK-NEXT: cf.br ^bb239 loc(#loc4) +// CHECK-NEXT: ^bb239: // 2 preds: ^bb237, ^bb238 +// CHECK-NEXT: %1346 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1347 = llvm.load %1346 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %1348 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1340, %1348 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1349 = arith.cmpi ult, %1340, %1347 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1349, ^bb240, ^bb243 loc(#loc4) +// CHECK-NEXT: ^bb240: // pred: ^bb239 +// CHECK-NEXT: %1350 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c55_i256, %1350 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1351 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1352 = "llvm.intrcall"(%1351, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: %1353 = arith.addi %1352, %1340 : i256 loc(#loc4) +// CHECK-NEXT: %1354 = arith.addi %1352, %1347 : i256 loc(#loc4) +// CHECK-NEXT: %1355 = arith.subi %1354, %1353 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb241(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb241(%1356: i256 loc({{.*}}:55:4)): // 2 preds: ^bb240, ^bb242 +// CHECK-NEXT: %1357 = arith.cmpi ult, %1356, %1355 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1357, ^bb242(%1356 : i256), ^bb243 loc(#loc4) +// CHECK-NEXT: ^bb242(%1358: i256 loc({{.*}}:55:4)): // pred: ^bb241 +// CHECK-NEXT: %1359 = arith.addi %1353, %1358 : i256 loc(#loc4) +// CHECK-NEXT: %1360 = llvm.inttoptr %1359 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %c0_i256, %1360 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1361 = arith.addi %1358, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb241(%1361 : i256) loc(#loc4) +// CHECK-NEXT: ^bb243: // 2 preds: ^bb239, ^bb241 +// CHECK-NEXT: %1362 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: llvm.store %c55_i256, %1362 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1363 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1364 = "llvm.intrcall"(%1363, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb244(%c0_i256 : i256) loc(#loc4) +// CHECK-NEXT: ^bb244(%1365: i256 loc({{.*}}:55:4)): // 2 preds: ^bb243, ^bb245 +// CHECK-NEXT: %1366 = arith.cmpi ult, %1365, %1340 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1366, ^bb245(%1365 : i256), ^bb246 loc(#loc4) +// CHECK-NEXT: ^bb245(%1367: i256 loc({{.*}}:55:4)): // pred: ^bb244 +// CHECK-NEXT: %1368 = arith.muli %1367, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1369 = arith.addi %1341, %1368 : i256 loc(#loc4) +// CHECK-NEXT: %1370 = arith.addi %1364, %1367 : i256 loc(#loc4) +// CHECK-NEXT: %1371 = llvm.inttoptr %1369 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1372 = llvm.load %1371 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1373 = arith.andi %1372, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1374 = llvm.inttoptr %1370 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1373, %1374 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1375 = arith.addi %1367, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb244(%1375 : i256) loc(#loc4) +// CHECK-NEXT: ^bb246: // pred: ^bb244 +// CHECK-NEXT: %1376 = arith.addi %1, %c800_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1377 = llvm.inttoptr %1376 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1378 = llvm.load %1377 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1379 = arith.andi %1378, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1380 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1381 = llvm.load %1380 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc4) +// CHECK-NEXT: %1382 = arith.andi %1381, %c-256_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1383 = arith.ori %1382, %1379 : i256 loc(#loc4) +// CHECK-NEXT: %1384 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1383, %1384 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1385 = arith.addi %1, %c832_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1386 = llvm.inttoptr %1385 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1387 = llvm.load %1386 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb247(%c0_i256, %1387, %c57_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb247(%1388: i256 loc({{.*}}:55:4), %1389: i256 loc({{.*}}:55:4), %1390: i256 loc({{.*}}:55:4), %1391: i256 loc({{.*}}:55:4)): // 2 preds: ^bb246, ^bb251 +// CHECK-NEXT: %1392 = arith.cmpi ult, %1388, %c2_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1392, ^bb248(%1388, %1389, %1390, %1391 : i256, i256, i256, i256), ^bb252(%1389, %1390, %1391 : i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb248(%1393: i256 loc({{.*}}:55:4), %1394: i256 loc({{.*}}:55:4), %1395: i256 loc({{.*}}:55:4), %1396: i256 loc({{.*}}:55:4)): // pred: ^bb247 +// CHECK-NEXT: cf.br ^bb249(%c0_i256, %1394, %c0_i256, %c0_i256 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb249(%1397: i256 loc({{.*}}:55:4), %1398: i256 loc({{.*}}:55:4), %1399: i256 loc({{.*}}:55:4), %1400: i256 loc({{.*}}:55:4)): // 2 preds: ^bb248, ^bb250 +// CHECK-NEXT: %1401 = arith.cmpi ult, %1397, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1401, ^bb250(%1397, %1398, %1399, %1400 : i256, i256, i256, i256), ^bb251(%1398, %1400 : i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb250(%1402: i256 loc({{.*}}:55:4), %1403: i256 loc({{.*}}:55:4), %1404: i256 loc({{.*}}:55:4), %1405: i256 loc({{.*}}:55:4)): // pred: ^bb249 +// CHECK-NEXT: %1406 = llvm.inttoptr %1403 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1407 = llvm.load %1406 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1408 = arith.andi %1407, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1409 = arith.shli %1408, %1404 : i256 loc(#loc4) +// CHECK-NEXT: %1410 = arith.ori %1405, %1409 : i256 loc(#loc4) +// CHECK-NEXT: %1411 = arith.addi %1403, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1412 = arith.addi %1404, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1413 = arith.addi %1402, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb249(%1413, %1411, %1412, %1410 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb251(%1414: i256 loc({{.*}}:55:4), %1415: i256 loc({{.*}}:55:4)): // pred: ^bb249 +// CHECK-NEXT: %1416 = llvm.inttoptr %1395 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1415, %1416 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: %1417 = arith.addi %1395, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1418 = arith.addi %1396, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1419 = arith.addi %1393, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb247(%1419, %1414, %1417, %1418 : i256, i256, i256, i256) loc(#loc4) +// CHECK-NEXT: ^bb252(%1420: i256 loc({{.*}}:55:4), %1421: i256 loc({{.*}}:55:4), %1422: i256 loc({{.*}}:55:4)): // pred: ^bb247 +// CHECK-NEXT: %1423 = arith.cmpi ult, %1422, %c33_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1423, ^bb253(%1422, %1420, %c0_i256, %c0_i256 : i256, i256, i256, i256), ^bb256 loc(#loc4) +// CHECK-NEXT: ^bb253(%1424: i256 loc({{.*}}:55:4), %1425: i256 loc({{.*}}:55:4), %1426: i256 loc({{.*}}:55:4), %1427: i256 loc({{.*}}:55:4)): // 2 preds: ^bb252, ^bb254 +// CHECK-NEXT: %1428 = arith.cmpi ult, %1424, %c33_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.cond_br %1428, ^bb254(%1424, %1425, %1426, %1427 : i256, i256, i256, i256), ^bb255(%1427 : i256) loc(#loc4) +// CHECK-NEXT: ^bb254(%1429: i256 loc({{.*}}:55:4), %1430: i256 loc({{.*}}:55:4), %1431: i256 loc({{.*}}:55:4), %1432: i256 loc({{.*}}:55:4)): // pred: ^bb253 +// CHECK-NEXT: %1433 = llvm.inttoptr %1430 : i256 to !llvm.ptr<1> loc(#loc4) +// CHECK-NEXT: %1434 = llvm.load %1433 {alignment = 1 : i64} : !llvm.ptr<1> -> i256 loc(#loc4) +// CHECK-NEXT: %1435 = arith.andi %1434, %c255_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1436 = arith.shli %1435, %1431 : i256 loc(#loc4) +// CHECK-NEXT: %1437 = arith.ori %1432, %1436 : i256 loc(#loc4) +// CHECK-NEXT: %1438 = arith.addi %1430, %c32_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1439 = arith.addi %1431, %c8_i256 : i256 loc(#loc4) +// CHECK-NEXT: %1440 = arith.addi %1429, %c1_i256 : i256 loc(#loc4) +// CHECK-NEXT: cf.br ^bb253(%1440, %1438, %1439, %1437 : i256, i256, i256, i256) {loop_annotation = #loop_annotation} loc(#loc4) +// CHECK-NEXT: ^bb255(%1441: i256 loc({{.*}}:55:4)): // pred: ^bb253 +// CHECK-NEXT: %1442 = llvm.inttoptr %1421 : i256 to !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: llvm.store %1441, %1442 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc4) +// CHECK-NEXT: cf.br ^bb256 loc(#loc4) +// CHECK-NEXT: ^bb256: // 2 preds: ^bb252, ^bb255 +// CHECK-NEXT: return loc(#loc15) +// CHECK-NEXT: } loc(#loc15) // CHECK-NEXT: func.func @f1_126() attributes {llvm.linkage = #llvm.linkage, passthrough = ["nofree", "null_pointer_is_valid"]} { // CHECK-NEXT: %c58_i256 = arith.constant 58 : i256 loc(#loc) // CHECK-NEXT: %c117_i256 = arith.constant 117 : i256 loc(#loc) @@ -13454,9 +13375,6 @@ contract Test { // CHECK-NEXT: %c232_i256 = arith.constant 232 : i256 loc(#loc) // CHECK-NEXT: %c224_i256 = arith.constant 224 : i256 loc(#loc) // CHECK-NEXT: %c26959946667150639794667015087019630673637144422540572481103610249215_i256 = arith.constant 26959946667150639794667015087019630673637144422540572481103610249215 : i256 loc(#loc) -// CHECK-NEXT: %c-32_i256 = arith.constant -32 : i256 loc(#loc) -// CHECK-NEXT: %c34_i256 = arith.constant 34 : i256 loc(#loc) -// CHECK-NEXT: %c127_i256 = arith.constant 127 : i256 loc(#loc) // CHECK-NEXT: %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 = arith.constant -6901746346790563787434755862277025452451108972170386555162524223799296 : i256 loc(#loc) // CHECK-NEXT: %c4294967295_i256 = arith.constant 4294967295 : i256 loc(#loc) // CHECK-NEXT: %c200_i256 = arith.constant 200 : i256 loc(#loc) @@ -13485,1615 +13403,1363 @@ contract Test { // CHECK-NEXT: %c8_i256 = arith.constant 8 : i256 loc(#loc) // CHECK-NEXT: %c255_i256 = arith.constant 255 : i256 loc(#loc) // CHECK-NEXT: %c0_i256 = arith.constant 0 : i256 loc(#loc) -// CHECK-NEXT: %c59_i256 = arith.constant 59 : i256 loc(#loc18) -// CHECK-NEXT: %0 = llvm.inttoptr %c59_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %2 = arith.andi %1, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %3 = arith.shrui %1, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %4 = arith.andi %3, %c5708990770823839524233143877797980545530986495_i256 : i256 loc(#loc19) -// CHECK-NEXT: %5 = arith.shli %4, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %6 = arith.ori %2, %5 : i256 loc(#loc19) -// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %9 = arith.andi %8, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc19) -// CHECK-NEXT: %10 = arith.ori %9, %6 : i256 loc(#loc19) -// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %10, %11 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: %c59_i256 = arith.constant 59 : i256 loc(#loc19) +// CHECK-NEXT: %0 = llvm.inttoptr %c59_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %1 = llvm.load %0 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %2 = arith.andi %1, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %3 = arith.shrui %1, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %4 = arith.andi %3, %c5708990770823839524233143877797980545530986495_i256 : i256 loc(#loc5) +// CHECK-NEXT: %5 = arith.shli %4, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %6 = arith.ori %2, %5 : i256 loc(#loc5) +// CHECK-NEXT: %7 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %8 = llvm.load %7 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %9 = arith.andi %8, %c-1461501637330902918203684832716283019655932542976_i256 : i256 loc(#loc5) +// CHECK-NEXT: %10 = arith.ori %9, %6 : i256 loc(#loc5) +// CHECK-NEXT: %11 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %10, %11 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb1(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb1(%12: i256 loc({{.*}}:51:4)): // 2 preds: ^bb0, ^bb2 -// CHECK-NEXT: %13 = arith.cmpi ult, %12, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %13, ^bb2(%12 : i256), ^bb3 loc(#loc19) +// CHECK-NEXT: %13 = arith.cmpi ult, %12, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %13, ^bb2(%12 : i256), ^bb3 loc(#loc5) // CHECK-NEXT: ^bb2(%14: i256 loc({{.*}}:51:4)): // pred: ^bb1 -// CHECK-NEXT: %15 = arith.addi %14, %c60_i256 : i256 loc(#loc19) -// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %17 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %18 = llvm.load %17 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %19 = arith.andi %18, %c105312291668557186697918027683670432318895095400549111254310977535_i256 : i256 loc(#loc19) -// CHECK-NEXT: %20 = llvm.inttoptr %16 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %19, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %21 = arith.addi %14, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb1(%21 : i256) loc(#loc19) +// CHECK-NEXT: %15 = arith.addi %14, %c60_i256 : i256 loc(#loc5) +// CHECK-NEXT: %16 = arith.addi %14, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %17 = llvm.inttoptr %15 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %18 = llvm.load %17 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %19 = arith.andi %18, %c105312291668557186697918027683670432318895095400549111254310977535_i256 : i256 loc(#loc5) +// CHECK-NEXT: %20 = llvm.inttoptr %16 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %19, %20 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %21 = arith.addi %14, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb1(%21 : i256) loc(#loc5) // CHECK-NEXT: ^bb3: // pred: ^bb1 -// CHECK-NEXT: %22 = llvm.inttoptr %c62_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %24 = arith.andi %23, %c4722366482869645213695_i256 : i256 loc(#loc19) -// CHECK-NEXT: %25 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %24, %25 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: %22 = llvm.inttoptr %c62_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %23 = llvm.load %22 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %24 = arith.andi %23, %c4722366482869645213695_i256 : i256 loc(#loc5) +// CHECK-NEXT: %25 = llvm.inttoptr %c3_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %24, %25 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb4(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb4(%26: i256 loc({{.*}}:51:4)): // 2 preds: ^bb3, ^bb38 -// CHECK-NEXT: %27 = arith.cmpi ult, %26, %c3_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %27, ^bb5(%26 : i256), ^bb39 loc(#loc19) +// CHECK-NEXT: %27 = arith.cmpi ult, %26, %c3_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %27, ^bb5(%26 : i256), ^bb39 loc(#loc5) // CHECK-NEXT: ^bb5(%28: i256 loc({{.*}}:51:4)): // pred: ^bb4 -// CHECK-NEXT: %29 = arith.muli %28, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: %30 = arith.addi %29, %c63_i256 : i256 loc(#loc19) -// CHECK-NEXT: %31 = arith.muli %28, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: %32 = arith.addi %31, %c4_i256 : i256 loc(#loc19) -// CHECK-NEXT: %33 = arith.cmpi ne, %30, %32 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %33, ^bb6, ^bb38(%28 : i256) loc(#loc19) +// CHECK-NEXT: %29 = arith.muli %28, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: %30 = arith.addi %29, %c63_i256 : i256 loc(#loc5) +// CHECK-NEXT: %31 = arith.muli %28, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: %32 = arith.addi %31, %c4_i256 : i256 loc(#loc5) +// CHECK-NEXT: %33 = arith.cmpi ne, %30, %32 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %33, ^bb6, ^bb38(%28 : i256) loc(#loc5) // CHECK-NEXT: ^bb6: // pred: ^bb5 -// CHECK-NEXT: %34 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %36 = arith.andi %35, %c4722366482869645213695_i256 : i256 loc(#loc19) -// CHECK-NEXT: %37 = arith.shrui %35, %c72_i256 : i256 loc(#loc19) -// CHECK-NEXT: %38 = arith.andi %37, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %39 = arith.shli %38, %c72_i256 : i256 loc(#loc19) -// CHECK-NEXT: %40 = arith.ori %36, %39 : i256 loc(#loc19) -// CHECK-NEXT: %41 = llvm.inttoptr %32 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %42 = llvm.load %41 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %43 = arith.andi %42, %c-1208925819614629174706176_i256 : i256 loc(#loc19) -// CHECK-NEXT: %44 = arith.ori %43, %40 : i256 loc(#loc19) -// CHECK-NEXT: %45 = llvm.inttoptr %32 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %46 = arith.addi %29, %c64_i256 : i256 loc(#loc19) -// CHECK-NEXT: %47 = arith.addi %31, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: %48 = arith.cmpi ne, %46, %47 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %48, ^bb7, ^bb34 loc(#loc19) +// CHECK-NEXT: %34 = llvm.inttoptr %30 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %35 = llvm.load %34 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %36 = arith.andi %35, %c4722366482869645213695_i256 : i256 loc(#loc5) +// CHECK-NEXT: %37 = arith.shrui %35, %c72_i256 : i256 loc(#loc5) +// CHECK-NEXT: %38 = arith.andi %37, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %39 = arith.shli %38, %c72_i256 : i256 loc(#loc5) +// CHECK-NEXT: %40 = arith.ori %36, %39 : i256 loc(#loc5) +// CHECK-NEXT: %41 = llvm.inttoptr %32 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %42 = llvm.load %41 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %43 = arith.andi %42, %c-1208925819614629174706176_i256 : i256 loc(#loc5) +// CHECK-NEXT: %44 = arith.ori %43, %40 : i256 loc(#loc5) +// CHECK-NEXT: %45 = llvm.inttoptr %32 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %44, %45 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %46 = arith.addi %29, %c64_i256 : i256 loc(#loc5) +// CHECK-NEXT: %47 = arith.addi %31, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: %48 = arith.cmpi ne, %46, %47 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %48, ^bb7, ^bb34 loc(#loc5) // CHECK-NEXT: ^bb7: // pred: ^bb6 -// CHECK-NEXT: %49 = llvm.inttoptr %46 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %50 = llvm.load %49 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %51 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %46, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %53 = "llvm.intrcall"(%52, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %54 = arith.cmpi ugt, %50, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %54, ^bb8, ^bb9 loc(#loc19) +// CHECK-NEXT: %49 = llvm.inttoptr %46 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %50 = llvm.load %49 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %51 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %46, %51 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %52 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %53 = "llvm.intrcall"(%52, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %54 = arith.cmpi ugt, %50, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %54, ^bb8, ^bb9 loc(#loc5) // CHECK-NEXT: ^bb8: // pred: ^bb7 -// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %56 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %57 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%57, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb9 loc(#loc19) +// CHECK-NEXT: %55 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %55 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %56 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %56 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %57 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%57, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb9 loc(#loc5) // CHECK-NEXT: ^bb9: // 2 preds: ^bb7, ^bb8 -// CHECK-NEXT: %58 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %59 = llvm.load %58 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %60 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %50, %60 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %61 = arith.cmpi ult, %50, %59 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %61, ^bb10, ^bb17 loc(#loc19) +// CHECK-NEXT: %58 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %59 = llvm.load %58 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %60 = llvm.inttoptr %47 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %50, %60 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %61 = arith.cmpi ult, %50, %59 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %61, ^bb10, ^bb17 loc(#loc5) // CHECK-NEXT: ^bb10: // pred: ^bb9 -// CHECK-NEXT: %62 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %47, %62 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %63 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %64 = "llvm.intrcall"(%63, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %65 = arith.addi %64, %50 : i256 loc(#loc19) -// CHECK-NEXT: %66 = arith.addi %64, %59 : i256 loc(#loc19) -// CHECK-NEXT: %67 = arith.subi %66, %65 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: %62 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %47, %62 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %63 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %64 = "llvm.intrcall"(%63, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %65 = arith.addi %64, %50 : i256 loc(#loc5) +// CHECK-NEXT: %66 = arith.addi %64, %59 : i256 loc(#loc5) +// CHECK-NEXT: %67 = arith.subi %66, %65 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb11(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb11(%68: i256 loc({{.*}}:51:4)): // 2 preds: ^bb10, ^bb16 -// CHECK-NEXT: %69 = arith.cmpi ult, %68, %67 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %69, ^bb12(%68 : i256), ^bb17 loc(#loc19) +// CHECK-NEXT: %69 = arith.cmpi ult, %68, %67 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %69, ^bb12(%68 : i256), ^bb17 loc(#loc5) // CHECK-NEXT: ^bb12(%70: i256 loc({{.*}}:51:4)): // pred: ^bb11 -// CHECK-NEXT: %71 = arith.addi %65, %70 : i256 loc(#loc19) -// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %73 = llvm.load %72 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %74 = llvm.inttoptr %71 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %74 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %75 = arith.cmpi ugt, %73, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %75, ^bb13, ^bb16(%70 : i256) loc(#loc19) +// CHECK-NEXT: %71 = arith.addi %65, %70 : i256 loc(#loc5) +// CHECK-NEXT: %72 = llvm.inttoptr %71 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %73 = llvm.load %72 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %74 = llvm.inttoptr %71 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %74 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %75 = arith.cmpi ugt, %73, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %75, ^bb13, ^bb16(%70 : i256) loc(#loc5) // CHECK-NEXT: ^bb13: // pred: ^bb12 -// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %71, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %78 = "llvm.intrcall"(%77, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %79 = arith.addi %73, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %80 = arith.divui %79, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb14(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: %76 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %71, %76 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %77 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %78 = "llvm.intrcall"(%77, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %79 = arith.addi %73, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %80 = arith.divui %79, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb14(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb14(%81: i256 loc({{.*}}:51:4)): // 2 preds: ^bb13, ^bb15 -// CHECK-NEXT: %82 = arith.cmpi ult, %81, %80 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %82, ^bb15(%81 : i256), ^bb16(%70 : i256) loc(#loc19) +// CHECK-NEXT: %82 = arith.cmpi ult, %81, %80 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %82, ^bb15(%81 : i256), ^bb16(%70 : i256) loc(#loc5) // CHECK-NEXT: ^bb15(%83: i256 loc({{.*}}:51:4)): // pred: ^bb14 -// CHECK-NEXT: %84 = arith.addi %78, %83 : i256 loc(#loc19) -// CHECK-NEXT: %85 = llvm.inttoptr %84 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %85 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %86 = arith.addi %83, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb14(%86 : i256) loc(#loc19) +// CHECK-NEXT: %84 = arith.addi %78, %83 : i256 loc(#loc5) +// CHECK-NEXT: %85 = llvm.inttoptr %84 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %85 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %86 = arith.addi %83, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb14(%86 : i256) loc(#loc5) // CHECK-NEXT: ^bb16(%87: i256 loc({{.*}}:51:4)): // 2 preds: ^bb12, ^bb14 -// CHECK-NEXT: %88 = arith.addi %87, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb11(%88 : i256) loc(#loc19) +// CHECK-NEXT: %88 = arith.addi %87, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb11(%88 : i256) loc(#loc5) // CHECK-NEXT: ^bb17: // 2 preds: ^bb9, ^bb11 -// CHECK-NEXT: %89 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %47, %89 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %90 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %91 = "llvm.intrcall"(%90, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb18(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: %89 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %47, %89 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %90 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %91 = "llvm.intrcall"(%90, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb18(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb18(%92: i256 loc({{.*}}:51:4)): // 2 preds: ^bb17, ^bb33 -// CHECK-NEXT: %93 = arith.cmpi ult, %92, %50 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %93, ^bb19(%92 : i256), ^bb34 loc(#loc19) +// CHECK-NEXT: %93 = arith.cmpi ult, %92, %50 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %93, ^bb19(%92 : i256), ^bb34 loc(#loc5) // CHECK-NEXT: ^bb19(%94: i256 loc({{.*}}:51:4)): // pred: ^bb18 -// CHECK-NEXT: %95 = arith.addi %53, %94 : i256 loc(#loc19) -// CHECK-NEXT: %96 = arith.addi %91, %94 : i256 loc(#loc19) -// CHECK-NEXT: %97 = arith.cmpi ne, %95, %96 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %97, ^bb20, ^bb33(%94 : i256) loc(#loc19) +// CHECK-NEXT: %95 = arith.addi %53, %94 : i256 loc(#loc5) +// CHECK-NEXT: %96 = arith.addi %91, %94 : i256 loc(#loc5) +// CHECK-NEXT: %97 = arith.cmpi ne, %95, %96 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %97, ^bb20, ^bb33(%94 : i256) loc(#loc5) // CHECK-NEXT: ^bb20: // pred: ^bb19 -// CHECK-NEXT: %98 = llvm.inttoptr %95 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %99 = llvm.load %98 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %100 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %95, %100 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %101 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %102 = "llvm.intrcall"(%101, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %103 = arith.cmpi ugt, %99, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %103, ^bb21, ^bb22 loc(#loc19) +// CHECK-NEXT: %98 = llvm.inttoptr %95 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %99 = llvm.load %98 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %100 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %95, %100 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %101 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %102 = "llvm.intrcall"(%101, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %103 = arith.cmpi ugt, %99, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %103, ^bb21, ^bb22 loc(#loc5) // CHECK-NEXT: ^bb21: // pred: ^bb20 -// CHECK-NEXT: %104 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %104 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %105 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %105 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %106 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%106, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb22 loc(#loc19) +// CHECK-NEXT: %104 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %104 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %105 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %105 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %106 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%106, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb22 loc(#loc5) // CHECK-NEXT: ^bb22: // 2 preds: ^bb20, ^bb21 -// CHECK-NEXT: %107 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %108 = llvm.load %107 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %109 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %99, %109 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %110 = arith.cmpi ult, %99, %108 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %110, ^bb23, ^bb28 loc(#loc19) +// CHECK-NEXT: %107 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %108 = llvm.load %107 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %109 = llvm.inttoptr %96 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %99, %109 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %110 = arith.cmpi ult, %99, %108 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %110, ^bb23, ^bb28 loc(#loc5) // CHECK-NEXT: ^bb23: // pred: ^bb22 -// CHECK-NEXT: %111 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %96, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %112 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %113 = "llvm.intrcall"(%112, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %114 = arith.addi %99, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %115 = arith.divui %114, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %116 = arith.addi %113, %115 : i256 loc(#loc19) -// CHECK-NEXT: %117 = arith.remui %99, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %118 = arith.cmpi ne, %117, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %118, ^bb24, ^bb25 loc(#loc19) +// CHECK-NEXT: %111 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %96, %111 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %112 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %113 = "llvm.intrcall"(%112, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %114 = arith.addi %99, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %115 = arith.divui %114, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %116 = arith.addi %113, %115 : i256 loc(#loc5) +// CHECK-NEXT: %117 = arith.remui %99, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %118 = arith.cmpi ne, %117, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %118, ^bb24, ^bb25 loc(#loc5) // CHECK-NEXT: ^bb24: // pred: ^bb23 -// CHECK-NEXT: %119 = arith.muli %117, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %120 = arith.subi %c256_i256, %119 : i256 loc(#loc19) -// CHECK-NEXT: %121 = arith.shrui %c-1_i256, %120 : i256 loc(#loc19) -// CHECK-NEXT: %122 = arith.subi %116, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %123 = llvm.inttoptr %122 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %124 = llvm.load %123 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %125 = arith.andi %124, %121 : i256 loc(#loc19) -// CHECK-NEXT: %126 = llvm.inttoptr %122 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %125, %126 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb25 loc(#loc19) +// CHECK-NEXT: %119 = arith.muli %117, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %120 = arith.subi %c256_i256, %119 : i256 loc(#loc5) +// CHECK-NEXT: %121 = arith.shrui %c-1_i256, %120 : i256 loc(#loc5) +// CHECK-NEXT: %122 = arith.subi %116, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %123 = llvm.inttoptr %122 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %124 = llvm.load %123 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %125 = arith.andi %124, %121 : i256 loc(#loc5) +// CHECK-NEXT: %126 = llvm.inttoptr %122 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %125, %126 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb25 loc(#loc5) // CHECK-NEXT: ^bb25: // 2 preds: ^bb23, ^bb24 -// CHECK-NEXT: %127 = arith.addi %108, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %128 = arith.divui %127, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %129 = arith.addi %113, %128 : i256 loc(#loc19) -// CHECK-NEXT: %130 = arith.subi %129, %116 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb26(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: %127 = arith.addi %108, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %128 = arith.divui %127, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %129 = arith.addi %113, %128 : i256 loc(#loc5) +// CHECK-NEXT: %130 = arith.subi %129, %116 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb26(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb26(%131: i256 loc({{.*}}:51:4)): // 2 preds: ^bb25, ^bb27 -// CHECK-NEXT: %132 = arith.cmpi ult, %131, %130 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %132, ^bb27(%131 : i256), ^bb28 loc(#loc19) +// CHECK-NEXT: %132 = arith.cmpi ult, %131, %130 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %132, ^bb27(%131 : i256), ^bb28 loc(#loc5) // CHECK-NEXT: ^bb27(%133: i256 loc({{.*}}:51:4)): // pred: ^bb26 -// CHECK-NEXT: %134 = arith.addi %116, %133 : i256 loc(#loc19) -// CHECK-NEXT: %135 = llvm.inttoptr %134 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %135 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %136 = arith.addi %133, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb26(%136 : i256) loc(#loc19) +// CHECK-NEXT: %134 = arith.addi %116, %133 : i256 loc(#loc5) +// CHECK-NEXT: %135 = llvm.inttoptr %134 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %135 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %136 = arith.addi %133, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb26(%136 : i256) loc(#loc5) // CHECK-NEXT: ^bb28: // 2 preds: ^bb22, ^bb26 -// CHECK-NEXT: %137 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %96, %137 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %138 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %139 = "llvm.intrcall"(%138, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %140 = arith.divui %99, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %141 = arith.remui %99, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb29(%c0_i256 : i256) loc(#loc19) +// CHECK-NEXT: %137 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %96, %137 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %138 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %139 = "llvm.intrcall"(%138, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %140 = arith.divui %99, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %141 = arith.remui %99, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb29(%c0_i256 : i256) loc(#loc5) // CHECK-NEXT: ^bb29(%142: i256 loc({{.*}}:51:4)): // 2 preds: ^bb28, ^bb30 -// CHECK-NEXT: %143 = arith.cmpi ult, %142, %140 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %143, ^bb30(%142 : i256), ^bb31 loc(#loc19) +// CHECK-NEXT: %143 = arith.cmpi ult, %142, %140 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %143, ^bb30(%142 : i256), ^bb31 loc(#loc5) // CHECK-NEXT: ^bb30(%144: i256 loc({{.*}}:51:4)): // pred: ^bb29 -// CHECK-NEXT: %145 = arith.addi %102, %144 : i256 loc(#loc19) -// CHECK-NEXT: %146 = arith.addi %139, %144 : i256 loc(#loc19) -// CHECK-NEXT: %147 = llvm.inttoptr %145 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %148 = llvm.load %147 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %149 = llvm.inttoptr %146 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %148, %149 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %150 = arith.addi %144, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb29(%150 : i256) loc(#loc19) +// CHECK-NEXT: %145 = arith.addi %102, %144 : i256 loc(#loc5) +// CHECK-NEXT: %146 = arith.addi %139, %144 : i256 loc(#loc5) +// CHECK-NEXT: %147 = llvm.inttoptr %145 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %148 = llvm.load %147 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %149 = llvm.inttoptr %146 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %148, %149 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %150 = arith.addi %144, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb29(%150 : i256) loc(#loc5) // CHECK-NEXT: ^bb31: // pred: ^bb29 -// CHECK-NEXT: %151 = arith.cmpi ne, %141, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %151, ^bb32, ^bb33(%94 : i256) loc(#loc19) +// CHECK-NEXT: %151 = arith.cmpi ne, %141, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %151, ^bb32, ^bb33(%94 : i256) loc(#loc5) // CHECK-NEXT: ^bb32: // pred: ^bb31 -// CHECK-NEXT: %152 = arith.addi %102, %140 : i256 loc(#loc19) -// CHECK-NEXT: %153 = arith.addi %139, %140 : i256 loc(#loc19) -// CHECK-NEXT: %154 = llvm.inttoptr %152 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %155 = llvm.load %154 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %156 = arith.muli %141, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %157 = arith.shli %c1_i256, %156 : i256 loc(#loc19) -// CHECK-NEXT: %158 = arith.subi %157, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %159 = arith.andi %155, %158 : i256 loc(#loc19) -// CHECK-NEXT: %160 = llvm.inttoptr %153 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %159, %160 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb33(%94 : i256) loc(#loc19) +// CHECK-NEXT: %152 = arith.addi %102, %140 : i256 loc(#loc5) +// CHECK-NEXT: %153 = arith.addi %139, %140 : i256 loc(#loc5) +// CHECK-NEXT: %154 = llvm.inttoptr %152 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %155 = llvm.load %154 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %156 = arith.muli %141, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %157 = arith.shli %c1_i256, %156 : i256 loc(#loc5) +// CHECK-NEXT: %158 = arith.subi %157, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %159 = arith.andi %155, %158 : i256 loc(#loc5) +// CHECK-NEXT: %160 = llvm.inttoptr %153 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %159, %160 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb33(%94 : i256) loc(#loc5) // CHECK-NEXT: ^bb33(%161: i256 loc({{.*}}:51:4)): // 3 preds: ^bb19, ^bb31, ^bb32 -// CHECK-NEXT: %162 = arith.addi %161, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb18(%162 : i256) loc(#loc19) +// CHECK-NEXT: %162 = arith.addi %161, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb18(%162 : i256) loc(#loc5) // CHECK-NEXT: ^bb34: // 2 preds: ^bb6, ^bb18 -// CHECK-NEXT: %163 = arith.addi %29, %c65_i256 : i256 loc(#loc19) -// CHECK-NEXT: %164 = arith.addi %31, %c6_i256 : i256 loc(#loc19) -// CHECK-NEXT: %165 = arith.cmpi ne, %163, %164 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %165, ^bb35(%c0_i256 : i256), ^bb37 loc(#loc19) +// CHECK-NEXT: %163 = arith.addi %29, %c65_i256 : i256 loc(#loc5) +// CHECK-NEXT: %164 = arith.addi %31, %c6_i256 : i256 loc(#loc5) +// CHECK-NEXT: %165 = arith.cmpi ne, %163, %164 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %165, ^bb35(%c0_i256 : i256), ^bb37 loc(#loc5) // CHECK-NEXT: ^bb35(%166: i256 loc({{.*}}:51:4)): // 2 preds: ^bb34, ^bb36 -// CHECK-NEXT: %167 = arith.cmpi ult, %166, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %167, ^bb36(%166 : i256), ^bb37 loc(#loc19) +// CHECK-NEXT: %167 = arith.cmpi ult, %166, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %167, ^bb36(%166 : i256), ^bb37 loc(#loc5) // CHECK-NEXT: ^bb36(%168: i256 loc({{.*}}:51:4)): // pred: ^bb35 -// CHECK-NEXT: %169 = arith.addi %163, %168 : i256 loc(#loc19) -// CHECK-NEXT: %170 = arith.addi %164, %168 : i256 loc(#loc19) -// CHECK-NEXT: %171 = llvm.inttoptr %169 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %172 = llvm.load %171 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %173 = arith.andi %172, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) -// CHECK-NEXT: %174 = llvm.inttoptr %170 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %173, %174 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %175 = arith.addi %168, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb35(%175 : i256) loc(#loc19) +// CHECK-NEXT: %169 = arith.addi %163, %168 : i256 loc(#loc5) +// CHECK-NEXT: %170 = arith.addi %164, %168 : i256 loc(#loc5) +// CHECK-NEXT: %171 = llvm.inttoptr %169 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %172 = llvm.load %171 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %173 = arith.andi %172, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) +// CHECK-NEXT: %174 = llvm.inttoptr %170 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %173, %174 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %175 = arith.addi %168, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb35(%175 : i256) loc(#loc5) // CHECK-NEXT: ^bb37: // 2 preds: ^bb34, ^bb35 -// CHECK-NEXT: %176 = arith.addi %29, %c67_i256 : i256 loc(#loc19) -// CHECK-NEXT: %177 = llvm.inttoptr %176 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %178 = llvm.load %177 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %179 = arith.andi %178, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc19) -// CHECK-NEXT: %180 = arith.shrui %178, %c192_i256 : i256 loc(#loc19) -// CHECK-NEXT: %181 = arith.andi %180, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %182 = arith.shli %181, %c192_i256 : i256 loc(#loc19) -// CHECK-NEXT: %183 = arith.ori %179, %182 : i256 loc(#loc19) -// CHECK-NEXT: %184 = arith.shrui %178, %c200_i256 : i256 loc(#loc19) -// CHECK-NEXT: %185 = arith.andi %184, %c4294967295_i256 : i256 loc(#loc19) -// CHECK-NEXT: %186 = arith.shli %185, %c200_i256 : i256 loc(#loc19) -// CHECK-NEXT: %187 = arith.ori %183, %186 : i256 loc(#loc19) -// CHECK-NEXT: %188 = arith.addi %31, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %189 = llvm.inttoptr %188 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %190 = llvm.load %189 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %191 = arith.andi %190, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc19) -// CHECK-NEXT: %192 = arith.ori %191, %187 : i256 loc(#loc19) -// CHECK-NEXT: %193 = llvm.inttoptr %188 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %192, %193 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb38(%28 : i256) loc(#loc19) +// CHECK-NEXT: %176 = arith.addi %29, %c67_i256 : i256 loc(#loc5) +// CHECK-NEXT: %177 = llvm.inttoptr %176 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %178 = llvm.load %177 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %179 = arith.andi %178, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc5) +// CHECK-NEXT: %180 = arith.shrui %178, %c192_i256 : i256 loc(#loc5) +// CHECK-NEXT: %181 = arith.andi %180, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %182 = arith.shli %181, %c192_i256 : i256 loc(#loc5) +// CHECK-NEXT: %183 = arith.ori %179, %182 : i256 loc(#loc5) +// CHECK-NEXT: %184 = arith.shrui %178, %c200_i256 : i256 loc(#loc5) +// CHECK-NEXT: %185 = arith.andi %184, %c4294967295_i256 : i256 loc(#loc5) +// CHECK-NEXT: %186 = arith.shli %185, %c200_i256 : i256 loc(#loc5) +// CHECK-NEXT: %187 = arith.ori %183, %186 : i256 loc(#loc5) +// CHECK-NEXT: %188 = arith.addi %31, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %189 = llvm.inttoptr %188 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %190 = llvm.load %189 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %191 = arith.andi %190, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc5) +// CHECK-NEXT: %192 = arith.ori %191, %187 : i256 loc(#loc5) +// CHECK-NEXT: %193 = llvm.inttoptr %188 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %192, %193 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb38(%28 : i256) loc(#loc5) // CHECK-NEXT: ^bb38(%194: i256 loc({{.*}}:51:4)): // 2 preds: ^bb5, ^bb37 -// CHECK-NEXT: %195 = arith.addi %194, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb4(%195 : i256) loc(#loc19) +// CHECK-NEXT: %195 = arith.addi %194, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb4(%195 : i256) loc(#loc5) // CHECK-NEXT: ^bb39: // pred: ^bb4 -// CHECK-NEXT: %196 = llvm.inttoptr %c78_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %197 = llvm.load %196 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %198 = arith.shrui %197, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %199 = arith.andi %197, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %200 = arith.cmpi eq, %199, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: %201 = arith.andi %198, %c127_i256 : i256 loc(#loc19) -// CHECK-NEXT: %202 = arith.select %200, %201, %198 : i256 loc(#loc19) -// CHECK-NEXT: %203 = arith.cmpi ult, %202, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %204 = arith.extui %203 : i1 to i256 loc(#loc19) -// CHECK-NEXT: %205 = arith.cmpi eq, %199, %204 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %205, ^bb40, ^bb41 loc(#loc19) +// CHECK-NEXT: call @__sol.copy.storage.storage.string(%c78_i256, %c19_i256) : (i256, i256) -> () loc(#loc5) +// CHECK-NEXT: %196 = llvm.inttoptr %c79_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %197 = llvm.load %196 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %198 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c79_i256, %198 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %199 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %200 = "llvm.intrcall"(%199, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %201 = arith.cmpi ugt, %197, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %201, ^bb40, ^bb41 loc(#loc5) // CHECK-NEXT: ^bb40: // pred: ^bb39 -// CHECK-NEXT: %206 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %206 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %207 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c34_i256, %207 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %208 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%208, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb41 loc(#loc19) +// CHECK-NEXT: %202 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %202 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %203 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %203 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %204 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%204, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb41 loc(#loc5) // CHECK-NEXT: ^bb41: // 2 preds: ^bb39, ^bb40 -// CHECK-NEXT: %209 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %210 = llvm.load %209 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %211 = arith.shrui %210, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %212 = arith.andi %210, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %213 = arith.cmpi eq, %212, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: %214 = arith.andi %211, %c127_i256 : i256 loc(#loc19) -// CHECK-NEXT: %215 = arith.select %213, %214, %211 : i256 loc(#loc19) -// CHECK-NEXT: %216 = arith.cmpi ult, %215, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %217 = arith.extui %216 : i1 to i256 loc(#loc19) -// CHECK-NEXT: %218 = arith.cmpi eq, %212, %217 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %218, ^bb42, ^bb43 loc(#loc19) +// CHECK-NEXT: %205 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %206 = llvm.load %205 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %207 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %197, %207 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %208 = arith.cmpi ult, %197, %206 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %208, ^bb42, ^bb45 loc(#loc5) // CHECK-NEXT: ^bb42: // pred: ^bb41 -// CHECK-NEXT: %219 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %219 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %220 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c34_i256, %220 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %221 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%221, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb43 loc(#loc19) -// CHECK-NEXT: ^bb43: // 2 preds: ^bb41, ^bb42 -// CHECK-NEXT: %222 = arith.cmpi ugt, %215, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %222, ^bb44, ^bb47 loc(#loc19) -// CHECK-NEXT: ^bb44: // pred: ^bb43 -// CHECK-NEXT: %223 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c19_i256, %223 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %224 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %225 = "llvm.intrcall"(%224, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %226 = arith.addi %202, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %227 = arith.divui %226, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %228 = arith.addi %225, %227 : i256 loc(#loc19) -// CHECK-NEXT: %229 = arith.cmpi ult, %202, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %230 = arith.select %229, %225, %228 : i256 loc(#loc19) -// CHECK-NEXT: %231 = arith.addi %215, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %232 = arith.divui %231, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %233 = arith.addi %225, %232 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb45(%230 : i256) loc(#loc19) -// CHECK-NEXT: ^bb45(%234: i256 loc({{.*}}:51:4)): // 2 preds: ^bb44, ^bb46 -// CHECK-NEXT: %235 = arith.cmpi ult, %234, %233 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %235, ^bb46(%234 : i256), ^bb47 loc(#loc19) -// CHECK-NEXT: ^bb46(%236: i256 loc({{.*}}:51:4)): // pred: ^bb45 -// CHECK-NEXT: %237 = llvm.inttoptr %236 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %237 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %238 = arith.addi %236, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb45(%238 : i256) loc(#loc19) -// CHECK-NEXT: ^bb47: // 2 preds: ^bb43, ^bb45 -// CHECK-NEXT: %239 = arith.cmpi ugt, %202, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %239, ^bb51, ^bb48 loc(#loc19) -// CHECK-NEXT: ^bb48: // pred: ^bb47 -// CHECK-NEXT: %240 = arith.cmpi ne, %202, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %240, ^bb50, ^bb49 loc(#loc19) +// CHECK-NEXT: %209 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c20_i256, %209 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %210 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %211 = "llvm.intrcall"(%210, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %212 = arith.addi %211, %197 : i256 loc(#loc5) +// CHECK-NEXT: %213 = arith.addi %211, %206 : i256 loc(#loc5) +// CHECK-NEXT: %214 = arith.subi %213, %212 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb43(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb43(%215: i256 loc({{.*}}:51:4)): // 2 preds: ^bb42, ^bb44 +// CHECK-NEXT: %216 = arith.cmpi ult, %215, %214 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %216, ^bb44(%215 : i256), ^bb45 loc(#loc5) +// CHECK-NEXT: ^bb44(%217: i256 loc({{.*}}:51:4)): // pred: ^bb43 +// CHECK-NEXT: %218 = arith.addi %212, %217 : i256 loc(#loc5) +// CHECK-NEXT: %219 = llvm.inttoptr %218 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %219 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %220 = arith.addi %217, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb43(%220 : i256) loc(#loc5) +// CHECK-NEXT: ^bb45: // 2 preds: ^bb41, ^bb43 +// CHECK-NEXT: %221 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c20_i256, %221 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %222 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %223 = "llvm.intrcall"(%222, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb46(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb46(%224: i256 loc({{.*}}:51:4)): // 2 preds: ^bb45, ^bb47 +// CHECK-NEXT: %225 = arith.cmpi ult, %224, %197 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %225, ^bb47(%224 : i256), ^bb48 loc(#loc5) +// CHECK-NEXT: ^bb47(%226: i256 loc({{.*}}:51:4)): // pred: ^bb46 +// CHECK-NEXT: %227 = arith.addi %200, %226 : i256 loc(#loc5) +// CHECK-NEXT: %228 = arith.addi %223, %226 : i256 loc(#loc5) +// CHECK-NEXT: %229 = llvm.inttoptr %227 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %230 = llvm.load %229 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %231 = llvm.inttoptr %228 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %230, %231 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %232 = arith.addi %226, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb46(%232 : i256) loc(#loc5) +// CHECK-NEXT: ^bb48: // pred: ^bb46 +// CHECK-NEXT: %233 = llvm.inttoptr %c80_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %234 = llvm.load %233 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %235 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %234, %235 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %236 = llvm.inttoptr %c81_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %237 = llvm.load %236 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %238 = arith.andi %237, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc5) +// CHECK-NEXT: %239 = arith.shrui %237, %c224_i256 : i256 loc(#loc5) +// CHECK-NEXT: %240 = arith.andi %239, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %241 = arith.shli %240, %c224_i256 : i256 loc(#loc5) +// CHECK-NEXT: %242 = arith.ori %238, %241 : i256 loc(#loc5) +// CHECK-NEXT: %243 = arith.shrui %237, %c232_i256 : i256 loc(#loc5) +// CHECK-NEXT: %244 = arith.andi %243, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %245 = arith.shli %244, %c232_i256 : i256 loc(#loc5) +// CHECK-NEXT: %246 = arith.ori %242, %245 : i256 loc(#loc5) +// CHECK-NEXT: %247 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %248 = llvm.load %247 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %249 = arith.andi %248, %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 : i256 loc(#loc5) +// CHECK-NEXT: %250 = arith.ori %249, %246 : i256 loc(#loc5) +// CHECK-NEXT: %251 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %250, %251 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %252 = llvm.inttoptr %c82_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %253 = llvm.load %252 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %254 = arith.andi %253, %c4722366482869645213695_i256 : i256 loc(#loc5) +// CHECK-NEXT: %255 = arith.shrui %253, %c72_i256 : i256 loc(#loc5) +// CHECK-NEXT: %256 = arith.andi %255, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %257 = arith.shli %256, %c72_i256 : i256 loc(#loc5) +// CHECK-NEXT: %258 = arith.ori %254, %257 : i256 loc(#loc5) +// CHECK-NEXT: %259 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %260 = llvm.load %259 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %261 = arith.andi %260, %c-1208925819614629174706176_i256 : i256 loc(#loc5) +// CHECK-NEXT: %262 = arith.ori %261, %258 : i256 loc(#loc5) +// CHECK-NEXT: %263 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %262, %263 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %264 = llvm.inttoptr %c83_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %265 = llvm.load %264 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %266 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c83_i256, %266 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %267 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %268 = "llvm.intrcall"(%267, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %269 = arith.cmpi ugt, %265, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %269, ^bb49, ^bb50 loc(#loc5) // CHECK-NEXT: ^bb49: // pred: ^bb48 -// CHECK-NEXT: %241 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %241 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb57 loc(#loc19) -// CHECK-NEXT: ^bb50: // pred: ^bb48 -// CHECK-NEXT: %242 = arith.muli %202, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %243 = arith.subi %c256_i256, %242 : i256 loc(#loc19) -// CHECK-NEXT: %244 = arith.shli %c-1_i256, %243 : i256 loc(#loc19) -// CHECK-NEXT: %245 = arith.andi %197, %244 : i256 loc(#loc19) -// CHECK-NEXT: %246 = arith.muli %202, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %247 = arith.ori %245, %246 : i256 loc(#loc19) -// CHECK-NEXT: %248 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %247, %248 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb57 loc(#loc19) -// CHECK-NEXT: ^bb51: // pred: ^bb47 -// CHECK-NEXT: %249 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c19_i256, %249 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %250 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %251 = "llvm.intrcall"(%250, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %252 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c78_i256, %252 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %253 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %254 = "llvm.intrcall"(%253, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %255 = arith.andi %202, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb52(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb52(%256: i256 loc({{.*}}:51:4)): // 2 preds: ^bb51, ^bb53 -// CHECK-NEXT: %257 = arith.cmpi ult, %256, %255 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %257, ^bb53(%256 : i256), ^bb54 loc(#loc19) -// CHECK-NEXT: ^bb53(%258: i256 loc({{.*}}:51:4)): // pred: ^bb52 -// CHECK-NEXT: %259 = arith.divui %258, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %260 = arith.addi %254, %259 : i256 loc(#loc19) -// CHECK-NEXT: %261 = llvm.inttoptr %260 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %262 = llvm.load %261 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %263 = arith.addi %251, %259 : i256 loc(#loc19) -// CHECK-NEXT: %264 = llvm.inttoptr %263 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %262, %264 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %265 = arith.addi %258, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb52(%265 : i256) loc(#loc19) -// CHECK-NEXT: ^bb54: // pred: ^bb52 -// CHECK-NEXT: %266 = arith.cmpi ult, %255, %202 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %266, ^bb55, ^bb56 loc(#loc19) -// CHECK-NEXT: ^bb55: // pred: ^bb54 -// CHECK-NEXT: %267 = arith.andi %202, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %268 = arith.divui %255, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %269 = arith.addi %254, %268 : i256 loc(#loc19) -// CHECK-NEXT: %270 = llvm.inttoptr %269 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %271 = llvm.load %270 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %272 = arith.muli %267, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %273 = arith.subi %c256_i256, %272 : i256 loc(#loc19) -// CHECK-NEXT: %274 = arith.shli %c-1_i256, %273 : i256 loc(#loc19) -// CHECK-NEXT: %275 = arith.andi %271, %274 : i256 loc(#loc19) -// CHECK-NEXT: %276 = arith.addi %251, %268 : i256 loc(#loc19) -// CHECK-NEXT: %277 = llvm.inttoptr %276 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %275, %277 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb56 loc(#loc19) -// CHECK-NEXT: ^bb56: // 2 preds: ^bb54, ^bb55 -// CHECK-NEXT: %278 = arith.muli %202, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %279 = arith.ori %278, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %280 = llvm.inttoptr %c19_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %279, %280 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb57 loc(#loc19) -// CHECK-NEXT: ^bb57: // 3 preds: ^bb49, ^bb50, ^bb56 -// CHECK-NEXT: %281 = llvm.inttoptr %c79_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %282 = llvm.load %281 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %283 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c79_i256, %283 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %284 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %285 = "llvm.intrcall"(%284, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %286 = arith.cmpi ugt, %282, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %286, ^bb58, ^bb59 loc(#loc19) -// CHECK-NEXT: ^bb58: // pred: ^bb57 -// CHECK-NEXT: %287 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %287 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %288 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %288 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %289 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%289, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb59 loc(#loc19) -// CHECK-NEXT: ^bb59: // 2 preds: ^bb57, ^bb58 -// CHECK-NEXT: %290 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %291 = llvm.load %290 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %292 = llvm.inttoptr %c20_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %282, %292 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %293 = arith.cmpi ult, %282, %291 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %293, ^bb60, ^bb63 loc(#loc19) -// CHECK-NEXT: ^bb60: // pred: ^bb59 -// CHECK-NEXT: %294 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c20_i256, %294 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %295 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %296 = "llvm.intrcall"(%295, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %297 = arith.addi %296, %282 : i256 loc(#loc19) -// CHECK-NEXT: %298 = arith.addi %296, %291 : i256 loc(#loc19) -// CHECK-NEXT: %299 = arith.subi %298, %297 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb61(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb61(%300: i256 loc({{.*}}:51:4)): // 2 preds: ^bb60, ^bb62 -// CHECK-NEXT: %301 = arith.cmpi ult, %300, %299 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %301, ^bb62(%300 : i256), ^bb63 loc(#loc19) -// CHECK-NEXT: ^bb62(%302: i256 loc({{.*}}:51:4)): // pred: ^bb61 -// CHECK-NEXT: %303 = arith.addi %297, %302 : i256 loc(#loc19) -// CHECK-NEXT: %304 = llvm.inttoptr %303 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %304 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %305 = arith.addi %302, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb61(%305 : i256) loc(#loc19) -// CHECK-NEXT: ^bb63: // 2 preds: ^bb59, ^bb61 -// CHECK-NEXT: %306 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c20_i256, %306 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %307 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %308 = "llvm.intrcall"(%307, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb64(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb64(%309: i256 loc({{.*}}:51:4)): // 2 preds: ^bb63, ^bb65 -// CHECK-NEXT: %310 = arith.cmpi ult, %309, %282 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %310, ^bb65(%309 : i256), ^bb66 loc(#loc19) -// CHECK-NEXT: ^bb65(%311: i256 loc({{.*}}:51:4)): // pred: ^bb64 -// CHECK-NEXT: %312 = arith.addi %285, %311 : i256 loc(#loc19) -// CHECK-NEXT: %313 = arith.addi %308, %311 : i256 loc(#loc19) -// CHECK-NEXT: %314 = llvm.inttoptr %312 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %315 = llvm.load %314 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %316 = llvm.inttoptr %313 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %315, %316 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %317 = arith.addi %311, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb64(%317 : i256) loc(#loc19) -// CHECK-NEXT: ^bb66: // pred: ^bb64 -// CHECK-NEXT: %318 = llvm.inttoptr %c80_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %319 = llvm.load %318 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %320 = llvm.inttoptr %c21_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %319, %320 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %321 = llvm.inttoptr %c81_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %322 = llvm.load %321 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %323 = arith.andi %322, %c26959946667150639794667015087019630673637144422540572481103610249215_i256 : i256 loc(#loc19) -// CHECK-NEXT: %324 = arith.shrui %322, %c224_i256 : i256 loc(#loc19) -// CHECK-NEXT: %325 = arith.andi %324, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %326 = arith.shli %325, %c224_i256 : i256 loc(#loc19) -// CHECK-NEXT: %327 = arith.ori %323, %326 : i256 loc(#loc19) -// CHECK-NEXT: %328 = arith.shrui %322, %c232_i256 : i256 loc(#loc19) -// CHECK-NEXT: %329 = arith.andi %328, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %330 = arith.shli %329, %c232_i256 : i256 loc(#loc19) -// CHECK-NEXT: %331 = arith.ori %327, %330 : i256 loc(#loc19) -// CHECK-NEXT: %332 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %333 = llvm.load %332 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %334 = arith.andi %333, %c-1766847064778384329583297500742918515827483896875618958121606201292619776_i256 : i256 loc(#loc19) -// CHECK-NEXT: %335 = arith.ori %334, %331 : i256 loc(#loc19) -// CHECK-NEXT: %336 = llvm.inttoptr %c22_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %335, %336 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %337 = llvm.inttoptr %c82_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %338 = llvm.load %337 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %339 = arith.andi %338, %c4722366482869645213695_i256 : i256 loc(#loc19) -// CHECK-NEXT: %340 = arith.shrui %338, %c72_i256 : i256 loc(#loc19) -// CHECK-NEXT: %341 = arith.andi %340, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %342 = arith.shli %341, %c72_i256 : i256 loc(#loc19) -// CHECK-NEXT: %343 = arith.ori %339, %342 : i256 loc(#loc19) -// CHECK-NEXT: %344 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %345 = llvm.load %344 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %346 = arith.andi %345, %c-1208925819614629174706176_i256 : i256 loc(#loc19) -// CHECK-NEXT: %347 = arith.ori %346, %343 : i256 loc(#loc19) -// CHECK-NEXT: %348 = llvm.inttoptr %c23_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %347, %348 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %349 = llvm.inttoptr %c83_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %350 = llvm.load %349 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %351 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c83_i256, %351 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %352 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %353 = "llvm.intrcall"(%352, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %354 = arith.cmpi ugt, %350, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %354, ^bb67, ^bb68 loc(#loc19) -// CHECK-NEXT: ^bb67: // pred: ^bb66 -// CHECK-NEXT: %355 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %355 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %356 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %356 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %357 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%357, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb68 loc(#loc19) -// CHECK-NEXT: ^bb68: // 2 preds: ^bb66, ^bb67 -// CHECK-NEXT: %358 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %359 = llvm.load %358 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %360 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %350, %360 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %361 = arith.cmpi ult, %350, %359 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %361, ^bb69, ^bb76 loc(#loc19) -// CHECK-NEXT: ^bb69: // pred: ^bb68 -// CHECK-NEXT: %362 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c24_i256, %362 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %363 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %364 = "llvm.intrcall"(%363, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %365 = arith.addi %364, %350 : i256 loc(#loc19) -// CHECK-NEXT: %366 = arith.addi %364, %359 : i256 loc(#loc19) -// CHECK-NEXT: %367 = arith.subi %366, %365 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb70(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb70(%368: i256 loc({{.*}}:51:4)): // 2 preds: ^bb69, ^bb75 -// CHECK-NEXT: %369 = arith.cmpi ult, %368, %367 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %369, ^bb71(%368 : i256), ^bb76 loc(#loc19) -// CHECK-NEXT: ^bb71(%370: i256 loc({{.*}}:51:4)): // pred: ^bb70 -// CHECK-NEXT: %371 = arith.addi %365, %370 : i256 loc(#loc19) -// CHECK-NEXT: %372 = llvm.inttoptr %371 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %373 = llvm.load %372 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %374 = llvm.inttoptr %371 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %374 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %375 = arith.cmpi ugt, %373, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %375, ^bb72, ^bb75(%370 : i256) loc(#loc19) -// CHECK-NEXT: ^bb72: // pred: ^bb71 -// CHECK-NEXT: %376 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %371, %376 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %377 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %378 = "llvm.intrcall"(%377, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %379 = arith.addi %373, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %380 = arith.divui %379, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb73(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb73(%381: i256 loc({{.*}}:51:4)): // 2 preds: ^bb72, ^bb74 -// CHECK-NEXT: %382 = arith.cmpi ult, %381, %380 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %382, ^bb74(%381 : i256), ^bb75(%370 : i256) loc(#loc19) -// CHECK-NEXT: ^bb74(%383: i256 loc({{.*}}:51:4)): // pred: ^bb73 -// CHECK-NEXT: %384 = arith.addi %378, %383 : i256 loc(#loc19) -// CHECK-NEXT: %385 = llvm.inttoptr %384 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %385 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %386 = arith.addi %383, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb73(%386 : i256) loc(#loc19) -// CHECK-NEXT: ^bb75(%387: i256 loc({{.*}}:51:4)): // 2 preds: ^bb71, ^bb73 -// CHECK-NEXT: %388 = arith.addi %387, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb70(%388 : i256) loc(#loc19) -// CHECK-NEXT: ^bb76: // 2 preds: ^bb68, ^bb70 -// CHECK-NEXT: %389 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c24_i256, %389 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %390 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %391 = "llvm.intrcall"(%390, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb77(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb77(%392: i256 loc({{.*}}:51:4)): // 2 preds: ^bb76, ^bb92 -// CHECK-NEXT: %393 = arith.cmpi ult, %392, %350 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %393, ^bb78(%392 : i256), ^bb93(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb78(%394: i256 loc({{.*}}:51:4)): // pred: ^bb77 -// CHECK-NEXT: %395 = arith.addi %353, %394 : i256 loc(#loc19) -// CHECK-NEXT: %396 = arith.addi %391, %394 : i256 loc(#loc19) -// CHECK-NEXT: %397 = arith.cmpi ne, %395, %396 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %397, ^bb79, ^bb92(%394 : i256) loc(#loc19) -// CHECK-NEXT: ^bb79: // pred: ^bb78 -// CHECK-NEXT: %398 = llvm.inttoptr %395 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %399 = llvm.load %398 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %400 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %395, %400 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %401 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %402 = "llvm.intrcall"(%401, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %403 = arith.cmpi ugt, %399, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %403, ^bb80, ^bb81 loc(#loc19) -// CHECK-NEXT: ^bb80: // pred: ^bb79 -// CHECK-NEXT: %404 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %404 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %405 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %405 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %406 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%406, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb81 loc(#loc19) -// CHECK-NEXT: ^bb81: // 2 preds: ^bb79, ^bb80 -// CHECK-NEXT: %407 = llvm.inttoptr %396 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %408 = llvm.load %407 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %409 = llvm.inttoptr %396 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %399, %409 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %410 = arith.cmpi ult, %399, %408 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %410, ^bb82, ^bb87 loc(#loc19) -// CHECK-NEXT: ^bb82: // pred: ^bb81 -// CHECK-NEXT: %411 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %396, %411 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %412 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %413 = "llvm.intrcall"(%412, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %414 = arith.addi %399, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %415 = arith.divui %414, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %416 = arith.addi %413, %415 : i256 loc(#loc19) -// CHECK-NEXT: %417 = arith.remui %399, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %418 = arith.cmpi ne, %417, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %418, ^bb83, ^bb84 loc(#loc19) +// CHECK-NEXT: %270 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %270 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %271 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %271 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %272 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%272, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb50 loc(#loc5) +// CHECK-NEXT: ^bb50: // 2 preds: ^bb48, ^bb49 +// CHECK-NEXT: %273 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %274 = llvm.load %273 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %275 = llvm.inttoptr %c24_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %265, %275 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %276 = arith.cmpi ult, %265, %274 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %276, ^bb51, ^bb58 loc(#loc5) +// CHECK-NEXT: ^bb51: // pred: ^bb50 +// CHECK-NEXT: %277 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c24_i256, %277 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %278 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %279 = "llvm.intrcall"(%278, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %280 = arith.addi %279, %265 : i256 loc(#loc5) +// CHECK-NEXT: %281 = arith.addi %279, %274 : i256 loc(#loc5) +// CHECK-NEXT: %282 = arith.subi %281, %280 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb52(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb52(%283: i256 loc({{.*}}:51:4)): // 2 preds: ^bb51, ^bb57 +// CHECK-NEXT: %284 = arith.cmpi ult, %283, %282 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %284, ^bb53(%283 : i256), ^bb58 loc(#loc5) +// CHECK-NEXT: ^bb53(%285: i256 loc({{.*}}:51:4)): // pred: ^bb52 +// CHECK-NEXT: %286 = arith.addi %280, %285 : i256 loc(#loc5) +// CHECK-NEXT: %287 = llvm.inttoptr %286 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %288 = llvm.load %287 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %289 = llvm.inttoptr %286 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %289 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %290 = arith.cmpi ugt, %288, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %290, ^bb54, ^bb57(%285 : i256) loc(#loc5) +// CHECK-NEXT: ^bb54: // pred: ^bb53 +// CHECK-NEXT: %291 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %286, %291 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %292 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %293 = "llvm.intrcall"(%292, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %294 = arith.addi %288, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %295 = arith.divui %294, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb55(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb55(%296: i256 loc({{.*}}:51:4)): // 2 preds: ^bb54, ^bb56 +// CHECK-NEXT: %297 = arith.cmpi ult, %296, %295 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %297, ^bb56(%296 : i256), ^bb57(%285 : i256) loc(#loc5) +// CHECK-NEXT: ^bb56(%298: i256 loc({{.*}}:51:4)): // pred: ^bb55 +// CHECK-NEXT: %299 = arith.addi %293, %298 : i256 loc(#loc5) +// CHECK-NEXT: %300 = llvm.inttoptr %299 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %300 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %301 = arith.addi %298, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb55(%301 : i256) loc(#loc5) +// CHECK-NEXT: ^bb57(%302: i256 loc({{.*}}:51:4)): // 2 preds: ^bb53, ^bb55 +// CHECK-NEXT: %303 = arith.addi %302, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb52(%303 : i256) loc(#loc5) +// CHECK-NEXT: ^bb58: // 2 preds: ^bb50, ^bb52 +// CHECK-NEXT: %304 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c24_i256, %304 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %305 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %306 = "llvm.intrcall"(%305, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb59(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb59(%307: i256 loc({{.*}}:51:4)): // 2 preds: ^bb58, ^bb74 +// CHECK-NEXT: %308 = arith.cmpi ult, %307, %265 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %308, ^bb60(%307 : i256), ^bb75(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb60(%309: i256 loc({{.*}}:51:4)): // pred: ^bb59 +// CHECK-NEXT: %310 = arith.addi %268, %309 : i256 loc(#loc5) +// CHECK-NEXT: %311 = arith.addi %306, %309 : i256 loc(#loc5) +// CHECK-NEXT: %312 = arith.cmpi ne, %310, %311 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %312, ^bb61, ^bb74(%309 : i256) loc(#loc5) +// CHECK-NEXT: ^bb61: // pred: ^bb60 +// CHECK-NEXT: %313 = llvm.inttoptr %310 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %314 = llvm.load %313 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %315 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %310, %315 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %316 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %317 = "llvm.intrcall"(%316, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %318 = arith.cmpi ugt, %314, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %318, ^bb62, ^bb63 loc(#loc5) +// CHECK-NEXT: ^bb62: // pred: ^bb61 +// CHECK-NEXT: %319 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %319 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %320 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %320 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %321 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%321, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb63 loc(#loc5) +// CHECK-NEXT: ^bb63: // 2 preds: ^bb61, ^bb62 +// CHECK-NEXT: %322 = llvm.inttoptr %311 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %323 = llvm.load %322 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %324 = llvm.inttoptr %311 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %314, %324 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %325 = arith.cmpi ult, %314, %323 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %325, ^bb64, ^bb69 loc(#loc5) +// CHECK-NEXT: ^bb64: // pred: ^bb63 +// CHECK-NEXT: %326 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %311, %326 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %327 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %328 = "llvm.intrcall"(%327, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %329 = arith.addi %314, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %330 = arith.divui %329, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %331 = arith.addi %328, %330 : i256 loc(#loc5) +// CHECK-NEXT: %332 = arith.remui %314, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %333 = arith.cmpi ne, %332, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %333, ^bb65, ^bb66 loc(#loc5) +// CHECK-NEXT: ^bb65: // pred: ^bb64 +// CHECK-NEXT: %334 = arith.muli %332, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %335 = arith.subi %c256_i256, %334 : i256 loc(#loc5) +// CHECK-NEXT: %336 = arith.shrui %c-1_i256, %335 : i256 loc(#loc5) +// CHECK-NEXT: %337 = arith.subi %331, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %338 = llvm.inttoptr %337 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %339 = llvm.load %338 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %340 = arith.andi %339, %336 : i256 loc(#loc5) +// CHECK-NEXT: %341 = llvm.inttoptr %337 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %340, %341 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb66 loc(#loc5) +// CHECK-NEXT: ^bb66: // 2 preds: ^bb64, ^bb65 +// CHECK-NEXT: %342 = arith.addi %323, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %343 = arith.divui %342, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %344 = arith.addi %328, %343 : i256 loc(#loc5) +// CHECK-NEXT: %345 = arith.subi %344, %331 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb67(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb67(%346: i256 loc({{.*}}:51:4)): // 2 preds: ^bb66, ^bb68 +// CHECK-NEXT: %347 = arith.cmpi ult, %346, %345 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %347, ^bb68(%346 : i256), ^bb69 loc(#loc5) +// CHECK-NEXT: ^bb68(%348: i256 loc({{.*}}:51:4)): // pred: ^bb67 +// CHECK-NEXT: %349 = arith.addi %331, %348 : i256 loc(#loc5) +// CHECK-NEXT: %350 = llvm.inttoptr %349 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %350 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %351 = arith.addi %348, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb67(%351 : i256) loc(#loc5) +// CHECK-NEXT: ^bb69: // 2 preds: ^bb63, ^bb67 +// CHECK-NEXT: %352 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %311, %352 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %353 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %354 = "llvm.intrcall"(%353, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %355 = arith.divui %314, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %356 = arith.remui %314, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb70(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb70(%357: i256 loc({{.*}}:51:4)): // 2 preds: ^bb69, ^bb71 +// CHECK-NEXT: %358 = arith.cmpi ult, %357, %355 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %358, ^bb71(%357 : i256), ^bb72 loc(#loc5) +// CHECK-NEXT: ^bb71(%359: i256 loc({{.*}}:51:4)): // pred: ^bb70 +// CHECK-NEXT: %360 = arith.addi %317, %359 : i256 loc(#loc5) +// CHECK-NEXT: %361 = arith.addi %354, %359 : i256 loc(#loc5) +// CHECK-NEXT: %362 = llvm.inttoptr %360 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %363 = llvm.load %362 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %364 = llvm.inttoptr %361 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %363, %364 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %365 = arith.addi %359, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb70(%365 : i256) loc(#loc5) +// CHECK-NEXT: ^bb72: // pred: ^bb70 +// CHECK-NEXT: %366 = arith.cmpi ne, %356, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %366, ^bb73, ^bb74(%309 : i256) loc(#loc5) +// CHECK-NEXT: ^bb73: // pred: ^bb72 +// CHECK-NEXT: %367 = arith.addi %317, %355 : i256 loc(#loc5) +// CHECK-NEXT: %368 = arith.addi %354, %355 : i256 loc(#loc5) +// CHECK-NEXT: %369 = llvm.inttoptr %367 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %370 = llvm.load %369 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %371 = arith.muli %356, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %372 = arith.shli %c1_i256, %371 : i256 loc(#loc5) +// CHECK-NEXT: %373 = arith.subi %372, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %374 = arith.andi %370, %373 : i256 loc(#loc5) +// CHECK-NEXT: %375 = llvm.inttoptr %368 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %374, %375 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb74(%309 : i256) loc(#loc5) +// CHECK-NEXT: ^bb74(%376: i256 loc({{.*}}:51:4)): // 3 preds: ^bb60, ^bb72, ^bb73 +// CHECK-NEXT: %377 = arith.addi %376, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb59(%377 : i256) loc(#loc5) +// CHECK-NEXT: ^bb75(%378: i256 loc({{.*}}:51:4)): // 2 preds: ^bb59, ^bb76 +// CHECK-NEXT: %379 = arith.cmpi ult, %378, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %379, ^bb76(%378 : i256), ^bb77 loc(#loc5) +// CHECK-NEXT: ^bb76(%380: i256 loc({{.*}}:51:4)): // pred: ^bb75 +// CHECK-NEXT: %381 = arith.addi %380, %c84_i256 : i256 loc(#loc5) +// CHECK-NEXT: %382 = arith.addi %380, %c25_i256 : i256 loc(#loc5) +// CHECK-NEXT: %383 = llvm.inttoptr %381 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %384 = llvm.load %383 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %385 = arith.andi %384, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) +// CHECK-NEXT: %386 = llvm.inttoptr %382 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %385, %386 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %387 = arith.addi %380, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb75(%387 : i256) loc(#loc5) +// CHECK-NEXT: ^bb77: // pred: ^bb75 +// CHECK-NEXT: %388 = llvm.inttoptr %c86_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %389 = llvm.load %388 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %390 = arith.andi %389, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc5) +// CHECK-NEXT: %391 = arith.shrui %389, %c192_i256 : i256 loc(#loc5) +// CHECK-NEXT: %392 = arith.andi %391, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %393 = arith.shli %392, %c192_i256 : i256 loc(#loc5) +// CHECK-NEXT: %394 = arith.ori %390, %393 : i256 loc(#loc5) +// CHECK-NEXT: %395 = arith.shrui %389, %c200_i256 : i256 loc(#loc5) +// CHECK-NEXT: %396 = arith.andi %395, %c4294967295_i256 : i256 loc(#loc5) +// CHECK-NEXT: %397 = arith.shli %396, %c200_i256 : i256 loc(#loc5) +// CHECK-NEXT: %398 = arith.ori %394, %397 : i256 loc(#loc5) +// CHECK-NEXT: %399 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %400 = llvm.load %399 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %401 = arith.andi %400, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc5) +// CHECK-NEXT: %402 = arith.ori %401, %398 : i256 loc(#loc5) +// CHECK-NEXT: %403 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %402, %403 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb78(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb78(%404: i256 loc({{.*}}:51:4)): // 2 preds: ^bb77, ^bb79 +// CHECK-NEXT: %405 = arith.cmpi ult, %404, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %405, ^bb79(%404 : i256), ^bb80 loc(#loc5) +// CHECK-NEXT: ^bb79(%406: i256 loc({{.*}}:51:4)): // pred: ^bb78 +// CHECK-NEXT: %407 = arith.addi %406, %c87_i256 : i256 loc(#loc5) +// CHECK-NEXT: %408 = arith.addi %406, %c28_i256 : i256 loc(#loc5) +// CHECK-NEXT: %409 = llvm.inttoptr %407 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %410 = llvm.load %409 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %411 = arith.andi %410, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) +// CHECK-NEXT: %412 = llvm.inttoptr %408 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %411, %412 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %413 = arith.addi %406, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb78(%413 : i256) loc(#loc5) +// CHECK-NEXT: ^bb80: // pred: ^bb78 +// CHECK-NEXT: %414 = llvm.inttoptr %c89_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %415 = llvm.load %414 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %416 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c89_i256, %416 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %417 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %418 = "llvm.intrcall"(%417, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %419 = arith.cmpi ugt, %415, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %419, ^bb81, ^bb82 loc(#loc5) +// CHECK-NEXT: ^bb81: // pred: ^bb80 +// CHECK-NEXT: %420 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %420 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %421 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %421 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %422 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%422, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb82 loc(#loc5) +// CHECK-NEXT: ^bb82: // 2 preds: ^bb80, ^bb81 +// CHECK-NEXT: %423 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %424 = llvm.load %423 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %425 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %415, %425 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %426 = arith.cmpi ult, %415, %424 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %426, ^bb83, ^bb101 loc(#loc5) // CHECK-NEXT: ^bb83: // pred: ^bb82 -// CHECK-NEXT: %419 = arith.muli %417, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %420 = arith.subi %c256_i256, %419 : i256 loc(#loc19) -// CHECK-NEXT: %421 = arith.shrui %c-1_i256, %420 : i256 loc(#loc19) -// CHECK-NEXT: %422 = arith.subi %416, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %423 = llvm.inttoptr %422 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %424 = llvm.load %423 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %425 = arith.andi %424, %421 : i256 loc(#loc19) -// CHECK-NEXT: %426 = llvm.inttoptr %422 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %425, %426 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb84 loc(#loc19) -// CHECK-NEXT: ^bb84: // 2 preds: ^bb82, ^bb83 -// CHECK-NEXT: %427 = arith.addi %408, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %428 = arith.divui %427, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %429 = arith.addi %413, %428 : i256 loc(#loc19) -// CHECK-NEXT: %430 = arith.subi %429, %416 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb85(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb85(%431: i256 loc({{.*}}:51:4)): // 2 preds: ^bb84, ^bb86 -// CHECK-NEXT: %432 = arith.cmpi ult, %431, %430 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %432, ^bb86(%431 : i256), ^bb87 loc(#loc19) -// CHECK-NEXT: ^bb86(%433: i256 loc({{.*}}:51:4)): // pred: ^bb85 -// CHECK-NEXT: %434 = arith.addi %416, %433 : i256 loc(#loc19) -// CHECK-NEXT: %435 = llvm.inttoptr %434 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %435 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %436 = arith.addi %433, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb85(%436 : i256) loc(#loc19) -// CHECK-NEXT: ^bb87: // 2 preds: ^bb81, ^bb85 -// CHECK-NEXT: %437 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %396, %437 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %438 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %439 = "llvm.intrcall"(%438, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %440 = arith.divui %399, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %441 = arith.remui %399, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb88(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb88(%442: i256 loc({{.*}}:51:4)): // 2 preds: ^bb87, ^bb89 -// CHECK-NEXT: %443 = arith.cmpi ult, %442, %440 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %443, ^bb89(%442 : i256), ^bb90 loc(#loc19) -// CHECK-NEXT: ^bb89(%444: i256 loc({{.*}}:51:4)): // pred: ^bb88 -// CHECK-NEXT: %445 = arith.addi %402, %444 : i256 loc(#loc19) -// CHECK-NEXT: %446 = arith.addi %439, %444 : i256 loc(#loc19) -// CHECK-NEXT: %447 = llvm.inttoptr %445 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %448 = llvm.load %447 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %449 = llvm.inttoptr %446 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %448, %449 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %450 = arith.addi %444, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb88(%450 : i256) loc(#loc19) -// CHECK-NEXT: ^bb90: // pred: ^bb88 -// CHECK-NEXT: %451 = arith.cmpi ne, %441, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %451, ^bb91, ^bb92(%394 : i256) loc(#loc19) -// CHECK-NEXT: ^bb91: // pred: ^bb90 -// CHECK-NEXT: %452 = arith.addi %402, %440 : i256 loc(#loc19) -// CHECK-NEXT: %453 = arith.addi %439, %440 : i256 loc(#loc19) -// CHECK-NEXT: %454 = llvm.inttoptr %452 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %455 = llvm.load %454 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %456 = arith.muli %441, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %457 = arith.shli %c1_i256, %456 : i256 loc(#loc19) -// CHECK-NEXT: %458 = arith.subi %457, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %459 = arith.andi %455, %458 : i256 loc(#loc19) -// CHECK-NEXT: %460 = llvm.inttoptr %453 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %459, %460 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb92(%394 : i256) loc(#loc19) -// CHECK-NEXT: ^bb92(%461: i256 loc({{.*}}:51:4)): // 3 preds: ^bb78, ^bb90, ^bb91 -// CHECK-NEXT: %462 = arith.addi %461, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb77(%462 : i256) loc(#loc19) -// CHECK-NEXT: ^bb93(%463: i256 loc({{.*}}:51:4)): // 2 preds: ^bb77, ^bb94 -// CHECK-NEXT: %464 = arith.cmpi ult, %463, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %464, ^bb94(%463 : i256), ^bb95 loc(#loc19) -// CHECK-NEXT: ^bb94(%465: i256 loc({{.*}}:51:4)): // pred: ^bb93 -// CHECK-NEXT: %466 = arith.addi %465, %c84_i256 : i256 loc(#loc19) -// CHECK-NEXT: %467 = arith.addi %465, %c25_i256 : i256 loc(#loc19) -// CHECK-NEXT: %468 = llvm.inttoptr %466 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %469 = llvm.load %468 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %470 = arith.andi %469, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) -// CHECK-NEXT: %471 = llvm.inttoptr %467 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %470, %471 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %472 = arith.addi %465, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb93(%472 : i256) loc(#loc19) -// CHECK-NEXT: ^bb95: // pred: ^bb93 -// CHECK-NEXT: %473 = llvm.inttoptr %c86_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %474 = llvm.load %473 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %475 = arith.andi %474, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc19) -// CHECK-NEXT: %476 = arith.shrui %474, %c192_i256 : i256 loc(#loc19) -// CHECK-NEXT: %477 = arith.andi %476, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %478 = arith.shli %477, %c192_i256 : i256 loc(#loc19) -// CHECK-NEXT: %479 = arith.ori %475, %478 : i256 loc(#loc19) -// CHECK-NEXT: %480 = arith.shrui %474, %c200_i256 : i256 loc(#loc19) -// CHECK-NEXT: %481 = arith.andi %480, %c4294967295_i256 : i256 loc(#loc19) -// CHECK-NEXT: %482 = arith.shli %481, %c200_i256 : i256 loc(#loc19) -// CHECK-NEXT: %483 = arith.ori %479, %482 : i256 loc(#loc19) -// CHECK-NEXT: %484 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %485 = llvm.load %484 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %486 = arith.andi %485, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc19) -// CHECK-NEXT: %487 = arith.ori %486, %483 : i256 loc(#loc19) -// CHECK-NEXT: %488 = llvm.inttoptr %c27_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %487, %488 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb96(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb96(%489: i256 loc({{.*}}:51:4)): // 2 preds: ^bb95, ^bb97 -// CHECK-NEXT: %490 = arith.cmpi ult, %489, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %490, ^bb97(%489 : i256), ^bb98 loc(#loc19) -// CHECK-NEXT: ^bb97(%491: i256 loc({{.*}}:51:4)): // pred: ^bb96 -// CHECK-NEXT: %492 = arith.addi %491, %c87_i256 : i256 loc(#loc19) -// CHECK-NEXT: %493 = arith.addi %491, %c28_i256 : i256 loc(#loc19) -// CHECK-NEXT: %494 = llvm.inttoptr %492 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %495 = llvm.load %494 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %496 = arith.andi %495, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) -// CHECK-NEXT: %497 = llvm.inttoptr %493 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %496, %497 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %498 = arith.addi %491, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb96(%498 : i256) loc(#loc19) -// CHECK-NEXT: ^bb98: // pred: ^bb96 -// CHECK-NEXT: %499 = llvm.inttoptr %c89_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %500 = llvm.load %499 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %501 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c89_i256, %501 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %502 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %503 = "llvm.intrcall"(%502, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %504 = arith.cmpi ugt, %500, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %504, ^bb99, ^bb100 loc(#loc19) -// CHECK-NEXT: ^bb99: // pred: ^bb98 -// CHECK-NEXT: %505 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %505 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %506 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %506 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %507 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%507, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb100 loc(#loc19) -// CHECK-NEXT: ^bb100: // 2 preds: ^bb98, ^bb99 -// CHECK-NEXT: %508 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %509 = llvm.load %508 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %510 = llvm.inttoptr %c30_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %500, %510 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %511 = arith.cmpi ult, %500, %509 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %511, ^bb101, ^bb116 loc(#loc19) -// CHECK-NEXT: ^bb101: // pred: ^bb100 -// CHECK-NEXT: %512 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c30_i256, %512 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %513 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %514 = "llvm.intrcall"(%513, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %515 = arith.addi %514, %500 : i256 loc(#loc19) -// CHECK-NEXT: %516 = arith.addi %514, %509 : i256 loc(#loc19) -// CHECK-NEXT: %517 = arith.subi %516, %515 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb102(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb102(%518: i256 loc({{.*}}:51:4)): // 2 preds: ^bb101, ^bb115 -// CHECK-NEXT: %519 = arith.cmpi ult, %518, %517 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %519, ^bb103(%518 : i256), ^bb116 loc(#loc19) -// CHECK-NEXT: ^bb103(%520: i256 loc({{.*}}:51:4)): // pred: ^bb102 -// CHECK-NEXT: %521 = arith.addi %515, %520 : i256 loc(#loc19) -// CHECK-NEXT: %522 = llvm.inttoptr %521 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %523 = llvm.load %522 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %524 = llvm.inttoptr %521 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %524 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %525 = arith.cmpi ugt, %523, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %525, ^bb104, ^bb115(%520 : i256) loc(#loc19) +// CHECK-NEXT: %427 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c30_i256, %427 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %428 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %429 = "llvm.intrcall"(%428, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %430 = arith.addi %429, %415 : i256 loc(#loc5) +// CHECK-NEXT: %431 = arith.addi %429, %424 : i256 loc(#loc5) +// CHECK-NEXT: %432 = arith.subi %431, %430 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb84(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb84(%433: i256 loc({{.*}}:51:4)): // 2 preds: ^bb83, ^bb100 +// CHECK-NEXT: %434 = arith.cmpi ult, %433, %432 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %434, ^bb85(%433 : i256), ^bb101 loc(#loc5) +// CHECK-NEXT: ^bb85(%435: i256 loc({{.*}}:51:4)): // pred: ^bb84 +// CHECK-NEXT: %436 = arith.addi %430, %435 : i256 loc(#loc5) +// CHECK-NEXT: %437 = llvm.inttoptr %436 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %438 = llvm.load %437 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %439 = llvm.inttoptr %436 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %439 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %440 = arith.cmpi ugt, %438, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %440, ^bb86, ^bb100(%435 : i256) loc(#loc5) +// CHECK-NEXT: ^bb86: // pred: ^bb85 +// CHECK-NEXT: %441 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %436, %441 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %442 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %443 = "llvm.intrcall"(%442, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %444 = arith.muli %438, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb87(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb87(%445: i256 loc({{.*}}:51:4)): // 2 preds: ^bb86, ^bb99 +// CHECK-NEXT: %446 = arith.cmpi ult, %445, %444 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %446, ^bb88(%445 : i256), ^bb100(%435 : i256) loc(#loc5) +// CHECK-NEXT: ^bb88(%447: i256 loc({{.*}}:51:4)): // pred: ^bb87 +// CHECK-NEXT: %448 = arith.addi %443, %447 : i256 loc(#loc5) +// CHECK-NEXT: %449 = llvm.inttoptr %448 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %449 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %450 = arith.addi %448, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %451 = llvm.inttoptr %450 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %452 = llvm.load %451 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %453 = llvm.inttoptr %450 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %453 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %454 = arith.cmpi ugt, %452, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %454, ^bb89, ^bb96 loc(#loc5) +// CHECK-NEXT: ^bb89: // pred: ^bb88 +// CHECK-NEXT: %455 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %450, %455 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %456 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %457 = "llvm.intrcall"(%456, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb90(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb90(%458: i256 loc({{.*}}:51:4)): // 2 preds: ^bb89, ^bb95 +// CHECK-NEXT: %459 = arith.cmpi ult, %458, %452 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %459, ^bb91(%458 : i256), ^bb96 loc(#loc5) +// CHECK-NEXT: ^bb91(%460: i256 loc({{.*}}:51:4)): // pred: ^bb90 +// CHECK-NEXT: %461 = arith.addi %457, %460 : i256 loc(#loc5) +// CHECK-NEXT: %462 = llvm.inttoptr %461 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %463 = llvm.load %462 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %464 = llvm.inttoptr %461 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %464 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %465 = arith.cmpi ugt, %463, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %465, ^bb92, ^bb95(%460 : i256) loc(#loc5) +// CHECK-NEXT: ^bb92: // pred: ^bb91 +// CHECK-NEXT: %466 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %461, %466 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %467 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %468 = "llvm.intrcall"(%467, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %469 = arith.addi %463, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %470 = arith.divui %469, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb93(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb93(%471: i256 loc({{.*}}:51:4)): // 2 preds: ^bb92, ^bb94 +// CHECK-NEXT: %472 = arith.cmpi ult, %471, %470 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %472, ^bb94(%471 : i256), ^bb95(%460 : i256) loc(#loc5) +// CHECK-NEXT: ^bb94(%473: i256 loc({{.*}}:51:4)): // pred: ^bb93 +// CHECK-NEXT: %474 = arith.addi %468, %473 : i256 loc(#loc5) +// CHECK-NEXT: %475 = llvm.inttoptr %474 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %475 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %476 = arith.addi %473, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb93(%476 : i256) loc(#loc5) +// CHECK-NEXT: ^bb95(%477: i256 loc({{.*}}:51:4)): // 2 preds: ^bb91, ^bb93 +// CHECK-NEXT: %478 = arith.addi %477, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb90(%478 : i256) loc(#loc5) +// CHECK-NEXT: ^bb96: // 2 preds: ^bb88, ^bb90 +// CHECK-NEXT: %479 = arith.addi %448, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb97(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb97(%480: i256 loc({{.*}}:51:4)): // 2 preds: ^bb96, ^bb98 +// CHECK-NEXT: %481 = arith.cmpi ult, %480, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %481, ^bb98(%480 : i256), ^bb99 loc(#loc5) +// CHECK-NEXT: ^bb98(%482: i256 loc({{.*}}:51:4)): // pred: ^bb97 +// CHECK-NEXT: %483 = arith.addi %479, %482 : i256 loc(#loc5) +// CHECK-NEXT: %484 = llvm.inttoptr %483 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %484 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %485 = arith.addi %482, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb97(%485 : i256) {loop_annotation = #loop_annotation} loc(#loc5) +// CHECK-NEXT: ^bb99: // pred: ^bb97 +// CHECK-NEXT: %486 = arith.addi %448, %c4_i256 : i256 loc(#loc5) +// CHECK-NEXT: %487 = llvm.inttoptr %486 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %487 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %488 = arith.addi %447, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb87(%488 : i256) loc(#loc5) +// CHECK-NEXT: ^bb100(%489: i256 loc({{.*}}:51:4)): // 2 preds: ^bb85, ^bb87 +// CHECK-NEXT: %490 = arith.addi %489, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb84(%490 : i256) loc(#loc5) +// CHECK-NEXT: ^bb101: // 2 preds: ^bb82, ^bb84 +// CHECK-NEXT: %491 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c30_i256, %491 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %492 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %493 = "llvm.intrcall"(%492, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb102(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb102(%494: i256 loc({{.*}}:51:4)): // 2 preds: ^bb101, ^bb157 +// CHECK-NEXT: %495 = arith.cmpi ult, %494, %415 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %495, ^bb103(%494 : i256), ^bb158(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb103(%496: i256 loc({{.*}}:51:4)): // pred: ^bb102 +// CHECK-NEXT: %497 = arith.addi %418, %496 : i256 loc(#loc5) +// CHECK-NEXT: %498 = arith.addi %493, %496 : i256 loc(#loc5) +// CHECK-NEXT: %499 = arith.cmpi ne, %497, %498 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %499, ^bb104, ^bb157(%496 : i256) loc(#loc5) // CHECK-NEXT: ^bb104: // pred: ^bb103 -// CHECK-NEXT: %526 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %521, %526 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %527 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %528 = "llvm.intrcall"(%527, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %529 = arith.muli %523, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb105(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb105(%530: i256 loc({{.*}}:51:4)): // 2 preds: ^bb104, ^bb114 -// CHECK-NEXT: %531 = arith.cmpi ult, %530, %529 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %531, ^bb106(%530 : i256), ^bb115(%520 : i256) loc(#loc19) -// CHECK-NEXT: ^bb106(%532: i256 loc({{.*}}:51:4)): // pred: ^bb105 -// CHECK-NEXT: %533 = arith.addi %528, %532 : i256 loc(#loc19) -// CHECK-NEXT: %534 = llvm.inttoptr %533 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %534 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %535 = arith.addi %533, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %536 = llvm.inttoptr %535 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %537 = llvm.load %536 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %538 = llvm.inttoptr %535 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %538 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %539 = arith.cmpi ugt, %537, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %539, ^bb107, ^bb114 loc(#loc19) +// CHECK-NEXT: %500 = llvm.inttoptr %497 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %501 = llvm.load %500 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %502 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %497, %502 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %503 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %504 = "llvm.intrcall"(%503, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %505 = arith.cmpi ugt, %501, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %505, ^bb105, ^bb106 loc(#loc5) +// CHECK-NEXT: ^bb105: // pred: ^bb104 +// CHECK-NEXT: %506 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %506 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %507 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %507 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %508 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%508, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb106 loc(#loc5) +// CHECK-NEXT: ^bb106: // 2 preds: ^bb104, ^bb105 +// CHECK-NEXT: %509 = llvm.inttoptr %498 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %510 = llvm.load %509 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %511 = llvm.inttoptr %498 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %501, %511 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %512 = arith.cmpi ult, %501, %510 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %512, ^bb107, ^bb121 loc(#loc5) // CHECK-NEXT: ^bb107: // pred: ^bb106 -// CHECK-NEXT: %540 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %535, %540 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %541 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %542 = "llvm.intrcall"(%541, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb108(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb108(%543: i256 loc({{.*}}:51:4)): // 2 preds: ^bb107, ^bb113 -// CHECK-NEXT: %544 = arith.cmpi ult, %543, %537 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %544, ^bb109(%543 : i256), ^bb114 loc(#loc19) -// CHECK-NEXT: ^bb109(%545: i256 loc({{.*}}:51:4)): // pred: ^bb108 -// CHECK-NEXT: %546 = arith.addi %542, %545 : i256 loc(#loc19) -// CHECK-NEXT: %547 = llvm.inttoptr %546 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %548 = llvm.load %547 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %549 = llvm.inttoptr %546 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %549 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %550 = arith.cmpi ugt, %548, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %550, ^bb110, ^bb113(%545 : i256) loc(#loc19) +// CHECK-NEXT: %513 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %498, %513 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %514 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %515 = "llvm.intrcall"(%514, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %516 = arith.muli %501, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: %517 = arith.addi %515, %516 : i256 loc(#loc5) +// CHECK-NEXT: %518 = arith.muli %510, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: %519 = arith.addi %515, %518 : i256 loc(#loc5) +// CHECK-NEXT: %520 = arith.subi %519, %517 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb108(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb108(%521: i256 loc({{.*}}:51:4)): // 2 preds: ^bb107, ^bb120 +// CHECK-NEXT: %522 = arith.cmpi ult, %521, %520 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %522, ^bb109(%521 : i256), ^bb121 loc(#loc5) +// CHECK-NEXT: ^bb109(%523: i256 loc({{.*}}:51:4)): // pred: ^bb108 +// CHECK-NEXT: %524 = arith.addi %517, %523 : i256 loc(#loc5) +// CHECK-NEXT: %525 = llvm.inttoptr %524 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %525 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %526 = arith.addi %524, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %527 = llvm.inttoptr %526 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %528 = llvm.load %527 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %529 = llvm.inttoptr %526 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %529 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %530 = arith.cmpi ugt, %528, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %530, ^bb110, ^bb117 loc(#loc5) // CHECK-NEXT: ^bb110: // pred: ^bb109 -// CHECK-NEXT: %551 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %546, %551 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %552 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %553 = "llvm.intrcall"(%552, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %554 = arith.addi %548, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %555 = arith.divui %554, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb111(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb111(%556: i256 loc({{.*}}:51:4)): // 2 preds: ^bb110, ^bb112 -// CHECK-NEXT: %557 = arith.cmpi ult, %556, %555 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %557, ^bb112(%556 : i256), ^bb113(%545 : i256) loc(#loc19) -// CHECK-NEXT: ^bb112(%558: i256 loc({{.*}}:51:4)): // pred: ^bb111 -// CHECK-NEXT: %559 = arith.addi %553, %558 : i256 loc(#loc19) -// CHECK-NEXT: %560 = llvm.inttoptr %559 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %560 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %561 = arith.addi %558, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb111(%561 : i256) loc(#loc19) -// CHECK-NEXT: ^bb113(%562: i256 loc({{.*}}:51:4)): // 2 preds: ^bb109, ^bb111 -// CHECK-NEXT: %563 = arith.addi %562, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb108(%563 : i256) loc(#loc19) -// CHECK-NEXT: ^bb114: // 2 preds: ^bb106, ^bb108 -// CHECK-NEXT: %564 = arith.addi %533, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %565 = llvm.inttoptr %564 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %565 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %566 = arith.addi %533, %c3_i256 : i256 loc(#loc19) -// CHECK-NEXT: %567 = llvm.inttoptr %566 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %567 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %568 = arith.addi %533, %c4_i256 : i256 loc(#loc19) -// CHECK-NEXT: %569 = llvm.inttoptr %568 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %569 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %570 = arith.addi %532, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb105(%570 : i256) loc(#loc19) -// CHECK-NEXT: ^bb115(%571: i256 loc({{.*}}:51:4)): // 2 preds: ^bb103, ^bb105 -// CHECK-NEXT: %572 = arith.addi %571, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb102(%572 : i256) loc(#loc19) -// CHECK-NEXT: ^bb116: // 2 preds: ^bb100, ^bb102 -// CHECK-NEXT: %573 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c30_i256, %573 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %574 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %575 = "llvm.intrcall"(%574, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb117(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb117(%576: i256 loc({{.*}}:51:4)): // 2 preds: ^bb116, ^bb169 -// CHECK-NEXT: %577 = arith.cmpi ult, %576, %500 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %577, ^bb118(%576 : i256), ^bb170(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb118(%578: i256 loc({{.*}}:51:4)): // pred: ^bb117 -// CHECK-NEXT: %579 = arith.addi %503, %578 : i256 loc(#loc19) -// CHECK-NEXT: %580 = arith.addi %575, %578 : i256 loc(#loc19) -// CHECK-NEXT: %581 = arith.cmpi ne, %579, %580 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %581, ^bb119, ^bb169(%578 : i256) loc(#loc19) -// CHECK-NEXT: ^bb119: // pred: ^bb118 -// CHECK-NEXT: %582 = llvm.inttoptr %579 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %583 = llvm.load %582 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %584 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %579, %584 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %585 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %586 = "llvm.intrcall"(%585, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %587 = arith.cmpi ugt, %583, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %587, ^bb120, ^bb121 loc(#loc19) -// CHECK-NEXT: ^bb120: // pred: ^bb119 -// CHECK-NEXT: %588 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %588 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %589 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %589 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %590 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%590, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb121 loc(#loc19) -// CHECK-NEXT: ^bb121: // 2 preds: ^bb119, ^bb120 -// CHECK-NEXT: %591 = llvm.inttoptr %580 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %592 = llvm.load %591 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %593 = llvm.inttoptr %580 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %583, %593 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %594 = arith.cmpi ult, %583, %592 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %594, ^bb122, ^bb133 loc(#loc19) -// CHECK-NEXT: ^bb122: // pred: ^bb121 -// CHECK-NEXT: %595 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %580, %595 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %596 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %597 = "llvm.intrcall"(%596, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %598 = arith.muli %583, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: %599 = arith.addi %597, %598 : i256 loc(#loc19) -// CHECK-NEXT: %600 = arith.muli %592, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: %601 = arith.addi %597, %600 : i256 loc(#loc19) -// CHECK-NEXT: %602 = arith.subi %601, %599 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb123(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb123(%603: i256 loc({{.*}}:51:4)): // 2 preds: ^bb122, ^bb132 -// CHECK-NEXT: %604 = arith.cmpi ult, %603, %602 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %604, ^bb124(%603 : i256), ^bb133 loc(#loc19) -// CHECK-NEXT: ^bb124(%605: i256 loc({{.*}}:51:4)): // pred: ^bb123 -// CHECK-NEXT: %606 = arith.addi %599, %605 : i256 loc(#loc19) -// CHECK-NEXT: %607 = llvm.inttoptr %606 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %607 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %608 = arith.addi %606, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %609 = llvm.inttoptr %608 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %610 = llvm.load %609 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %611 = llvm.inttoptr %608 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %611 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %612 = arith.cmpi ugt, %610, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %612, ^bb125, ^bb132 loc(#loc19) +// CHECK-NEXT: %531 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %526, %531 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %532 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %533 = "llvm.intrcall"(%532, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb111(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb111(%534: i256 loc({{.*}}:51:4)): // 2 preds: ^bb110, ^bb116 +// CHECK-NEXT: %535 = arith.cmpi ult, %534, %528 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %535, ^bb112(%534 : i256), ^bb117 loc(#loc5) +// CHECK-NEXT: ^bb112(%536: i256 loc({{.*}}:51:4)): // pred: ^bb111 +// CHECK-NEXT: %537 = arith.addi %533, %536 : i256 loc(#loc5) +// CHECK-NEXT: %538 = llvm.inttoptr %537 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %539 = llvm.load %538 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %540 = llvm.inttoptr %537 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %540 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %541 = arith.cmpi ugt, %539, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %541, ^bb113, ^bb116(%536 : i256) loc(#loc5) +// CHECK-NEXT: ^bb113: // pred: ^bb112 +// CHECK-NEXT: %542 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %537, %542 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %543 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %544 = "llvm.intrcall"(%543, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %545 = arith.addi %539, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %546 = arith.divui %545, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb114(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb114(%547: i256 loc({{.*}}:51:4)): // 2 preds: ^bb113, ^bb115 +// CHECK-NEXT: %548 = arith.cmpi ult, %547, %546 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %548, ^bb115(%547 : i256), ^bb116(%536 : i256) loc(#loc5) +// CHECK-NEXT: ^bb115(%549: i256 loc({{.*}}:51:4)): // pred: ^bb114 +// CHECK-NEXT: %550 = arith.addi %544, %549 : i256 loc(#loc5) +// CHECK-NEXT: %551 = llvm.inttoptr %550 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %551 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %552 = arith.addi %549, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb114(%552 : i256) loc(#loc5) +// CHECK-NEXT: ^bb116(%553: i256 loc({{.*}}:51:4)): // 2 preds: ^bb112, ^bb114 +// CHECK-NEXT: %554 = arith.addi %553, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb111(%554 : i256) loc(#loc5) +// CHECK-NEXT: ^bb117: // 2 preds: ^bb109, ^bb111 +// CHECK-NEXT: %555 = arith.addi %524, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb118(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb118(%556: i256 loc({{.*}}:51:4)): // 2 preds: ^bb117, ^bb119 +// CHECK-NEXT: %557 = arith.cmpi ult, %556, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %557, ^bb119(%556 : i256), ^bb120 loc(#loc5) +// CHECK-NEXT: ^bb119(%558: i256 loc({{.*}}:51:4)): // pred: ^bb118 +// CHECK-NEXT: %559 = arith.addi %555, %558 : i256 loc(#loc5) +// CHECK-NEXT: %560 = llvm.inttoptr %559 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %560 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %561 = arith.addi %558, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb118(%561 : i256) {loop_annotation = #loop_annotation} loc(#loc5) +// CHECK-NEXT: ^bb120: // pred: ^bb118 +// CHECK-NEXT: %562 = arith.addi %524, %c4_i256 : i256 loc(#loc5) +// CHECK-NEXT: %563 = llvm.inttoptr %562 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %563 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %564 = arith.addi %523, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb108(%564 : i256) loc(#loc5) +// CHECK-NEXT: ^bb121: // 2 preds: ^bb106, ^bb108 +// CHECK-NEXT: %565 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %498, %565 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %566 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %567 = "llvm.intrcall"(%566, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb122(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb122(%568: i256 loc({{.*}}:51:4)): // 2 preds: ^bb121, ^bb156 +// CHECK-NEXT: %569 = arith.cmpi ult, %568, %501 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %569, ^bb123(%568 : i256), ^bb157(%496 : i256) loc(#loc5) +// CHECK-NEXT: ^bb123(%570: i256 loc({{.*}}:51:4)): // pred: ^bb122 +// CHECK-NEXT: %571 = arith.muli %570, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: %572 = arith.addi %504, %571 : i256 loc(#loc5) +// CHECK-NEXT: %573 = arith.muli %570, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: %574 = arith.addi %567, %573 : i256 loc(#loc5) +// CHECK-NEXT: %575 = arith.cmpi ne, %572, %574 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %575, ^bb124, ^bb156(%570 : i256) loc(#loc5) +// CHECK-NEXT: ^bb124: // pred: ^bb123 +// CHECK-NEXT: %576 = llvm.inttoptr %572 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %577 = llvm.load %576 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %578 = arith.andi %577, %c4722366482869645213695_i256 : i256 loc(#loc5) +// CHECK-NEXT: %579 = arith.shrui %577, %c72_i256 : i256 loc(#loc5) +// CHECK-NEXT: %580 = arith.andi %579, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %581 = arith.shli %580, %c72_i256 : i256 loc(#loc5) +// CHECK-NEXT: %582 = arith.ori %578, %581 : i256 loc(#loc5) +// CHECK-NEXT: %583 = llvm.inttoptr %574 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %584 = llvm.load %583 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %585 = arith.andi %584, %c-1208925819614629174706176_i256 : i256 loc(#loc5) +// CHECK-NEXT: %586 = arith.ori %585, %582 : i256 loc(#loc5) +// CHECK-NEXT: %587 = llvm.inttoptr %574 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %586, %587 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %588 = arith.addi %572, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %589 = arith.addi %574, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %590 = arith.cmpi ne, %588, %589 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %590, ^bb125, ^bb152 loc(#loc5) // CHECK-NEXT: ^bb125: // pred: ^bb124 -// CHECK-NEXT: %613 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %608, %613 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %614 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %615 = "llvm.intrcall"(%614, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb126(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb126(%616: i256 loc({{.*}}:51:4)): // 2 preds: ^bb125, ^bb131 -// CHECK-NEXT: %617 = arith.cmpi ult, %616, %610 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %617, ^bb127(%616 : i256), ^bb132 loc(#loc19) -// CHECK-NEXT: ^bb127(%618: i256 loc({{.*}}:51:4)): // pred: ^bb126 -// CHECK-NEXT: %619 = arith.addi %615, %618 : i256 loc(#loc19) -// CHECK-NEXT: %620 = llvm.inttoptr %619 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %621 = llvm.load %620 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %622 = llvm.inttoptr %619 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %622 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %623 = arith.cmpi ugt, %621, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %623, ^bb128, ^bb131(%618 : i256) loc(#loc19) +// CHECK-NEXT: %591 = llvm.inttoptr %588 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %592 = llvm.load %591 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %593 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %588, %593 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %594 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %595 = "llvm.intrcall"(%594, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %596 = arith.cmpi ugt, %592, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %596, ^bb126, ^bb127 loc(#loc5) +// CHECK-NEXT: ^bb126: // pred: ^bb125 +// CHECK-NEXT: %597 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %597 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %598 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %598 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %599 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%599, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb127 loc(#loc5) +// CHECK-NEXT: ^bb127: // 2 preds: ^bb125, ^bb126 +// CHECK-NEXT: %600 = llvm.inttoptr %589 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %601 = llvm.load %600 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %602 = llvm.inttoptr %589 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %592, %602 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %603 = arith.cmpi ult, %592, %601 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %603, ^bb128, ^bb135 loc(#loc5) // CHECK-NEXT: ^bb128: // pred: ^bb127 -// CHECK-NEXT: %624 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %619, %624 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %625 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %626 = "llvm.intrcall"(%625, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %627 = arith.addi %621, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %628 = arith.divui %627, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb129(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb129(%629: i256 loc({{.*}}:51:4)): // 2 preds: ^bb128, ^bb130 -// CHECK-NEXT: %630 = arith.cmpi ult, %629, %628 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %630, ^bb130(%629 : i256), ^bb131(%618 : i256) loc(#loc19) -// CHECK-NEXT: ^bb130(%631: i256 loc({{.*}}:51:4)): // pred: ^bb129 -// CHECK-NEXT: %632 = arith.addi %626, %631 : i256 loc(#loc19) -// CHECK-NEXT: %633 = llvm.inttoptr %632 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %633 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %634 = arith.addi %631, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb129(%634 : i256) loc(#loc19) -// CHECK-NEXT: ^bb131(%635: i256 loc({{.*}}:51:4)): // 2 preds: ^bb127, ^bb129 -// CHECK-NEXT: %636 = arith.addi %635, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb126(%636 : i256) loc(#loc19) -// CHECK-NEXT: ^bb132: // 2 preds: ^bb124, ^bb126 -// CHECK-NEXT: %637 = arith.addi %606, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %638 = llvm.inttoptr %637 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %638 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %639 = arith.addi %606, %c3_i256 : i256 loc(#loc19) -// CHECK-NEXT: %640 = llvm.inttoptr %639 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %640 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %641 = arith.addi %606, %c4_i256 : i256 loc(#loc19) -// CHECK-NEXT: %642 = llvm.inttoptr %641 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %642 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %643 = arith.addi %605, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb123(%643 : i256) loc(#loc19) -// CHECK-NEXT: ^bb133: // 2 preds: ^bb121, ^bb123 -// CHECK-NEXT: %644 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %580, %644 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %645 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %646 = "llvm.intrcall"(%645, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb134(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb134(%647: i256 loc({{.*}}:51:4)): // 2 preds: ^bb133, ^bb168 -// CHECK-NEXT: %648 = arith.cmpi ult, %647, %583 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %648, ^bb135(%647 : i256), ^bb169(%578 : i256) loc(#loc19) -// CHECK-NEXT: ^bb135(%649: i256 loc({{.*}}:51:4)): // pred: ^bb134 -// CHECK-NEXT: %650 = arith.muli %649, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: %651 = arith.addi %586, %650 : i256 loc(#loc19) -// CHECK-NEXT: %652 = arith.muli %649, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: %653 = arith.addi %646, %652 : i256 loc(#loc19) -// CHECK-NEXT: %654 = arith.cmpi ne, %651, %653 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %654, ^bb136, ^bb168(%649 : i256) loc(#loc19) -// CHECK-NEXT: ^bb136: // pred: ^bb135 -// CHECK-NEXT: %655 = llvm.inttoptr %651 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %656 = llvm.load %655 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %657 = arith.andi %656, %c4722366482869645213695_i256 : i256 loc(#loc19) -// CHECK-NEXT: %658 = arith.shrui %656, %c72_i256 : i256 loc(#loc19) -// CHECK-NEXT: %659 = arith.andi %658, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %660 = arith.shli %659, %c72_i256 : i256 loc(#loc19) -// CHECK-NEXT: %661 = arith.ori %657, %660 : i256 loc(#loc19) -// CHECK-NEXT: %662 = llvm.inttoptr %653 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %663 = llvm.load %662 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %664 = arith.andi %663, %c-1208925819614629174706176_i256 : i256 loc(#loc19) -// CHECK-NEXT: %665 = arith.ori %664, %661 : i256 loc(#loc19) -// CHECK-NEXT: %666 = llvm.inttoptr %653 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %665, %666 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %667 = arith.addi %651, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %668 = arith.addi %653, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %669 = arith.cmpi ne, %667, %668 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %669, ^bb137, ^bb164 loc(#loc19) -// CHECK-NEXT: ^bb137: // pred: ^bb136 -// CHECK-NEXT: %670 = llvm.inttoptr %667 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %671 = llvm.load %670 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %672 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %667, %672 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %673 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %674 = "llvm.intrcall"(%673, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %675 = arith.cmpi ugt, %671, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %675, ^bb138, ^bb139 loc(#loc19) +// CHECK-NEXT: %604 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %589, %604 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %605 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %606 = "llvm.intrcall"(%605, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %607 = arith.addi %606, %592 : i256 loc(#loc5) +// CHECK-NEXT: %608 = arith.addi %606, %601 : i256 loc(#loc5) +// CHECK-NEXT: %609 = arith.subi %608, %607 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb129(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb129(%610: i256 loc({{.*}}:51:4)): // 2 preds: ^bb128, ^bb134 +// CHECK-NEXT: %611 = arith.cmpi ult, %610, %609 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %611, ^bb130(%610 : i256), ^bb135 loc(#loc5) +// CHECK-NEXT: ^bb130(%612: i256 loc({{.*}}:51:4)): // pred: ^bb129 +// CHECK-NEXT: %613 = arith.addi %607, %612 : i256 loc(#loc5) +// CHECK-NEXT: %614 = llvm.inttoptr %613 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %615 = llvm.load %614 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %616 = llvm.inttoptr %613 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %616 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %617 = arith.cmpi ugt, %615, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %617, ^bb131, ^bb134(%612 : i256) loc(#loc5) +// CHECK-NEXT: ^bb131: // pred: ^bb130 +// CHECK-NEXT: %618 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %613, %618 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %619 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %620 = "llvm.intrcall"(%619, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %621 = arith.addi %615, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %622 = arith.divui %621, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb132(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb132(%623: i256 loc({{.*}}:51:4)): // 2 preds: ^bb131, ^bb133 +// CHECK-NEXT: %624 = arith.cmpi ult, %623, %622 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %624, ^bb133(%623 : i256), ^bb134(%612 : i256) loc(#loc5) +// CHECK-NEXT: ^bb133(%625: i256 loc({{.*}}:51:4)): // pred: ^bb132 +// CHECK-NEXT: %626 = arith.addi %620, %625 : i256 loc(#loc5) +// CHECK-NEXT: %627 = llvm.inttoptr %626 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %627 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %628 = arith.addi %625, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb132(%628 : i256) loc(#loc5) +// CHECK-NEXT: ^bb134(%629: i256 loc({{.*}}:51:4)): // 2 preds: ^bb130, ^bb132 +// CHECK-NEXT: %630 = arith.addi %629, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb129(%630 : i256) loc(#loc5) +// CHECK-NEXT: ^bb135: // 2 preds: ^bb127, ^bb129 +// CHECK-NEXT: %631 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %589, %631 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %632 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %633 = "llvm.intrcall"(%632, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb136(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb136(%634: i256 loc({{.*}}:51:4)): // 2 preds: ^bb135, ^bb151 +// CHECK-NEXT: %635 = arith.cmpi ult, %634, %592 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %635, ^bb137(%634 : i256), ^bb152 loc(#loc5) +// CHECK-NEXT: ^bb137(%636: i256 loc({{.*}}:51:4)): // pred: ^bb136 +// CHECK-NEXT: %637 = arith.addi %595, %636 : i256 loc(#loc5) +// CHECK-NEXT: %638 = arith.addi %633, %636 : i256 loc(#loc5) +// CHECK-NEXT: %639 = arith.cmpi ne, %637, %638 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %639, ^bb138, ^bb151(%636 : i256) loc(#loc5) // CHECK-NEXT: ^bb138: // pred: ^bb137 -// CHECK-NEXT: %676 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %676 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %677 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %677 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %678 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%678, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb139 loc(#loc19) -// CHECK-NEXT: ^bb139: // 2 preds: ^bb137, ^bb138 -// CHECK-NEXT: %679 = llvm.inttoptr %668 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %680 = llvm.load %679 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %681 = llvm.inttoptr %668 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %671, %681 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %682 = arith.cmpi ult, %671, %680 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %682, ^bb140, ^bb147 loc(#loc19) -// CHECK-NEXT: ^bb140: // pred: ^bb139 -// CHECK-NEXT: %683 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %668, %683 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %684 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %685 = "llvm.intrcall"(%684, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %686 = arith.addi %685, %671 : i256 loc(#loc19) -// CHECK-NEXT: %687 = arith.addi %685, %680 : i256 loc(#loc19) -// CHECK-NEXT: %688 = arith.subi %687, %686 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb141(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb141(%689: i256 loc({{.*}}:51:4)): // 2 preds: ^bb140, ^bb146 -// CHECK-NEXT: %690 = arith.cmpi ult, %689, %688 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %690, ^bb142(%689 : i256), ^bb147 loc(#loc19) -// CHECK-NEXT: ^bb142(%691: i256 loc({{.*}}:51:4)): // pred: ^bb141 -// CHECK-NEXT: %692 = arith.addi %686, %691 : i256 loc(#loc19) -// CHECK-NEXT: %693 = llvm.inttoptr %692 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %694 = llvm.load %693 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %695 = llvm.inttoptr %692 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %695 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %696 = arith.cmpi ugt, %694, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %696, ^bb143, ^bb146(%691 : i256) loc(#loc19) -// CHECK-NEXT: ^bb143: // pred: ^bb142 -// CHECK-NEXT: %697 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %692, %697 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %698 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %699 = "llvm.intrcall"(%698, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %700 = arith.addi %694, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %701 = arith.divui %700, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb144(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb144(%702: i256 loc({{.*}}:51:4)): // 2 preds: ^bb143, ^bb145 -// CHECK-NEXT: %703 = arith.cmpi ult, %702, %701 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %703, ^bb145(%702 : i256), ^bb146(%691 : i256) loc(#loc19) -// CHECK-NEXT: ^bb145(%704: i256 loc({{.*}}:51:4)): // pred: ^bb144 -// CHECK-NEXT: %705 = arith.addi %699, %704 : i256 loc(#loc19) -// CHECK-NEXT: %706 = llvm.inttoptr %705 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %706 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %707 = arith.addi %704, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb144(%707 : i256) loc(#loc19) -// CHECK-NEXT: ^bb146(%708: i256 loc({{.*}}:51:4)): // 2 preds: ^bb142, ^bb144 -// CHECK-NEXT: %709 = arith.addi %708, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb141(%709 : i256) loc(#loc19) -// CHECK-NEXT: ^bb147: // 2 preds: ^bb139, ^bb141 -// CHECK-NEXT: %710 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %668, %710 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %711 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %712 = "llvm.intrcall"(%711, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb148(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb148(%713: i256 loc({{.*}}:51:4)): // 2 preds: ^bb147, ^bb163 -// CHECK-NEXT: %714 = arith.cmpi ult, %713, %671 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %714, ^bb149(%713 : i256), ^bb164 loc(#loc19) -// CHECK-NEXT: ^bb149(%715: i256 loc({{.*}}:51:4)): // pred: ^bb148 -// CHECK-NEXT: %716 = arith.addi %674, %715 : i256 loc(#loc19) -// CHECK-NEXT: %717 = arith.addi %712, %715 : i256 loc(#loc19) -// CHECK-NEXT: %718 = arith.cmpi ne, %716, %717 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %718, ^bb150, ^bb163(%715 : i256) loc(#loc19) +// CHECK-NEXT: %640 = llvm.inttoptr %637 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %641 = llvm.load %640 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %642 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %637, %642 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %643 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %644 = "llvm.intrcall"(%643, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %645 = arith.cmpi ugt, %641, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %645, ^bb139, ^bb140 loc(#loc5) +// CHECK-NEXT: ^bb139: // pred: ^bb138 +// CHECK-NEXT: %646 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %646 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %647 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %647 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %648 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%648, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb140 loc(#loc5) +// CHECK-NEXT: ^bb140: // 2 preds: ^bb138, ^bb139 +// CHECK-NEXT: %649 = llvm.inttoptr %638 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %650 = llvm.load %649 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %651 = llvm.inttoptr %638 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %641, %651 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %652 = arith.cmpi ult, %641, %650 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %652, ^bb141, ^bb146 loc(#loc5) +// CHECK-NEXT: ^bb141: // pred: ^bb140 +// CHECK-NEXT: %653 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %638, %653 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %654 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %655 = "llvm.intrcall"(%654, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %656 = arith.addi %641, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %657 = arith.divui %656, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %658 = arith.addi %655, %657 : i256 loc(#loc5) +// CHECK-NEXT: %659 = arith.remui %641, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %660 = arith.cmpi ne, %659, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %660, ^bb142, ^bb143 loc(#loc5) +// CHECK-NEXT: ^bb142: // pred: ^bb141 +// CHECK-NEXT: %661 = arith.muli %659, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %662 = arith.subi %c256_i256, %661 : i256 loc(#loc5) +// CHECK-NEXT: %663 = arith.shrui %c-1_i256, %662 : i256 loc(#loc5) +// CHECK-NEXT: %664 = arith.subi %658, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %665 = llvm.inttoptr %664 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %666 = llvm.load %665 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %667 = arith.andi %666, %663 : i256 loc(#loc5) +// CHECK-NEXT: %668 = llvm.inttoptr %664 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %667, %668 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb143 loc(#loc5) +// CHECK-NEXT: ^bb143: // 2 preds: ^bb141, ^bb142 +// CHECK-NEXT: %669 = arith.addi %650, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %670 = arith.divui %669, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %671 = arith.addi %655, %670 : i256 loc(#loc5) +// CHECK-NEXT: %672 = arith.subi %671, %658 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb144(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb144(%673: i256 loc({{.*}}:51:4)): // 2 preds: ^bb143, ^bb145 +// CHECK-NEXT: %674 = arith.cmpi ult, %673, %672 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %674, ^bb145(%673 : i256), ^bb146 loc(#loc5) +// CHECK-NEXT: ^bb145(%675: i256 loc({{.*}}:51:4)): // pred: ^bb144 +// CHECK-NEXT: %676 = arith.addi %658, %675 : i256 loc(#loc5) +// CHECK-NEXT: %677 = llvm.inttoptr %676 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %677 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %678 = arith.addi %675, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb144(%678 : i256) loc(#loc5) +// CHECK-NEXT: ^bb146: // 2 preds: ^bb140, ^bb144 +// CHECK-NEXT: %679 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %638, %679 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %680 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %681 = "llvm.intrcall"(%680, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %682 = arith.divui %641, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: %683 = arith.remui %641, %c32_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb147(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb147(%684: i256 loc({{.*}}:51:4)): // 2 preds: ^bb146, ^bb148 +// CHECK-NEXT: %685 = arith.cmpi ult, %684, %682 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %685, ^bb148(%684 : i256), ^bb149 loc(#loc5) +// CHECK-NEXT: ^bb148(%686: i256 loc({{.*}}:51:4)): // pred: ^bb147 +// CHECK-NEXT: %687 = arith.addi %644, %686 : i256 loc(#loc5) +// CHECK-NEXT: %688 = arith.addi %681, %686 : i256 loc(#loc5) +// CHECK-NEXT: %689 = llvm.inttoptr %687 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %690 = llvm.load %689 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %691 = llvm.inttoptr %688 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %690, %691 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %692 = arith.addi %686, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb147(%692 : i256) loc(#loc5) +// CHECK-NEXT: ^bb149: // pred: ^bb147 +// CHECK-NEXT: %693 = arith.cmpi ne, %683, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %693, ^bb150, ^bb151(%636 : i256) loc(#loc5) // CHECK-NEXT: ^bb150: // pred: ^bb149 -// CHECK-NEXT: %719 = llvm.inttoptr %716 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %720 = llvm.load %719 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %721 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %716, %721 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %722 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %723 = "llvm.intrcall"(%722, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %724 = arith.cmpi ugt, %720, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %724, ^bb151, ^bb152 loc(#loc19) -// CHECK-NEXT: ^bb151: // pred: ^bb150 -// CHECK-NEXT: %725 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %725 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %726 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %726 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %727 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%727, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb152 loc(#loc19) -// CHECK-NEXT: ^bb152: // 2 preds: ^bb150, ^bb151 -// CHECK-NEXT: %728 = llvm.inttoptr %717 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %729 = llvm.load %728 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %730 = llvm.inttoptr %717 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %720, %730 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %731 = arith.cmpi ult, %720, %729 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %731, ^bb153, ^bb158 loc(#loc19) -// CHECK-NEXT: ^bb153: // pred: ^bb152 -// CHECK-NEXT: %732 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %717, %732 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %733 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %734 = "llvm.intrcall"(%733, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %735 = arith.addi %720, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %736 = arith.divui %735, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %737 = arith.addi %734, %736 : i256 loc(#loc19) -// CHECK-NEXT: %738 = arith.remui %720, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %739 = arith.cmpi ne, %738, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %739, ^bb154, ^bb155 loc(#loc19) -// CHECK-NEXT: ^bb154: // pred: ^bb153 -// CHECK-NEXT: %740 = arith.muli %738, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %741 = arith.subi %c256_i256, %740 : i256 loc(#loc19) -// CHECK-NEXT: %742 = arith.shrui %c-1_i256, %741 : i256 loc(#loc19) -// CHECK-NEXT: %743 = arith.subi %737, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %744 = llvm.inttoptr %743 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %745 = llvm.load %744 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %746 = arith.andi %745, %742 : i256 loc(#loc19) -// CHECK-NEXT: %747 = llvm.inttoptr %743 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %746, %747 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb155 loc(#loc19) -// CHECK-NEXT: ^bb155: // 2 preds: ^bb153, ^bb154 -// CHECK-NEXT: %748 = arith.addi %729, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %749 = arith.divui %748, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %750 = arith.addi %734, %749 : i256 loc(#loc19) -// CHECK-NEXT: %751 = arith.subi %750, %737 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb156(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb156(%752: i256 loc({{.*}}:51:4)): // 2 preds: ^bb155, ^bb157 -// CHECK-NEXT: %753 = arith.cmpi ult, %752, %751 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %753, ^bb157(%752 : i256), ^bb158 loc(#loc19) -// CHECK-NEXT: ^bb157(%754: i256 loc({{.*}}:51:4)): // pred: ^bb156 -// CHECK-NEXT: %755 = arith.addi %737, %754 : i256 loc(#loc19) -// CHECK-NEXT: %756 = llvm.inttoptr %755 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %756 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %757 = arith.addi %754, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb156(%757 : i256) loc(#loc19) -// CHECK-NEXT: ^bb158: // 2 preds: ^bb152, ^bb156 -// CHECK-NEXT: %758 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %717, %758 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %759 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %760 = "llvm.intrcall"(%759, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %761 = arith.divui %720, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %762 = arith.remui %720, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb159(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb159(%763: i256 loc({{.*}}:51:4)): // 2 preds: ^bb158, ^bb160 -// CHECK-NEXT: %764 = arith.cmpi ult, %763, %761 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %764, ^bb160(%763 : i256), ^bb161 loc(#loc19) -// CHECK-NEXT: ^bb160(%765: i256 loc({{.*}}:51:4)): // pred: ^bb159 -// CHECK-NEXT: %766 = arith.addi %723, %765 : i256 loc(#loc19) -// CHECK-NEXT: %767 = arith.addi %760, %765 : i256 loc(#loc19) -// CHECK-NEXT: %768 = llvm.inttoptr %766 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %769 = llvm.load %768 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %770 = llvm.inttoptr %767 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %769, %770 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %771 = arith.addi %765, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb159(%771 : i256) loc(#loc19) -// CHECK-NEXT: ^bb161: // pred: ^bb159 -// CHECK-NEXT: %772 = arith.cmpi ne, %762, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %772, ^bb162, ^bb163(%715 : i256) loc(#loc19) -// CHECK-NEXT: ^bb162: // pred: ^bb161 -// CHECK-NEXT: %773 = arith.addi %723, %761 : i256 loc(#loc19) -// CHECK-NEXT: %774 = arith.addi %760, %761 : i256 loc(#loc19) -// CHECK-NEXT: %775 = llvm.inttoptr %773 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %776 = llvm.load %775 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %777 = arith.muli %762, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %778 = arith.shli %c1_i256, %777 : i256 loc(#loc19) -// CHECK-NEXT: %779 = arith.subi %778, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %780 = arith.andi %776, %779 : i256 loc(#loc19) -// CHECK-NEXT: %781 = llvm.inttoptr %774 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %780, %781 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb163(%715 : i256) loc(#loc19) -// CHECK-NEXT: ^bb163(%782: i256 loc({{.*}}:51:4)): // 3 preds: ^bb149, ^bb161, ^bb162 -// CHECK-NEXT: %783 = arith.addi %782, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb148(%783 : i256) loc(#loc19) -// CHECK-NEXT: ^bb164: // 2 preds: ^bb136, ^bb148 -// CHECK-NEXT: %784 = arith.addi %651, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %785 = arith.addi %653, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %786 = arith.cmpi ne, %784, %785 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %786, ^bb165(%c0_i256 : i256), ^bb167 loc(#loc19) -// CHECK-NEXT: ^bb165(%787: i256 loc({{.*}}:51:4)): // 2 preds: ^bb164, ^bb166 -// CHECK-NEXT: %788 = arith.cmpi ult, %787, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %788, ^bb166(%787 : i256), ^bb167 loc(#loc19) -// CHECK-NEXT: ^bb166(%789: i256 loc({{.*}}:51:4)): // pred: ^bb165 -// CHECK-NEXT: %790 = arith.addi %784, %789 : i256 loc(#loc19) -// CHECK-NEXT: %791 = arith.addi %785, %789 : i256 loc(#loc19) -// CHECK-NEXT: %792 = llvm.inttoptr %790 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %793 = llvm.load %792 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %794 = arith.andi %793, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) -// CHECK-NEXT: %795 = llvm.inttoptr %791 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %794, %795 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %796 = arith.addi %789, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb165(%796 : i256) loc(#loc19) -// CHECK-NEXT: ^bb167: // 2 preds: ^bb164, ^bb165 -// CHECK-NEXT: %797 = arith.addi %651, %c4_i256 : i256 loc(#loc19) -// CHECK-NEXT: %798 = llvm.inttoptr %797 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %799 = llvm.load %798 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %800 = arith.andi %799, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc19) -// CHECK-NEXT: %801 = arith.shrui %799, %c192_i256 : i256 loc(#loc19) -// CHECK-NEXT: %802 = arith.andi %801, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %803 = arith.shli %802, %c192_i256 : i256 loc(#loc19) -// CHECK-NEXT: %804 = arith.ori %800, %803 : i256 loc(#loc19) -// CHECK-NEXT: %805 = arith.shrui %799, %c200_i256 : i256 loc(#loc19) -// CHECK-NEXT: %806 = arith.andi %805, %c4294967295_i256 : i256 loc(#loc19) -// CHECK-NEXT: %807 = arith.shli %806, %c200_i256 : i256 loc(#loc19) -// CHECK-NEXT: %808 = arith.ori %804, %807 : i256 loc(#loc19) -// CHECK-NEXT: %809 = arith.addi %653, %c4_i256 : i256 loc(#loc19) -// CHECK-NEXT: %810 = llvm.inttoptr %809 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %811 = llvm.load %810 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %812 = arith.andi %811, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc19) -// CHECK-NEXT: %813 = arith.ori %812, %808 : i256 loc(#loc19) -// CHECK-NEXT: %814 = llvm.inttoptr %809 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %813, %814 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb168(%649 : i256) loc(#loc19) -// CHECK-NEXT: ^bb168(%815: i256 loc({{.*}}:51:4)): // 2 preds: ^bb135, ^bb167 -// CHECK-NEXT: %816 = arith.addi %815, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb134(%816 : i256) loc(#loc19) -// CHECK-NEXT: ^bb169(%817: i256 loc({{.*}}:51:4)): // 2 preds: ^bb118, ^bb134 -// CHECK-NEXT: %818 = arith.addi %817, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb117(%818 : i256) loc(#loc19) -// CHECK-NEXT: ^bb170(%819: i256 loc({{.*}}:51:4)): // 2 preds: ^bb117, ^bb171 -// CHECK-NEXT: %820 = arith.cmpi ult, %819, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %820, ^bb171(%819 : i256), ^bb172(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb171(%821: i256 loc({{.*}}:51:4)): // pred: ^bb170 -// CHECK-NEXT: %822 = arith.addi %821, %c90_i256 : i256 loc(#loc19) -// CHECK-NEXT: %823 = arith.addi %821, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %824 = llvm.inttoptr %822 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %825 = llvm.load %824 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %826 = arith.andi %825, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc19) -// CHECK-NEXT: %827 = llvm.inttoptr %823 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %826, %827 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %828 = arith.addi %821, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb170(%828 : i256) loc(#loc19) -// CHECK-NEXT: ^bb172(%829: i256 loc({{.*}}:51:4)): // 2 preds: ^bb170, ^bb173 -// CHECK-NEXT: %830 = arith.cmpi ult, %829, %c5_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %830, ^bb173(%829 : i256), ^bb174(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb173(%831: i256 loc({{.*}}:51:4)): // pred: ^bb172 -// CHECK-NEXT: %832 = arith.addi %831, %c95_i256 : i256 loc(#loc19) -// CHECK-NEXT: %833 = arith.addi %831, %c36_i256 : i256 loc(#loc19) -// CHECK-NEXT: %834 = llvm.inttoptr %832 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %835 = llvm.load %834 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %836 = arith.andi %835, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc19) -// CHECK-NEXT: %837 = llvm.inttoptr %833 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %836, %837 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %838 = arith.addi %831, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb172(%838 : i256) loc(#loc19) -// CHECK-NEXT: ^bb174(%839: i256 loc({{.*}}:51:4)): // 2 preds: ^bb172, ^bb175 -// CHECK-NEXT: %840 = arith.cmpi ult, %839, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %840, ^bb175(%839 : i256), ^bb176 loc(#loc19) -// CHECK-NEXT: ^bb175(%841: i256 loc({{.*}}:51:4)): // pred: ^bb174 -// CHECK-NEXT: %842 = arith.addi %841, %c100_i256 : i256 loc(#loc19) -// CHECK-NEXT: %843 = arith.addi %841, %c41_i256 : i256 loc(#loc19) -// CHECK-NEXT: %844 = llvm.inttoptr %842 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %845 = llvm.load %844 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %846 = arith.andi %845, %c105312291668557186697918027683670432318895095400549111254310977535_i256 : i256 loc(#loc19) -// CHECK-NEXT: %847 = llvm.inttoptr %843 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %846, %847 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %848 = arith.addi %841, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb174(%848 : i256) loc(#loc19) +// CHECK-NEXT: %694 = arith.addi %644, %682 : i256 loc(#loc5) +// CHECK-NEXT: %695 = arith.addi %681, %682 : i256 loc(#loc5) +// CHECK-NEXT: %696 = llvm.inttoptr %694 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %697 = llvm.load %696 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %698 = arith.muli %683, %c8_i256 : i256 loc(#loc5) +// CHECK-NEXT: %699 = arith.shli %c1_i256, %698 : i256 loc(#loc5) +// CHECK-NEXT: %700 = arith.subi %699, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: %701 = arith.andi %697, %700 : i256 loc(#loc5) +// CHECK-NEXT: %702 = llvm.inttoptr %695 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %701, %702 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb151(%636 : i256) loc(#loc5) +// CHECK-NEXT: ^bb151(%703: i256 loc({{.*}}:51:4)): // 3 preds: ^bb137, ^bb149, ^bb150 +// CHECK-NEXT: %704 = arith.addi %703, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb136(%704 : i256) loc(#loc5) +// CHECK-NEXT: ^bb152: // 2 preds: ^bb124, ^bb136 +// CHECK-NEXT: %705 = arith.addi %572, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: %706 = arith.addi %574, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: %707 = arith.cmpi ne, %705, %706 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %707, ^bb153(%c0_i256 : i256), ^bb155 loc(#loc5) +// CHECK-NEXT: ^bb153(%708: i256 loc({{.*}}:51:4)): // 2 preds: ^bb152, ^bb154 +// CHECK-NEXT: %709 = arith.cmpi ult, %708, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %709, ^bb154(%708 : i256), ^bb155 loc(#loc5) +// CHECK-NEXT: ^bb154(%710: i256 loc({{.*}}:51:4)): // pred: ^bb153 +// CHECK-NEXT: %711 = arith.addi %705, %710 : i256 loc(#loc5) +// CHECK-NEXT: %712 = arith.addi %706, %710 : i256 loc(#loc5) +// CHECK-NEXT: %713 = llvm.inttoptr %711 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %714 = llvm.load %713 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %715 = arith.andi %714, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) +// CHECK-NEXT: %716 = llvm.inttoptr %712 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %715, %716 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %717 = arith.addi %710, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb153(%717 : i256) loc(#loc5) +// CHECK-NEXT: ^bb155: // 2 preds: ^bb152, ^bb153 +// CHECK-NEXT: %718 = arith.addi %572, %c4_i256 : i256 loc(#loc5) +// CHECK-NEXT: %719 = llvm.inttoptr %718 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %720 = llvm.load %719 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %721 = arith.andi %720, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc5) +// CHECK-NEXT: %722 = arith.shrui %720, %c192_i256 : i256 loc(#loc5) +// CHECK-NEXT: %723 = arith.andi %722, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %724 = arith.shli %723, %c192_i256 : i256 loc(#loc5) +// CHECK-NEXT: %725 = arith.ori %721, %724 : i256 loc(#loc5) +// CHECK-NEXT: %726 = arith.shrui %720, %c200_i256 : i256 loc(#loc5) +// CHECK-NEXT: %727 = arith.andi %726, %c4294967295_i256 : i256 loc(#loc5) +// CHECK-NEXT: %728 = arith.shli %727, %c200_i256 : i256 loc(#loc5) +// CHECK-NEXT: %729 = arith.ori %725, %728 : i256 loc(#loc5) +// CHECK-NEXT: %730 = arith.addi %574, %c4_i256 : i256 loc(#loc5) +// CHECK-NEXT: %731 = llvm.inttoptr %730 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %732 = llvm.load %731 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %733 = arith.andi %732, %c-6901746346790563787434755862277025452451108972170386555162524223799296_i256 : i256 loc(#loc5) +// CHECK-NEXT: %734 = arith.ori %733, %729 : i256 loc(#loc5) +// CHECK-NEXT: %735 = llvm.inttoptr %730 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %734, %735 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb156(%570 : i256) loc(#loc5) +// CHECK-NEXT: ^bb156(%736: i256 loc({{.*}}:51:4)): // 2 preds: ^bb123, ^bb155 +// CHECK-NEXT: %737 = arith.addi %736, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb122(%737 : i256) loc(#loc5) +// CHECK-NEXT: ^bb157(%738: i256 loc({{.*}}:51:4)): // 2 preds: ^bb103, ^bb122 +// CHECK-NEXT: %739 = arith.addi %738, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb102(%739 : i256) loc(#loc5) +// CHECK-NEXT: ^bb158(%740: i256 loc({{.*}}:51:4)): // 2 preds: ^bb102, ^bb159 +// CHECK-NEXT: %741 = arith.cmpi ult, %740, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %741, ^bb159(%740 : i256), ^bb160(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb159(%742: i256 loc({{.*}}:51:4)): // pred: ^bb158 +// CHECK-NEXT: %743 = arith.addi %742, %c90_i256 : i256 loc(#loc5) +// CHECK-NEXT: %744 = arith.addi %742, %c31_i256 : i256 loc(#loc5) +// CHECK-NEXT: %745 = llvm.inttoptr %743 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %746 = llvm.load %745 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %747 = arith.andi %746, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc5) +// CHECK-NEXT: %748 = llvm.inttoptr %744 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %747, %748 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %749 = arith.addi %742, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb158(%749 : i256) loc(#loc5) +// CHECK-NEXT: ^bb160(%750: i256 loc({{.*}}:51:4)): // 2 preds: ^bb158, ^bb161 +// CHECK-NEXT: %751 = arith.cmpi ult, %750, %c5_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %751, ^bb161(%750 : i256), ^bb162(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb161(%752: i256 loc({{.*}}:51:4)): // pred: ^bb160 +// CHECK-NEXT: %753 = arith.addi %752, %c95_i256 : i256 loc(#loc5) +// CHECK-NEXT: %754 = arith.addi %752, %c36_i256 : i256 loc(#loc5) +// CHECK-NEXT: %755 = llvm.inttoptr %753 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %756 = llvm.load %755 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %757 = arith.andi %756, %c6277101735386680763835789423207666416102355444464034512895_i256 : i256 loc(#loc5) +// CHECK-NEXT: %758 = llvm.inttoptr %754 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %757, %758 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %759 = arith.addi %752, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb160(%759 : i256) loc(#loc5) +// CHECK-NEXT: ^bb162(%760: i256 loc({{.*}}:51:4)): // 2 preds: ^bb160, ^bb163 +// CHECK-NEXT: %761 = arith.cmpi ult, %760, %c2_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %761, ^bb163(%760 : i256), ^bb164 loc(#loc5) +// CHECK-NEXT: ^bb163(%762: i256 loc({{.*}}:51:4)): // pred: ^bb162 +// CHECK-NEXT: %763 = arith.addi %762, %c100_i256 : i256 loc(#loc5) +// CHECK-NEXT: %764 = arith.addi %762, %c41_i256 : i256 loc(#loc5) +// CHECK-NEXT: %765 = llvm.inttoptr %763 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %766 = llvm.load %765 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %767 = arith.andi %766, %c105312291668557186697918027683670432318895095400549111254310977535_i256 : i256 loc(#loc5) +// CHECK-NEXT: %768 = llvm.inttoptr %764 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %767, %768 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %769 = arith.addi %762, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb162(%769 : i256) loc(#loc5) +// CHECK-NEXT: ^bb164: // pred: ^bb162 +// CHECK-NEXT: %770 = llvm.inttoptr %c102_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %771 = llvm.load %770 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %772 = arith.andi %771, %c4722366482869645213695_i256 : i256 loc(#loc5) +// CHECK-NEXT: %773 = llvm.inttoptr %c43_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %772, %773 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: call @__sol.copy.storage.storage.string(%c103_i256, %c44_i256) : (i256, i256) -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb165(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb165(%774: i256 loc({{.*}}:51:4)): // 2 preds: ^bb164, ^bb166 +// CHECK-NEXT: %775 = arith.cmpi ult, %774, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %775, ^bb166(%774 : i256), ^bb167 loc(#loc5) +// CHECK-NEXT: ^bb166(%776: i256 loc({{.*}}:51:4)): // pred: ^bb165 +// CHECK-NEXT: %777 = arith.addi %776, %c104_i256 : i256 loc(#loc5) +// CHECK-NEXT: %778 = arith.addi %776, %c45_i256 : i256 loc(#loc5) +// CHECK-NEXT: %779 = llvm.inttoptr %777 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %780 = llvm.load %779 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %781 = llvm.inttoptr %778 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %780, %781 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %782 = arith.addi %776, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb165(%782 : i256) loc(#loc5) +// CHECK-NEXT: ^bb167: // pred: ^bb165 +// CHECK-NEXT: %783 = llvm.inttoptr %c105_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %784 = llvm.load %783 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %785 = arith.andi %784, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: %786 = llvm.inttoptr %c46_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %785, %786 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb168(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb168(%787: i256 loc({{.*}}:51:4)): // 2 preds: ^bb167, ^bb169 +// CHECK-NEXT: %788 = arith.cmpi ult, %787, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %788, ^bb169(%787 : i256), ^bb170 loc(#loc5) +// CHECK-NEXT: ^bb169(%789: i256 loc({{.*}}:51:4)): // pred: ^bb168 +// CHECK-NEXT: %790 = arith.addi %789, %c106_i256 : i256 loc(#loc5) +// CHECK-NEXT: %791 = arith.addi %789, %c47_i256 : i256 loc(#loc5) +// CHECK-NEXT: %792 = llvm.inttoptr %790 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %793 = llvm.load %792 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %794 = llvm.inttoptr %791 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %793, %794 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %795 = arith.addi %789, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb168(%795 : i256) loc(#loc5) +// CHECK-NEXT: ^bb170: // pred: ^bb168 +// CHECK-NEXT: %796 = llvm.inttoptr %c106_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %797 = llvm.load %796 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %798 = arith.andi %797, %c22300745198530623141535718272648361505980415_i256 : i256 loc(#loc5) +// CHECK-NEXT: %799 = llvm.inttoptr %c47_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %798, %799 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb171(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb171(%800: i256 loc({{.*}}:51:4)): // 2 preds: ^bb170, ^bb172 +// CHECK-NEXT: %801 = arith.cmpi ult, %800, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %801, ^bb172(%800 : i256), ^bb173 loc(#loc5) +// CHECK-NEXT: ^bb172(%802: i256 loc({{.*}}:51:4)): // pred: ^bb171 +// CHECK-NEXT: %803 = arith.addi %802, %c107_i256 : i256 loc(#loc5) +// CHECK-NEXT: %804 = arith.addi %802, %c48_i256 : i256 loc(#loc5) +// CHECK-NEXT: %805 = llvm.inttoptr %803 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %806 = llvm.load %805 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %807 = llvm.inttoptr %804 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %806, %807 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %808 = arith.addi %802, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb171(%808 : i256) loc(#loc5) +// CHECK-NEXT: ^bb173: // pred: ^bb171 +// CHECK-NEXT: %809 = llvm.inttoptr %c108_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %810 = llvm.load %809 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %811 = arith.andi %810, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc5) +// CHECK-NEXT: %812 = llvm.inttoptr %c49_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %811, %812 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb174(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb174(%813: i256 loc({{.*}}:51:4)): // 2 preds: ^bb173, ^bb175 +// CHECK-NEXT: %814 = arith.cmpi ult, %813, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %814, ^bb175(%813 : i256), ^bb176 loc(#loc5) +// CHECK-NEXT: ^bb175(%815: i256 loc({{.*}}:51:4)): // pred: ^bb174 +// CHECK-NEXT: %816 = arith.addi %815, %c109_i256 : i256 loc(#loc5) +// CHECK-NEXT: %817 = arith.addi %815, %c50_i256 : i256 loc(#loc5) +// CHECK-NEXT: %818 = llvm.inttoptr %816 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %819 = llvm.load %818 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %820 = llvm.inttoptr %817 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %819, %820 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %821 = arith.addi %815, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb174(%821 : i256) loc(#loc5) // CHECK-NEXT: ^bb176: // pred: ^bb174 -// CHECK-NEXT: %849 = llvm.inttoptr %c102_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %850 = llvm.load %849 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %851 = arith.andi %850, %c4722366482869645213695_i256 : i256 loc(#loc19) -// CHECK-NEXT: %852 = llvm.inttoptr %c43_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %851, %852 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %853 = llvm.inttoptr %c103_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %854 = llvm.load %853 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %855 = arith.shrui %854, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %856 = arith.andi %854, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %857 = arith.cmpi eq, %856, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: %858 = arith.andi %855, %c127_i256 : i256 loc(#loc19) -// CHECK-NEXT: %859 = arith.select %857, %858, %855 : i256 loc(#loc19) -// CHECK-NEXT: %860 = arith.cmpi ult, %859, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %861 = arith.extui %860 : i1 to i256 loc(#loc19) -// CHECK-NEXT: %862 = arith.cmpi eq, %856, %861 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %862, ^bb177, ^bb178 loc(#loc19) -// CHECK-NEXT: ^bb177: // pred: ^bb176 -// CHECK-NEXT: %863 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %863 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %864 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c34_i256, %864 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %865 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%865, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb178 loc(#loc19) -// CHECK-NEXT: ^bb178: // 2 preds: ^bb176, ^bb177 -// CHECK-NEXT: %866 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %867 = llvm.load %866 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %868 = arith.shrui %867, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %869 = arith.andi %867, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %870 = arith.cmpi eq, %869, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: %871 = arith.andi %868, %c127_i256 : i256 loc(#loc19) -// CHECK-NEXT: %872 = arith.select %870, %871, %868 : i256 loc(#loc19) -// CHECK-NEXT: %873 = arith.cmpi ult, %872, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %874 = arith.extui %873 : i1 to i256 loc(#loc19) -// CHECK-NEXT: %875 = arith.cmpi eq, %869, %874 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %875, ^bb179, ^bb180 loc(#loc19) -// CHECK-NEXT: ^bb179: // pred: ^bb178 -// CHECK-NEXT: %876 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %876 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %877 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c34_i256, %877 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %878 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%878, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb180 loc(#loc19) -// CHECK-NEXT: ^bb180: // 2 preds: ^bb178, ^bb179 -// CHECK-NEXT: %879 = arith.cmpi ugt, %872, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %879, ^bb181, ^bb184 loc(#loc19) -// CHECK-NEXT: ^bb181: // pred: ^bb180 -// CHECK-NEXT: %880 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c44_i256, %880 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %881 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %882 = "llvm.intrcall"(%881, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %883 = arith.addi %859, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %884 = arith.divui %883, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %885 = arith.addi %882, %884 : i256 loc(#loc19) -// CHECK-NEXT: %886 = arith.cmpi ult, %859, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %887 = arith.select %886, %882, %885 : i256 loc(#loc19) -// CHECK-NEXT: %888 = arith.addi %872, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %889 = arith.divui %888, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %890 = arith.addi %882, %889 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb182(%887 : i256) loc(#loc19) -// CHECK-NEXT: ^bb182(%891: i256 loc({{.*}}:51:4)): // 2 preds: ^bb181, ^bb183 -// CHECK-NEXT: %892 = arith.cmpi ult, %891, %890 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %892, ^bb183(%891 : i256), ^bb184 loc(#loc19) -// CHECK-NEXT: ^bb183(%893: i256 loc({{.*}}:51:4)): // pred: ^bb182 -// CHECK-NEXT: %894 = llvm.inttoptr %893 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %894 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %895 = arith.addi %893, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb182(%895 : i256) loc(#loc19) -// CHECK-NEXT: ^bb184: // 2 preds: ^bb180, ^bb182 -// CHECK-NEXT: %896 = arith.cmpi ugt, %859, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %896, ^bb188, ^bb185 loc(#loc19) -// CHECK-NEXT: ^bb185: // pred: ^bb184 -// CHECK-NEXT: %897 = arith.cmpi ne, %859, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %897, ^bb187, ^bb186 loc(#loc19) -// CHECK-NEXT: ^bb186: // pred: ^bb185 -// CHECK-NEXT: %898 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %898 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb194(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb187: // pred: ^bb185 -// CHECK-NEXT: %899 = arith.muli %859, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %900 = arith.subi %c256_i256, %899 : i256 loc(#loc19) -// CHECK-NEXT: %901 = arith.shli %c-1_i256, %900 : i256 loc(#loc19) -// CHECK-NEXT: %902 = arith.andi %854, %901 : i256 loc(#loc19) -// CHECK-NEXT: %903 = arith.muli %859, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %904 = arith.ori %902, %903 : i256 loc(#loc19) -// CHECK-NEXT: %905 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %904, %905 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb194(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb188: // pred: ^bb184 -// CHECK-NEXT: %906 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c44_i256, %906 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %907 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %908 = "llvm.intrcall"(%907, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %909 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c103_i256, %909 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %910 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %911 = "llvm.intrcall"(%910, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %912 = arith.andi %859, %c-32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb189(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb189(%913: i256 loc({{.*}}:51:4)): // 2 preds: ^bb188, ^bb190 -// CHECK-NEXT: %914 = arith.cmpi ult, %913, %912 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %914, ^bb190(%913 : i256), ^bb191 loc(#loc19) -// CHECK-NEXT: ^bb190(%915: i256 loc({{.*}}:51:4)): // pred: ^bb189 -// CHECK-NEXT: %916 = arith.divui %915, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %917 = arith.addi %911, %916 : i256 loc(#loc19) -// CHECK-NEXT: %918 = llvm.inttoptr %917 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %919 = llvm.load %918 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %920 = arith.addi %908, %916 : i256 loc(#loc19) -// CHECK-NEXT: %921 = llvm.inttoptr %920 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %919, %921 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %922 = arith.addi %915, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb189(%922 : i256) loc(#loc19) +// CHECK-NEXT: %822 = llvm.inttoptr %c110_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %823 = llvm.load %822 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %824 = arith.andi %823, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc5) +// CHECK-NEXT: %825 = llvm.inttoptr %c51_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %824, %825 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb177(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb177(%826: i256 loc({{.*}}:51:4)): // 2 preds: ^bb176, ^bb178 +// CHECK-NEXT: %827 = arith.cmpi ult, %826, %c0_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %827, ^bb178(%826 : i256), ^bb179 loc(#loc5) +// CHECK-NEXT: ^bb178(%828: i256 loc({{.*}}:51:4)): // pred: ^bb177 +// CHECK-NEXT: %829 = arith.addi %828, %c111_i256 : i256 loc(#loc5) +// CHECK-NEXT: %830 = arith.addi %828, %c52_i256 : i256 loc(#loc5) +// CHECK-NEXT: %831 = llvm.inttoptr %829 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %832 = llvm.load %831 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %833 = llvm.inttoptr %830 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %832, %833 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %834 = arith.addi %828, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb177(%834 : i256) loc(#loc5) +// CHECK-NEXT: ^bb179: // pred: ^bb177 +// CHECK-NEXT: %835 = llvm.inttoptr %c111_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %836 = llvm.load %835 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %837 = arith.andi %836, %c1099511627775_i256 : i256 loc(#loc5) +// CHECK-NEXT: %838 = llvm.inttoptr %c52_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %837, %838 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %839 = llvm.inttoptr %c112_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %840 = llvm.load %839 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %841 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %840, %841 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %842 = llvm.inttoptr %c113_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %843 = llvm.load %842 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %844 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %843, %844 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %845 = llvm.inttoptr %c114_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %846 = llvm.load %845 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %847 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c114_i256, %847 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %848 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %849 = "llvm.intrcall"(%848, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %850 = arith.cmpi ugt, %846, %c18446744073709551615_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %850, ^bb180, ^bb181 loc(#loc5) +// CHECK-NEXT: ^bb180: // pred: ^bb179 +// CHECK-NEXT: %851 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %851 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %852 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c65_i256, %852 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %853 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: "llvm.intrcall"(%853, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc5) +// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc5) +// CHECK-NEXT: cf.br ^bb181 loc(#loc5) +// CHECK-NEXT: ^bb181: // 2 preds: ^bb179, ^bb180 +// CHECK-NEXT: %854 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %855 = llvm.load %854 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %856 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %846, %856 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %857 = arith.cmpi ult, %846, %855 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %857, ^bb182, ^bb185 loc(#loc5) +// CHECK-NEXT: ^bb182: // pred: ^bb181 +// CHECK-NEXT: %858 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c55_i256, %858 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %859 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %860 = "llvm.intrcall"(%859, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: %861 = arith.addi %860, %846 : i256 loc(#loc5) +// CHECK-NEXT: %862 = arith.addi %860, %855 : i256 loc(#loc5) +// CHECK-NEXT: %863 = arith.subi %862, %861 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb183(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb183(%864: i256 loc({{.*}}:51:4)): // 2 preds: ^bb182, ^bb184 +// CHECK-NEXT: %865 = arith.cmpi ult, %864, %863 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %865, ^bb184(%864 : i256), ^bb185 loc(#loc5) +// CHECK-NEXT: ^bb184(%866: i256 loc({{.*}}:51:4)): // pred: ^bb183 +// CHECK-NEXT: %867 = arith.addi %861, %866 : i256 loc(#loc5) +// CHECK-NEXT: %868 = llvm.inttoptr %867 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %c0_i256, %868 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %869 = arith.addi %866, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb183(%869 : i256) loc(#loc5) +// CHECK-NEXT: ^bb185: // 2 preds: ^bb181, ^bb183 +// CHECK-NEXT: %870 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: llvm.store %c55_i256, %870 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %871 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc5) +// CHECK-NEXT: %872 = "llvm.intrcall"(%871, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb186(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb186(%873: i256 loc({{.*}}:51:4)): // 2 preds: ^bb185, ^bb187 +// CHECK-NEXT: %874 = arith.cmpi ult, %873, %846 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %874, ^bb187(%873 : i256), ^bb188 loc(#loc5) +// CHECK-NEXT: ^bb187(%875: i256 loc({{.*}}:51:4)): // pred: ^bb186 +// CHECK-NEXT: %876 = arith.addi %849, %875 : i256 loc(#loc5) +// CHECK-NEXT: %877 = arith.addi %872, %875 : i256 loc(#loc5) +// CHECK-NEXT: %878 = llvm.inttoptr %876 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %879 = llvm.load %878 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %880 = arith.andi %879, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc5) +// CHECK-NEXT: %881 = llvm.inttoptr %877 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %880, %881 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %882 = arith.addi %875, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb186(%882 : i256) loc(#loc5) +// CHECK-NEXT: ^bb188: // pred: ^bb186 +// CHECK-NEXT: %883 = llvm.inttoptr %c115_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %884 = llvm.load %883 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %885 = arith.andi %884, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %886 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %887 = llvm.load %886 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %888 = arith.andi %887, %c-256_i256 : i256 loc(#loc5) +// CHECK-NEXT: %889 = arith.ori %888, %885 : i256 loc(#loc5) +// CHECK-NEXT: %890 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %889, %890 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: cf.br ^bb189(%c0_i256 : i256) loc(#loc5) +// CHECK-NEXT: ^bb189(%891: i256 loc({{.*}}:51:4)): // 2 preds: ^bb188, ^bb190 +// CHECK-NEXT: %892 = arith.cmpi ult, %891, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.cond_br %892, ^bb190(%891 : i256), ^bb191 loc(#loc5) +// CHECK-NEXT: ^bb190(%893: i256 loc({{.*}}:51:4)): // pred: ^bb189 +// CHECK-NEXT: %894 = arith.addi %893, %c116_i256 : i256 loc(#loc5) +// CHECK-NEXT: %895 = arith.addi %893, %c57_i256 : i256 loc(#loc5) +// CHECK-NEXT: %896 = llvm.inttoptr %894 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %897 = llvm.load %896 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %898 = llvm.inttoptr %895 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %897, %898 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %899 = arith.addi %893, %c1_i256 : i256 loc(#loc5) +// CHECK-NEXT: cf.br ^bb189(%899 : i256) loc(#loc5) // CHECK-NEXT: ^bb191: // pred: ^bb189 -// CHECK-NEXT: %923 = arith.cmpi ult, %912, %859 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %923, ^bb192, ^bb193 loc(#loc19) -// CHECK-NEXT: ^bb192: // pred: ^bb191 -// CHECK-NEXT: %924 = arith.andi %859, %c31_i256 : i256 loc(#loc19) -// CHECK-NEXT: %925 = arith.divui %912, %c32_i256 : i256 loc(#loc19) -// CHECK-NEXT: %926 = arith.addi %911, %925 : i256 loc(#loc19) -// CHECK-NEXT: %927 = llvm.inttoptr %926 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %928 = llvm.load %927 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %929 = arith.muli %924, %c8_i256 : i256 loc(#loc19) -// CHECK-NEXT: %930 = arith.subi %c256_i256, %929 : i256 loc(#loc19) -// CHECK-NEXT: %931 = arith.shli %c-1_i256, %930 : i256 loc(#loc19) -// CHECK-NEXT: %932 = arith.andi %928, %931 : i256 loc(#loc19) -// CHECK-NEXT: %933 = arith.addi %908, %925 : i256 loc(#loc19) -// CHECK-NEXT: %934 = llvm.inttoptr %933 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %932, %934 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb193 loc(#loc19) -// CHECK-NEXT: ^bb193: // 2 preds: ^bb191, ^bb192 -// CHECK-NEXT: %935 = arith.muli %859, %c2_i256 : i256 loc(#loc19) -// CHECK-NEXT: %936 = arith.ori %935, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: %937 = llvm.inttoptr %c44_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %936, %937 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb194(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb194(%938: i256 loc({{.*}}:51:4)): // 4 preds: ^bb186, ^bb187, ^bb193, ^bb195 -// CHECK-NEXT: %939 = arith.cmpi ult, %938, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %939, ^bb195(%938 : i256), ^bb196 loc(#loc19) -// CHECK-NEXT: ^bb195(%940: i256 loc({{.*}}:51:4)): // pred: ^bb194 -// CHECK-NEXT: %941 = arith.addi %940, %c104_i256 : i256 loc(#loc19) -// CHECK-NEXT: %942 = arith.addi %940, %c45_i256 : i256 loc(#loc19) -// CHECK-NEXT: %943 = llvm.inttoptr %941 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %944 = llvm.load %943 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %945 = llvm.inttoptr %942 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %944, %945 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %946 = arith.addi %940, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb194(%946 : i256) loc(#loc19) -// CHECK-NEXT: ^bb196: // pred: ^bb194 -// CHECK-NEXT: %947 = llvm.inttoptr %c105_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %948 = llvm.load %947 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %949 = arith.andi %948, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: %950 = llvm.inttoptr %c46_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %949, %950 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb197(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb197(%951: i256 loc({{.*}}:51:4)): // 2 preds: ^bb196, ^bb198 -// CHECK-NEXT: %952 = arith.cmpi ult, %951, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %952, ^bb198(%951 : i256), ^bb199 loc(#loc19) -// CHECK-NEXT: ^bb198(%953: i256 loc({{.*}}:51:4)): // pred: ^bb197 -// CHECK-NEXT: %954 = arith.addi %953, %c106_i256 : i256 loc(#loc19) -// CHECK-NEXT: %955 = arith.addi %953, %c47_i256 : i256 loc(#loc19) -// CHECK-NEXT: %956 = llvm.inttoptr %954 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %957 = llvm.load %956 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %958 = llvm.inttoptr %955 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %957, %958 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %959 = arith.addi %953, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb197(%959 : i256) loc(#loc19) -// CHECK-NEXT: ^bb199: // pred: ^bb197 -// CHECK-NEXT: %960 = llvm.inttoptr %c106_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %961 = llvm.load %960 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %962 = arith.andi %961, %c22300745198530623141535718272648361505980415_i256 : i256 loc(#loc19) -// CHECK-NEXT: %963 = llvm.inttoptr %c47_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %962, %963 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb200(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb200(%964: i256 loc({{.*}}:51:4)): // 2 preds: ^bb199, ^bb201 -// CHECK-NEXT: %965 = arith.cmpi ult, %964, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %965, ^bb201(%964 : i256), ^bb202 loc(#loc19) -// CHECK-NEXT: ^bb201(%966: i256 loc({{.*}}:51:4)): // pred: ^bb200 -// CHECK-NEXT: %967 = arith.addi %966, %c107_i256 : i256 loc(#loc19) -// CHECK-NEXT: %968 = arith.addi %966, %c48_i256 : i256 loc(#loc19) -// CHECK-NEXT: %969 = llvm.inttoptr %967 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %970 = llvm.load %969 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %971 = llvm.inttoptr %968 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %970, %971 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %972 = arith.addi %966, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb200(%972 : i256) loc(#loc19) -// CHECK-NEXT: ^bb202: // pred: ^bb200 -// CHECK-NEXT: %973 = llvm.inttoptr %c108_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %974 = llvm.load %973 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %975 = arith.andi %974, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc19) -// CHECK-NEXT: %976 = llvm.inttoptr %c49_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %975, %976 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb203(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb203(%977: i256 loc({{.*}}:51:4)): // 2 preds: ^bb202, ^bb204 -// CHECK-NEXT: %978 = arith.cmpi ult, %977, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %978, ^bb204(%977 : i256), ^bb205 loc(#loc19) -// CHECK-NEXT: ^bb204(%979: i256 loc({{.*}}:51:4)): // pred: ^bb203 -// CHECK-NEXT: %980 = arith.addi %979, %c109_i256 : i256 loc(#loc19) -// CHECK-NEXT: %981 = arith.addi %979, %c50_i256 : i256 loc(#loc19) -// CHECK-NEXT: %982 = llvm.inttoptr %980 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %983 = llvm.load %982 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %984 = llvm.inttoptr %981 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %983, %984 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %985 = arith.addi %979, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb203(%985 : i256) loc(#loc19) -// CHECK-NEXT: ^bb205: // pred: ^bb203 -// CHECK-NEXT: %986 = llvm.inttoptr %c110_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %987 = llvm.load %986 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %988 = arith.andi %987, %c340282366920938463463374607431768211455_i256 : i256 loc(#loc19) -// CHECK-NEXT: %989 = llvm.inttoptr %c51_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %988, %989 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb206(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb206(%990: i256 loc({{.*}}:51:4)): // 2 preds: ^bb205, ^bb207 -// CHECK-NEXT: %991 = arith.cmpi ult, %990, %c0_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %991, ^bb207(%990 : i256), ^bb208 loc(#loc19) -// CHECK-NEXT: ^bb207(%992: i256 loc({{.*}}:51:4)): // pred: ^bb206 -// CHECK-NEXT: %993 = arith.addi %992, %c111_i256 : i256 loc(#loc19) -// CHECK-NEXT: %994 = arith.addi %992, %c52_i256 : i256 loc(#loc19) -// CHECK-NEXT: %995 = llvm.inttoptr %993 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %996 = llvm.load %995 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %997 = llvm.inttoptr %994 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %996, %997 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %998 = arith.addi %992, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb206(%998 : i256) loc(#loc19) -// CHECK-NEXT: ^bb208: // pred: ^bb206 -// CHECK-NEXT: %999 = llvm.inttoptr %c111_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1000 = llvm.load %999 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1001 = arith.andi %1000, %c1099511627775_i256 : i256 loc(#loc19) -// CHECK-NEXT: %1002 = llvm.inttoptr %c52_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1001, %1002 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1003 = llvm.inttoptr %c112_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1004 = llvm.load %1003 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1005 = llvm.inttoptr %c53_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1004, %1005 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1006 = llvm.inttoptr %c113_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1007 = llvm.load %1006 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1008 = llvm.inttoptr %c54_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1007, %1008 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1009 = llvm.inttoptr %c114_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1010 = llvm.load %1009 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1011 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c114_i256, %1011 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1012 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1013 = "llvm.intrcall"(%1012, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %1014 = arith.cmpi ugt, %1010, %c18446744073709551615_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %1014, ^bb209, ^bb210 loc(#loc19) -// CHECK-NEXT: ^bb209: // pred: ^bb208 -// CHECK-NEXT: %1015 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c35408467139433450592217433187231851964531694900788300625387963629091585785856_i256, %1015 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1016 = llvm.inttoptr %c4_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c65_i256, %1016 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1017 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: "llvm.intrcall"(%1017, %c36_i256) <{id = 4080 : i32, name = "evm.revert"}> : (!llvm.ptr<1>, i256) -> () loc(#loc19) -// CHECK-NEXT: call @".unreachable"() : () -> () loc(#loc19) -// CHECK-NEXT: cf.br ^bb210 loc(#loc19) -// CHECK-NEXT: ^bb210: // 2 preds: ^bb208, ^bb209 -// CHECK-NEXT: %1018 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1019 = llvm.load %1018 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1020 = llvm.inttoptr %c55_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1010, %1020 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1021 = arith.cmpi ult, %1010, %1019 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %1021, ^bb211, ^bb214 loc(#loc19) -// CHECK-NEXT: ^bb211: // pred: ^bb210 -// CHECK-NEXT: %1022 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c55_i256, %1022 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1023 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1024 = "llvm.intrcall"(%1023, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: %1025 = arith.addi %1024, %1010 : i256 loc(#loc19) -// CHECK-NEXT: %1026 = arith.addi %1024, %1019 : i256 loc(#loc19) -// CHECK-NEXT: %1027 = arith.subi %1026, %1025 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb212(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb212(%1028: i256 loc({{.*}}:51:4)): // 2 preds: ^bb211, ^bb213 -// CHECK-NEXT: %1029 = arith.cmpi ult, %1028, %1027 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %1029, ^bb213(%1028 : i256), ^bb214 loc(#loc19) -// CHECK-NEXT: ^bb213(%1030: i256 loc({{.*}}:51:4)): // pred: ^bb212 -// CHECK-NEXT: %1031 = arith.addi %1025, %1030 : i256 loc(#loc19) -// CHECK-NEXT: %1032 = llvm.inttoptr %1031 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %c0_i256, %1032 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1033 = arith.addi %1030, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb212(%1033 : i256) loc(#loc19) -// CHECK-NEXT: ^bb214: // 2 preds: ^bb210, ^bb212 -// CHECK-NEXT: %1034 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: llvm.store %c55_i256, %1034 {alignment = 1 : i64} : i256, !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1035 = llvm.inttoptr %c0_i256 : i256 to !llvm.ptr<1> loc(#loc19) -// CHECK-NEXT: %1036 = "llvm.intrcall"(%1035, %c32_i256) <{id = 4085 : i32, name = "evm.sha3"}> : (!llvm.ptr<1>, i256) -> i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb215(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb215(%1037: i256 loc({{.*}}:51:4)): // 2 preds: ^bb214, ^bb216 -// CHECK-NEXT: %1038 = arith.cmpi ult, %1037, %1010 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %1038, ^bb216(%1037 : i256), ^bb217 loc(#loc19) -// CHECK-NEXT: ^bb216(%1039: i256 loc({{.*}}:51:4)): // pred: ^bb215 -// CHECK-NEXT: %1040 = arith.addi %1013, %1039 : i256 loc(#loc19) -// CHECK-NEXT: %1041 = arith.addi %1036, %1039 : i256 loc(#loc19) -// CHECK-NEXT: %1042 = llvm.inttoptr %1040 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1043 = llvm.load %1042 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1044 = arith.andi %1043, %c1461501637330902918203684832716283019655932542975_i256 : i256 loc(#loc19) -// CHECK-NEXT: %1045 = llvm.inttoptr %1041 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1044, %1045 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1046 = arith.addi %1039, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb215(%1046 : i256) loc(#loc19) -// CHECK-NEXT: ^bb217: // pred: ^bb215 -// CHECK-NEXT: %1047 = llvm.inttoptr %c115_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1048 = llvm.load %1047 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1049 = arith.andi %1048, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %1050 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1051 = llvm.load %1050 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1052 = arith.andi %1051, %c-256_i256 : i256 loc(#loc19) -// CHECK-NEXT: %1053 = arith.ori %1052, %1049 : i256 loc(#loc19) -// CHECK-NEXT: %1054 = llvm.inttoptr %c56_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1053, %1054 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: cf.br ^bb218(%c0_i256 : i256) loc(#loc19) -// CHECK-NEXT: ^bb218(%1055: i256 loc({{.*}}:51:4)): // 2 preds: ^bb217, ^bb219 -// CHECK-NEXT: %1056 = arith.cmpi ult, %1055, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.cond_br %1056, ^bb219(%1055 : i256), ^bb220 loc(#loc19) -// CHECK-NEXT: ^bb219(%1057: i256 loc({{.*}}:51:4)): // pred: ^bb218 -// CHECK-NEXT: %1058 = arith.addi %1057, %c116_i256 : i256 loc(#loc19) -// CHECK-NEXT: %1059 = arith.addi %1057, %c57_i256 : i256 loc(#loc19) -// CHECK-NEXT: %1060 = llvm.inttoptr %1058 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1061 = llvm.load %1060 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1062 = llvm.inttoptr %1059 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1061, %1062 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1063 = arith.addi %1057, %c1_i256 : i256 loc(#loc19) -// CHECK-NEXT: cf.br ^bb218(%1063 : i256) loc(#loc19) -// CHECK-NEXT: ^bb220: // pred: ^bb218 -// CHECK-NEXT: %1064 = llvm.inttoptr %c117_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: %1065 = llvm.load %1064 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc19) -// CHECK-NEXT: %1066 = arith.andi %1065, %c255_i256 : i256 loc(#loc19) -// CHECK-NEXT: %1067 = llvm.inttoptr %c58_i256 : i256 to !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: llvm.store %1066, %1067 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc19) -// CHECK-NEXT: return loc(#loc17) -// CHECK-NEXT: } loc(#loc17) +// CHECK-NEXT: %900 = llvm.inttoptr %c117_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: %901 = llvm.load %900 {alignment = 1 : i64} : !llvm.ptr<5> -> i256 loc(#loc5) +// CHECK-NEXT: %902 = arith.andi %901, %c255_i256 : i256 loc(#loc5) +// CHECK-NEXT: %903 = llvm.inttoptr %c58_i256 : i256 to !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: llvm.store %902, %903 {alignment = 1 : i64} : i256, !llvm.ptr<5> loc(#loc5) +// CHECK-NEXT: return loc(#loc18) +// CHECK-NEXT: } loc(#loc18) // CHECK-NEXT: } loc(#loc1) // CHECK-NEXT: } loc(#loc) // CHECK-NEXT: #loc = loc(unknown) -// CHECK-NEXT: #loc2 = loc({{.*}}:66:2) -// CHECK-NEXT: #loc5 = loc({{.*}}:67:4) -// CHECK-NEXT: #loc6 = loc({{.*}}:62:2) -// CHECK-NEXT: #loc8 = loc({{.*}}:63:4) -// CHECK-NEXT: #loc9 = loc({{.*}}:58:2) -// CHECK-NEXT: #loc11 = loc({{.*}}:59:9) -// CHECK-NEXT: #loc13 = loc({{.*}}:54:2) -// CHECK-NEXT: #loc15 = loc({{.*}}:55:9) -// CHECK-NEXT: #loc17 = loc({{.*}}:50:2) -// CHECK-NEXT: #loc18 = loc({{.*}}:48:2) +// CHECK-NEXT: #loc6 = loc({{.*}}:66:2) +// CHECK-NEXT: #loc9 = loc({{.*}}:67:4) +// CHECK-NEXT: #loc10 = loc({{.*}}:62:2) +// CHECK-NEXT: #loc11 = loc({{.*}}:63:4) +// CHECK-NEXT: #loc12 = loc({{.*}}:58:2) +// CHECK-NEXT: #loc14 = loc({{.*}}:59:9) +// CHECK-NEXT: #loc15 = loc({{.*}}:54:2) +// CHECK-NEXT: #loc17 = loc({{.*}}:55:9) +// CHECK-NEXT: #loc18 = loc({{.*}}:50:2) +// CHECK-NEXT: #loc19 = loc({{.*}}:48:2) // CHECK-EMPTY: diff --git a/test/lit/mlirCodegen/array-huge-static.sol b/test/lit/mlirCodegen/array-huge-static.sol new file mode 100644 index 000000000..fb614f95f --- /dev/null +++ b/test/lit/mlirCodegen/array-huge-static.sol @@ -0,0 +1,187 @@ +// RUN: solc --mlir-action=print-init --mmlir --mlir-print-debuginfo %s | FileCheck %s + +contract C { + uint[(2**256)-1] s; + function getS(uint256 i) public view returns (uint) { + return s[i]; + } +} + +contract D { + uint256[2**100] a; + uint256[2**100] b; + + struct S { + uint256 x; + uint256[2**70] inner; + } + S s; + + function setElt(uint256 i, uint256 v) public { + a[i] = v; + } + + function delElt(uint256 i) public { + delete a[i]; + } + + function delArr() public { + delete a; + } + + function copyArr() public { + a = b; + } + + function getLen() public view returns (uint256) { + return a.length; + } + + function viaRef(uint256 i, uint256 v) public { + uint256[2**100] storage r = a; + r[i] = v; + } + + function delStruct() public { + delete s; + } +} +// NOTE: Assertions have been autogenerated by test/updFileCheckTest.py +// CHECK: #Constructor = #sol +// CHECK-NEXT: #Contract = #sol +// CHECK-NEXT: #Default = #sol +// CHECK-NEXT: #NonPayable = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #View = #sol +// CHECK-NEXT: #loc4 = loc({{.*}}:4:18) +// CHECK-NEXT: module attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: sol.contract @C_22 { +// CHECK-NEXT: sol.state_var @s_9 slot 0 offset 0 : !sol.array<115792089237316195423570985008687907853269984665640564039457584007913129639935 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: sol.func @C_22() attributes {kind = #Constructor, orig_fn_type = () -> (), state_mutability = #NonPayable} { +// CHECK-NEXT: sol.return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: sol.func @getS_21(%arg0: ui256 loc({{.*}}:4:18)) -> ui256 attributes {id = 21 : i64, orig_fn_type = (ui256) -> ui256, selector = -737313952 : i32, state_mutability = #View} { +// CHECK-NEXT: %0 = sol.alloca : !sol.ptr loc(#loc4) +// CHECK-NEXT: sol.store %arg0, %0 : ui256, !sol.ptr loc(#loc4) +// CHECK-NEXT: %1 = sol.addr_of @s_9 : !sol.array<115792089237316195423570985008687907853269984665640564039457584007913129639935 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: %2 = sol.load %0 : !sol.ptr, ui256 loc(#loc5) +// CHECK-NEXT: %3 = sol.gep %1, %2 : !sol.array<115792089237316195423570985008687907853269984665640564039457584007913129639935 x ui256, Storage>, ui256, !sol.ptr loc(#loc6) +// CHECK-NEXT: %4 = sol.load %3 : !sol.ptr, ui256 loc(#loc6) +// CHECK-NEXT: sol.return %4 : ui256 loc(#loc7) +// CHECK-NEXT: } loc(#loc3) +// CHECK-NEXT: } {kind = #Contract} loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:2:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:3:4) +// CHECK-NEXT: #loc3 = loc({{.*}}:4:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:5:17) +// CHECK-NEXT: #loc6 = loc({{.*}}:5:15) +// CHECK-NEXT: #loc7 = loc({{.*}}:5:8) +// CHECK-NEXT: #Constructor = #sol +// CHECK-NEXT: #Contract = #sol +// CHECK-NEXT: #Default = #sol +// CHECK-NEXT: #NonPayable = #sol +// CHECK-NEXT: #Osaka = #sol +// CHECK-NEXT: #View = #sol +// CHECK-NEXT: #loc6 = loc({{.*}}:19:20) +// CHECK-NEXT: #loc7 = loc({{.*}}:19:31) +// CHECK-NEXT: #loc12 = loc({{.*}}:23:20) +// CHECK-NEXT: #loc24 = loc({{.*}}:39:20) +// CHECK-NEXT: #loc25 = loc({{.*}}:39:31) +// CHECK-NEXT: module attributes {llvm.data_layout = "E-p:256:256-i256:256:256-S256-a:256:256", llvm.target_triple = "evm-unknown-unknown", sol.evm_version = #Osaka, sol.revert_strings = #Default} { +// CHECK-NEXT: sol.contract @D_127 { +// CHECK-NEXT: sol.state_var @a_28 slot 0 offset 0 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: sol.state_var @b_34 slot 1267650600228229401496703205376 offset 0 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc3) +// CHECK-NEXT: sol.state_var @s_46 slot 2535301200456458802993406410752 offset 0 : !sol.struct<(ui256, !sol.array<1180591620717411303424 x ui256, Storage>), Storage> loc(#loc4) +// CHECK-NEXT: sol.func @D_127() attributes {kind = #Constructor, orig_fn_type = () -> (), state_mutability = #NonPayable} { +// CHECK-NEXT: sol.return loc(#loc1) +// CHECK-NEXT: } loc(#loc1) +// CHECK-NEXT: sol.func @setElt_60(%arg0: ui256 loc({{.*}}:19:20), %arg1: ui256 loc({{.*}}:19:31)) attributes {id = 60 : i64, orig_fn_type = (ui256, ui256) -> (), selector = 1996358004 : i32, state_mutability = #NonPayable} { +// CHECK-NEXT: %0 = sol.alloca : !sol.ptr loc(#loc6) +// CHECK-NEXT: sol.store %arg0, %0 : ui256, !sol.ptr loc(#loc6) +// CHECK-NEXT: %1 = sol.alloca : !sol.ptr loc(#loc7) +// CHECK-NEXT: sol.store %arg1, %1 : ui256, !sol.ptr loc(#loc7) +// CHECK-NEXT: %2 = sol.addr_of @a_28 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: %3 = sol.load %0 : !sol.ptr, ui256 loc(#loc8) +// CHECK-NEXT: %4 = sol.gep %2, %3 : !sol.array<1267650600228229401496703205376 x ui256, Storage>, ui256, !sol.ptr loc(#loc9) +// CHECK-NEXT: %5 = sol.load %1 : !sol.ptr, ui256 loc(#loc10) +// CHECK-NEXT: sol.store %5, %4 : ui256, !sol.ptr loc(#loc9) +// CHECK-NEXT: sol.return loc(#loc5) +// CHECK-NEXT: } loc(#loc5) +// CHECK-NEXT: sol.func @delElt_71(%arg0: ui256 loc({{.*}}:23:20)) attributes {id = 71 : i64, orig_fn_type = (ui256) -> (), selector = -1581371784 : i32, state_mutability = #NonPayable} { +// CHECK-NEXT: %0 = sol.alloca : !sol.ptr loc(#loc12) +// CHECK-NEXT: sol.store %arg0, %0 : ui256, !sol.ptr loc(#loc12) +// CHECK-NEXT: %1 = sol.addr_of @a_28 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: %2 = sol.load %0 : !sol.ptr, ui256 loc(#loc13) +// CHECK-NEXT: %3 = sol.gep %1, %2 : !sol.array<1267650600228229401496703205376 x ui256, Storage>, ui256, !sol.ptr loc(#loc14) +// CHECK-NEXT: %c0_ui256 = sol.constant 0 : ui256 loc(#loc15) +// CHECK-NEXT: sol.store %c0_ui256, %3 : ui256, !sol.ptr loc(#loc15) +// CHECK-NEXT: sol.return loc(#loc11) +// CHECK-NEXT: } loc(#loc11) +// CHECK-NEXT: sol.func @delArr_78() attributes {id = 78 : i64, orig_fn_type = () -> (), selector = -203604435 : i32, state_mutability = #NonPayable} { +// CHECK-NEXT: %0 = sol.addr_of @a_28 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: sol.delete %0 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc17) +// CHECK-NEXT: sol.return loc(#loc16) +// CHECK-NEXT: } loc(#loc16) +// CHECK-NEXT: sol.func @copyArr_86() attributes {id = 86 : i64, orig_fn_type = () -> (), selector = 1616550925 : i32, state_mutability = #NonPayable} { +// CHECK-NEXT: %0 = sol.addr_of @a_28 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: %1 = sol.addr_of @b_34 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc3) +// CHECK-NEXT: sol.copy %1, %0 : !sol.array<1267650600228229401496703205376 x ui256, Storage>, !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc19) +// CHECK-NEXT: sol.return loc(#loc18) +// CHECK-NEXT: } loc(#loc18) +// CHECK-NEXT: sol.func @getLen_95() -> ui256 attributes {id = 95 : i64, orig_fn_type = () -> ui256, selector = 1250999895 : i32, state_mutability = #View} { +// CHECK-NEXT: %0 = sol.addr_of @a_28 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: %1 = sol.length %0 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc21) +// CHECK-NEXT: sol.return %1 : ui256 loc(#loc22) +// CHECK-NEXT: } loc(#loc20) +// CHECK-NEXT: sol.func @viaRef_119(%arg0: ui256 loc({{.*}}:39:20), %arg1: ui256 loc({{.*}}:39:31)) attributes {id = 119 : i64, orig_fn_type = (ui256, ui256) -> (), selector = 114796897 : i32, state_mutability = #NonPayable} { +// CHECK-NEXT: %0 = sol.alloca : !sol.ptr loc(#loc24) +// CHECK-NEXT: sol.store %arg0, %0 : ui256, !sol.ptr loc(#loc24) +// CHECK-NEXT: %1 = sol.alloca : !sol.ptr loc(#loc25) +// CHECK-NEXT: sol.store %arg1, %1 : ui256, !sol.ptr loc(#loc25) +// CHECK-NEXT: %2 = sol.addr_of @a_28 : !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc2) +// CHECK-NEXT: %3 = sol.alloca : !sol.ptr, Stack> loc(#loc26) +// CHECK-NEXT: sol.store %2, %3 : !sol.array<1267650600228229401496703205376 x ui256, Storage>, !sol.ptr, Stack> loc(#loc26) +// CHECK-NEXT: %4 = sol.load %3 : !sol.ptr, Stack>, !sol.array<1267650600228229401496703205376 x ui256, Storage> loc(#loc27) +// CHECK-NEXT: %5 = sol.load %0 : !sol.ptr, ui256 loc(#loc28) +// CHECK-NEXT: %6 = sol.gep %4, %5 : !sol.array<1267650600228229401496703205376 x ui256, Storage>, ui256, !sol.ptr loc(#loc27) +// CHECK-NEXT: %7 = sol.load %1 : !sol.ptr, ui256 loc(#loc29) +// CHECK-NEXT: sol.store %7, %6 : ui256, !sol.ptr loc(#loc27) +// CHECK-NEXT: sol.return loc(#loc23) +// CHECK-NEXT: } loc(#loc23) +// CHECK-NEXT: sol.func @delStruct_126() attributes {id = 126 : i64, orig_fn_type = () -> (), selector = -776086975 : i32, state_mutability = #NonPayable} { +// CHECK-NEXT: %0 = sol.addr_of @s_46 : !sol.struct<(ui256, !sol.array<1180591620717411303424 x ui256, Storage>), Storage> loc(#loc4) +// CHECK-NEXT: sol.delete %0 : !sol.struct<(ui256, !sol.array<1180591620717411303424 x ui256, Storage>), Storage> loc(#loc31) +// CHECK-NEXT: sol.return loc(#loc30) +// CHECK-NEXT: } loc(#loc30) +// CHECK-NEXT: } {kind = #Contract} loc(#loc1) +// CHECK-NEXT: } loc(#loc) +// CHECK-NEXT: #loc = loc(unknown) +// CHECK-NEXT: #loc1 = loc({{.*}}:9:0) +// CHECK-NEXT: #loc2 = loc({{.*}}:10:4) +// CHECK-NEXT: #loc3 = loc({{.*}}:11:4) +// CHECK-NEXT: #loc4 = loc({{.*}}:17:4) +// CHECK-NEXT: #loc5 = loc({{.*}}:19:4) +// CHECK-NEXT: #loc8 = loc({{.*}}:20:10) +// CHECK-NEXT: #loc9 = loc({{.*}}:20:8) +// CHECK-NEXT: #loc10 = loc({{.*}}:20:15) +// CHECK-NEXT: #loc11 = loc({{.*}}:23:4) +// CHECK-NEXT: #loc13 = loc({{.*}}:24:17) +// CHECK-NEXT: #loc14 = loc({{.*}}:24:15) +// CHECK-NEXT: #loc15 = loc({{.*}}:24:8) +// CHECK-NEXT: #loc16 = loc({{.*}}:27:4) +// CHECK-NEXT: #loc17 = loc({{.*}}:28:8) +// CHECK-NEXT: #loc18 = loc({{.*}}:31:4) +// CHECK-NEXT: #loc19 = loc({{.*}}:32:8) +// CHECK-NEXT: #loc20 = loc({{.*}}:35:4) +// CHECK-NEXT: #loc21 = loc({{.*}}:36:15) +// CHECK-NEXT: #loc22 = loc({{.*}}:36:8) +// CHECK-NEXT: #loc23 = loc({{.*}}:39:4) +// CHECK-NEXT: #loc26 = loc({{.*}}:40:8) +// CHECK-NEXT: #loc27 = loc({{.*}}:41:8) +// CHECK-NEXT: #loc28 = loc({{.*}}:41:10) +// CHECK-NEXT: #loc29 = loc({{.*}}:41:15) +// CHECK-NEXT: #loc30 = loc({{.*}}:44:4) +// CHECK-NEXT: #loc31 = loc({{.*}}:45:8) +// CHECK-EMPTY: diff --git a/test/mlirSemtestFailures.txt b/test/mlirSemtestFailures.txt index f807a85de..d271aa83e 100644 --- a/test/mlirSemtestFailures.txt +++ b/test/mlirSemtestFailures.txt @@ -37,7 +37,6 @@ semanticTests/experimental/type_class semanticTests/expressions/module_from_ternary_expression semanticTests/expressions/tuple_from_ternary_expression semanticTests/expressions/uncalled_address_transfer_send -semanticTests/externalContracts/FixedFeeRegistrar semanticTests/externalContracts/prbmath_signed semanticTests/externalContracts/prbmath_unsigned semanticTests/externalContracts/ramanujan_pi @@ -135,7 +134,6 @@ semanticTests/saltedCreate/salted_create semanticTests/saltedCreate/salted_create_with_value semanticTests/shanghai/evmone_support semanticTests/specialFunctions/abi_functions_member_access -semanticTests/storage/storage_boundary_delete_overflow_bug semanticTests/storageLayoutSpecifier/state_variable_constant_and_immutable semanticTests/structs/function_type_copy semanticTests/structs/lone_struct_array_type