[flang-commits] [flang] [llvm] [mlir] [Flang]Fix for changed code at the end of AllocaIP. (PR #92430)
Kareem Ergawy via flang-commits
flang-commits at lists.llvm.org
Mon Jun 3 06:20:02 PDT 2024
================
@@ -0,0 +1,23 @@
+!! The main point of this test is to check that the code compiles at all, so the
----------------
ergawy wrote:
I looked the generated IR of this test, you can check the CFG of the outlined parallel region [here](https://dreampuf.github.io/GraphvizOnline/#digraph%20%22Region%20Graph%20for%20'proc_..omp_par'%20function%22%20%7B%0A%09label%3D%22Region%20Graph%20for%20'proc_..omp_par'%20function%22%3B%0A%0A%09Node0x55f6002bef40%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.entry%3A%5Cl%7C%20%20%25gep_%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20ptr%2C%20ptr%20%5C%7D%2C%20ptr%20%250%2C%20i32%200%2C%20i32%200%5Cl%20%20%25loadgep_%20%3D%20load%20ptr%2C%20ptr%20%25gep_%2C%20align%208%5Cl%20%20%25gep_1%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20ptr%2C%20ptr%20%5C%7D%2C%20ptr%20%250%2C%20i32%200%2C%20i32%201%5Cl%20%20%25loadgep_2%20%3D%20load%20ptr%2C%20ptr%20%25gep_1%2C%20align%208%5Cl%20%20%25gep_3%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20ptr%2C%20ptr%20%5C%7D%2C%20ptr%20%250%2C%20i32%200%2C%20i32%202%5Cl%20%20%25loadgep_4%20%3D%20load%20ptr%2C%20ptr%20%25gep_3%2C%20align%208%5Cl%20%20%25tid.addr.local%20%3D%20alloca%20i32%2C%20align%204%5Cl%20%20%251%20%3D%20load%20i32%2C%20ptr%20%25tid.addr%2C%20align%204%5Cl%20%20store%20i32%20%251%2C%20ptr%20%25tid.addr.local%2C%20align%204%5Cl%20%20%25tid%20%3D%20load%20i32%2C%20ptr%20%25tid.addr.local%2C%20align%204%5Cl%20%20%252%20%3D%20alloca%20ptr%2C%20align%208%5Cl%20%20%25red.array%20%3D%20alloca%20%5B1%20x%20ptr%5D%2C%20align%208%5Cl%20%20br%20label%20%25omp.reduction.neutral%5Cl%7D%22%5D%3B%0A%09Node0x55f6002bef40%20-%3E%20Node0x55f6002e2d00%3B%0A%09Node0x55f6002e2d00%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.neutral%3A%5Cl%7C%20%20%253%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%20%5C%7D%2C%20align%208%5Cl%20%20%254%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%255%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%256%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%20%5C%7D%2C%20align%208%5Cl%20%20%257%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%258%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%25loadgep_%2C%5Cl...%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%258%2C%20ptr%20%257%2C%20align%208%5Cl%20%20%259%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20i64%201%2C%20align%5Cl...%208%5Cl%20%20%2510%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%257%2C%20i32%200%2C%20i32%200%5Cl%20%20%2511%20%3D%20load%20ptr%2C%20ptr%20%2510%2C%20align%208%5Cl%20%20%2512%20%3D%20ptrtoint%20ptr%20%2511%20to%20i64%5Cl%20%20%2513%20%3D%20icmp%20eq%20i64%20%2512%2C%200%5Cl%20%20br%20i1%20%2513%2C%20label%20%25omp.reduction.neutral1%2C%20label%20%25omp.reduction.neutral2%5Cl%7D%22%5D%3B%0A%09Node0x55f6002e2d00%20-%3E%20Node0x55f6002d03a0%3B%0A%09Node0x55f6002e2d00%20-%3E%20Node0x55f6002d2400%3B%0A%09Node0x55f6002d03a0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.neutral1%3A%5Cl%7C%20%20%25138%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%20%5C%7D%20%5C%7B%20ptr%20undef%2C%20i64%5Cl...%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%20i32%2020180515%2C%5Cl...%20i8%200%2C%20i8%2028%2C%20i8%202%2C%20i8%200%20%5C%7D%2C%20ptr%20%2511%2C%200%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%20%5C%7D%20%25138%2C%20ptr%20%256%2C%20align%208%5Cl%20%20%25139%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%256%2C%5Cl...%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25139%2C%20ptr%20%259%2C%20align%5Cl...%208%5Cl%20%20br%20label%20%25omp.reduction.neutral3%5Cl%7D%22%5D%3B%0A%09Node0x55f6002d03a0%20-%3E%20Node0x55f6002d0fb0%3B%0A%09Node0x55f6002d0fb0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.neutral3%3A%5Cl%7C%20%20br%20label%20%25omp.region.cont%5Cl%7D%22%5D%3B%0A%09Node0x55f6002d0fb0%20-%3E%20Node0x55f6002ce410%3B%0A%09Node0x55f6002ce410%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.region.cont%3A%5Cl%7C%20%20%2548%20%3D%20phi%20ptr%20%5B%20%259%2C%20%25omp.reduction.neutral3%20%5D%5Cl%20%20br%20label%20%25omp.reduction.init%5Cl%7D%22%5D%3B%0A%09Node0x55f6002ce410%20-%3E%20Node0x55f6002cebd0%3B%0A%09Node0x55f6002cebd0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.init%3A%5Cl%7C%20%20store%20ptr%20%2548%2C%20ptr%20%252%2C%20align%208%5Cl%20%20br%20label%20%25omp.par.region%5Cl%7D%22%5D%3B%0A%09Node0x55f6002cebd0%20-%3E%20Node0x55f6002cf6e0%3B%0A%09Node0x55f6002cf6e0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.region%3A%5Cl%7C%20%20br%20label%20%25omp.par.region5%5Cl%7D%22%5D%3B%0A%09Node0x55f6002cf6e0%20-%3E%20Node0x55f6002d0070%3B%0A%09Node0x55f6002d0070%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.region5%3A%5Cl%7C%20%20%2549%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2550%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2551%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2552%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2553%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2554%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2555%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20i64%201%2C%5Cl...%20align%208%5Cl%20%20%2556%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%25loadgep_2%2C%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2556%2C%20ptr%20%2554%2C%20align%5Cl...%208%5Cl%20%20%2557%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2554%2C%20i32%200%2C%20i32%200%5Cl%20%20%2558%20%3D%20load%20ptr%2C%20ptr%20%2557%2C%20align%208%5Cl%20%20%2559%20%3D%20ptrtoint%20ptr%20%2558%20to%20i64%5Cl%20%20%2560%20%3D%20icmp%20ne%20i64%20%2559%2C%200%5Cl%20%20br%20i1%20%2560%2C%20label%20%25omp.par.region6%2C%20label%20%25omp.par.region7%5Cl%7D%22%5D%3B%0A%09Node0x55f6002d0070%20-%3E%20Node0x55f6002fd8d0%3B%0A%09Node0x55f6002d0070%20-%3E%20Node0x55f6002fd930%3B%0A%09Node0x55f6002fd8d0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.region6%3A%5Cl%7C%20%20%25118%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%25loadgep_2%2C%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25118%2C%20ptr%20%2553%2C%5Cl...%20align%208%5Cl%20%20%25119%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2553%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%200%5Cl%20%20%25120%20%3D%20load%20i64%2C%20ptr%20%25119%2C%20align%208%5Cl%20%20%25121%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2553%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%201%5Cl%20%20%25122%20%3D%20load%20i64%2C%20ptr%20%25121%2C%20align%208%5Cl%20%20%25123%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2553%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%202%5Cl%20%20%25124%20%3D%20load%20i64%2C%20ptr%20%25123%2C%20align%208%5Cl%20%20%25125%20%3D%20icmp%20sgt%20i64%20%25122%2C%200%5Cl%20%20%25126%20%3D%20select%20i1%20%25125%2C%20i64%20%25122%2C%20i64%200%5Cl%20%20%25127%20%3D%20mul%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%5Cl...%20i64)%2C%20%25126%5Cl%20%20%25128%20%3D%20call%20ptr%20%40malloc(i64%20%25127)%5Cl%20%20%25129%20%3D%20icmp%20eq%20i64%20%25126%2C%200%5Cl%20%20%25130%20%3D%20select%20i1%20%25129%2C%20i64%201%2C%20i64%20%25120%5Cl%20%20%25131%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%5C%7B%20ptr%5Cl...%20undef%2C%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%20i32%5Cl...%2020180515%2C%20i8%201%2C%20i8%2028%2C%20i8%202%2C%20i8%200%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20undef%20%5C%7D%2C%20i64%20%25130%2C%207%2C%200%2C%200%5Cl%20%20%25132%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25131%2C%5Cl...%20i64%20%25126%2C%207%2C%200%2C%201%5Cl%20%20%25133%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25132%2C%5Cl...%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%207%2C%200%2C%202%5Cl%20%20%25134%20%3D%20mul%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%5Cl...%20i64)%2C%20%25126%5Cl%20%20%25135%20%3D%20mul%20i64%201%2C%20%25126%5Cl%20%20%25136%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25133%2C%5Cl...%20ptr%20%25128%2C%200%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25136%2C%20ptr%20%2552%2C%5Cl...%20align%208%5Cl%20%20%25137%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%2552%2C%5Cl...%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25137%2C%20ptr%20%2555%2C%5Cl...%20align%208%5Cl%20%20br%20label%20%25omp.par.region8%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fd8d0%20-%3E%20Node0x55f6002fd990%3B%0A%09Node0x55f6002fd990%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.region8%3A%5Cl%7C%20%20%2562%20%3D%20call%20ptr%20%40malloc(i64%20mul%20(i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%5Cl...%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%20i64%2010))%5Cl%20%20%2563%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%5C%7B%20ptr%5Cl...%20undef%2C%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%20i32%5Cl...%2020180515%2C%20i8%201%2C%20i8%2028%2C%20i8%202%2C%20i8%200%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5B%5B3%20x%20i64%5D%20%5Bi64%201%2C%20i64%2010%2C%5Cl...%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2562%2C%200%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2563%2C%20ptr%20%2551%2C%20align%5Cl...%208%5Cl%20%20%2564%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%2551%2C%5Cl...%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2564%2C%20ptr%20%2555%2C%20align%5Cl...%208%5Cl%20%20%2565%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%2555%2C%5Cl...%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2565%2C%20ptr%20%2550%2C%20align%5Cl...%208%5Cl%20%20%2566%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2550%2C%20i32%200%2C%20i32%200%5Cl%20%20%2567%20%3D%20load%20ptr%2C%20ptr%20%2566%2C%20align%208%5Cl%20%20%2568%20%3D%20ptrtoint%20ptr%20%2567%20to%20i64%5Cl%20%20%2569%20%3D%20icmp%20ne%20i64%20%2568%2C%200%5Cl%20%20br%20i1%20%2569%2C%20label%20%25omp.par.region9%2C%20label%20%25omp.par.region10%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fd990%20-%3E%20Node0x55f6002fde00%3B%0A%09Node0x55f6002fd990%20-%3E%20Node0x55f6002fde60%3B%0A%09Node0x55f6002fde00%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.region9%3A%5Cl%7C%20%20%25114%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%2555%2C%5Cl...%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25114%2C%20ptr%20%2549%2C%5Cl...%20align%208%5Cl%20%20%25115%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2549%2C%20i32%200%2C%20i32%200%5Cl%20%20%25116%20%3D%20load%20ptr%2C%20ptr%20%25115%2C%20align%208%5Cl%20%20call%20void%20%40free(ptr%20%25116)%5Cl%20%20%25117%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%25loadgep_4%2C%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25117%2C%20ptr%20%2555%2C%5Cl...%20align%208%5Cl%20%20br%20label%20%25omp.par.region10%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fde00%20-%3E%20Node0x55f6002fde60%3B%0A%09Node0x55f6002fde60%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.region10%3A%5Cl%7C%20%20br%20label%20%25omp.region.cont4%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fde60%20-%3E%20Node0x55f6002fdec0%3B%0A%09Node0x55f6002fdec0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.region.cont4%3A%5Cl%7C%20%20%25red.array.elem.0%20%3D%20getelementptr%20inbounds%20%5B1%20x%20ptr%5D%2C%20ptr%20%25red.array%2C%20i64%5Cl...%200%2C%20i64%200%5Cl%20%20store%20ptr%20%252%2C%20ptr%20%25red.array.elem.0%2C%20align%208%5Cl%20%20%25omp_global_thread_num11%20%3D%20call%20i32%20%40__kmpc_global_thread_num(ptr%20%401)%5Cl%20%20%25reduce%20%3D%20call%20i32%20%40__kmpc_reduce(ptr%20%401%2C%20i32%20%25omp_global_thread_num11%2C%20i32%5Cl...%201%2C%20i64%208%2C%20ptr%20%25red.array%2C%20ptr%20%40.omp.reduction.func%2C%20ptr%5Cl...%20%40.gomp_critical_user_.reduction.var)%5Cl%20%20switch%20i32%20%25reduce%2C%20label%20%25reduce.finalize%20%5B%5Cl%20%20%20%20i32%201%2C%20label%20%25reduce.switch.nonatomic%5Cl%20%20%20%20i32%202%2C%20label%20%25reduce.switch.atomic%5Cl%20%20%5D%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fdec0%20-%3E%20Node0x55f6002fdf20%3B%0A%09Node0x55f6002fdec0%20-%3E%20Node0x55f6002fdf80%3B%0A%09Node0x55f6002fdec0%20-%3E%20Node0x55f6002fdfe0%3B%0A%09Node0x55f6002fdf20%20%5Bshape%3Drecord%2Clabel%3D%22%7Breduce.finalize%3A%5Cl%7C%20%20br%20label%20%25omp.par.pre_finalize%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fdf20%20-%3E%20Node0x55f6002fe040%3B%0A%09Node0x55f6002fe040%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.pre_finalize%3A%5Cl%7C%20%20%25107%20%3D%20load%20ptr%2C%20ptr%20%252%2C%20align%208%5Cl%20%20br%20label%20%25omp.reduction.cleanup%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fe040%20-%3E%20Node0x55f6002fe060%3B%0A%09Node0x55f6002fe060%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.cleanup%3A%5Cl%7C%20%20%25108%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%25109%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%25107%2C%5Cl...%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%25109%2C%20ptr%20%25108%2C%5Cl...%20align%208%5Cl%20%20%25110%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%25108%2C%20i32%200%2C%20i32%200%5Cl%20%20%25111%20%3D%20load%20ptr%2C%20ptr%20%25110%2C%20align%208%5Cl%20%20%25112%20%3D%20ptrtoint%20ptr%20%25111%20to%20i64%5Cl%20%20%25113%20%3D%20icmp%20ne%20i64%20%25112%2C%200%5Cl%20%20br%20i1%20%25113%2C%20label%20%25omp.reduction.cleanup17%2C%20label%20%25omp.reduction.cleanup18%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fe060%20-%3E%20Node0x55f6002fe710%3B%0A%09Node0x55f6002fe060%20-%3E%20Node0x55f6002fe9b0%3B%0A%09Node0x55f6002fe710%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.cleanup17%3A%5Cl%7C%20%20call%20void%20%40free(ptr%20%25111)%5Cl%20%20br%20label%20%25omp.reduction.cleanup18%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fe710%20-%3E%20Node0x55f6002fe9b0%3B%0A%09Node0x55f6002fe9b0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.cleanup18%3A%5Cl%7C%20%20br%20label%20%25omp.region.cont16%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fe9b0%20-%3E%20Node0x55f6002fea10%3B%0A%09Node0x55f6002fea10%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.region.cont16%3A%5Cl%7C%20%20br%20label%20%25omp.par.outlined.exit.exitStub%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fea10%20-%3E%20Node0x55f6002fea70%3B%0A%09Node0x55f6002fea70%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.outlined.exit.exitStub%3A%5Cl%7C%20%20ret%20void%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fdf80%20%5Bshape%3Drecord%2Clabel%3D%22%7Breduce.switch.nonatomic%3A%5Cl%7C%20%20%25red.private.value.0%20%3D%20load%20ptr%2C%20ptr%20%252%2C%20align%208%5Cl%20%20br%20label%20%25omp.reduction.nonatomic.body%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fdf80%20-%3E%20Node0x55f6002ff300%3B%0A%09Node0x55f6002ff300%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.nonatomic.body%3A%5Cl%7C%20%20%2570%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2571%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20align%208%5Cl%20%20%2572%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%25loadgep_%2C%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2572%2C%20ptr%20%2571%2C%20align%5Cl...%208%5Cl%20%20%2573%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%25red.private.value.0%2C%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2573%2C%20ptr%20%2570%2C%20align%5Cl...%208%5Cl%20%20%2574%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2571%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%200%5Cl%20%20%2575%20%3D%20load%20i64%2C%20ptr%20%2574%2C%20align%208%5Cl%20%20%2576%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2571%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%201%5Cl%20%20%2577%20%3D%20load%20i64%2C%20ptr%20%2576%2C%20align%208%5Cl%20%20%2578%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2571%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%202%5Cl%20%20%2579%20%3D%20load%20i64%2C%20ptr%20%2578%2C%20align%208%5Cl%20%20br%20label%20%25omp.reduction.nonatomic.body13%5Cl%7D%22%5D%3B%0A%09Node0x55f6002ff300%20-%3E%20Node0x55f6002ff360%3B%0A%09Node0x55f6002ff360%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.nonatomic.body13%3A%5Cl%7C%20%20%2580%20%3D%20phi%20i64%20%5B%20%25105%2C%20%25omp.reduction.nonatomic.body14%20%5D%2C%20%5B%201%2C%5Cl...%20%25omp.reduction.nonatomic.body%20%5D%5Cl%20%20%2581%20%3D%20phi%20i64%20%5B%20%25106%2C%20%25omp.reduction.nonatomic.body14%20%5D%2C%20%5B%20%2577%2C%5Cl...%20%25omp.reduction.nonatomic.body%20%5D%5Cl%20%20%2582%20%3D%20icmp%20sgt%20i64%20%2581%2C%200%5Cl%20%20br%20i1%20%2582%2C%20label%20%25omp.reduction.nonatomic.body14%2C%20label%5Cl...%20%25omp.reduction.nonatomic.body15%5Cl%7D%22%5D%3B%0A%09Node0x55f6002ff360%20-%3E%20Node0x55f6002ff3c0%3B%0A%09Node0x55f6002ff360%20-%3E%20Node0x55f6002ff860%3B%0A%09Node0x55f6002ff3c0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.nonatomic.body14%3A%5Cl%7C%20%20%2584%20%3D%20sub%20nsw%20i64%20%2580%2C%20%2575%5Cl%20%20%2585%20%3D%20mul%20nsw%20i64%20%2584%2C%201%5Cl%20%20%2586%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2571%2C%20i32%200%2C%20i32%207%2C%20i32%200%2C%20i32%202%5Cl%20%20%2587%20%3D%20load%20i64%2C%20ptr%20%2586%2C%20align%208%5Cl%20%20%2588%20%3D%20mul%20nsw%20i64%20%2585%2C%20%2587%5Cl%20%20%2589%20%3D%20add%20nsw%20i64%20%2588%2C%200%5Cl%20%20%2590%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2571%2C%20i32%200%2C%20i32%200%5Cl%20%20%2591%20%3D%20load%20ptr%2C%20ptr%20%2590%2C%20align%208%5Cl%20%20%2592%20%3D%20getelementptr%20i8%2C%20ptr%20%2591%2C%20i64%20%2589%5Cl%20%20%2593%20%3D%20sub%20nsw%20i64%20%2580%2C%20%2575%5Cl%20%20%2594%20%3D%20mul%20nsw%20i64%20%2593%2C%201%5Cl%20%20%2595%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2570%2C%20i32%200%2C%20i32%207%2C%20i32%200%2C%20i32%202%5Cl%20%20%2596%20%3D%20load%20i64%2C%20ptr%20%2595%2C%20align%208%5Cl%20%20%2597%20%3D%20mul%20nsw%20i64%20%2594%2C%20%2596%5Cl%20%20%2598%20%3D%20add%20nsw%20i64%20%2597%2C%200%5Cl%20%20%2599%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%2570%2C%20i32%200%2C%20i32%200%5Cl%20%20%25100%20%3D%20load%20ptr%2C%20ptr%20%2599%2C%20align%208%5Cl%20%20%25101%20%3D%20getelementptr%20i8%2C%20ptr%20%25100%2C%20i64%20%2598%5Cl%20%20%25102%20%3D%20load%20double%2C%20ptr%20%2592%2C%20align%208%5Cl%20%20%25103%20%3D%20load%20double%2C%20ptr%20%25101%2C%20align%208%5Cl%20%20%25104%20%3D%20fadd%20contract%20double%20%25102%2C%20%25103%5Cl%20%20store%20double%20%25104%2C%20ptr%20%2592%2C%20align%208%5Cl%20%20%25105%20%3D%20add%20i64%20%2580%2C%201%5Cl%20%20%25106%20%3D%20sub%20i64%20%2581%2C%201%5Cl%20%20br%20label%20%25omp.reduction.nonatomic.body13%5Cl%7D%22%5D%3B%0A%09Node0x55f6002ff3c0%20-%3E%20Node0x55f6002ff360%5Bconstraint%3Dfalse%5D%3B%0A%09Node0x55f6002ff860%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.nonatomic.body15%3A%5Cl%7C%20%20br%20label%20%25omp.region.cont12%5Cl%7D%22%5D%3B%0A%09Node0x55f6002ff860%20-%3E%20Node0x55f6002ff8c0%3B%0A%09Node0x55f6002ff8c0%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.region.cont12%3A%5Cl%7C%20%20%2583%20%3D%20phi%20ptr%20%5B%20%25loadgep_%2C%20%25omp.reduction.nonatomic.body15%20%5D%5Cl%20%20call%20void%20%40__kmpc_end_reduce(ptr%20%401%2C%20i32%20%25omp_global_thread_num11%2C%20ptr%5Cl...%20%40.gomp_critical_user_.reduction.var)%5Cl%20%20br%20label%20%25reduce.finalize%5Cl%7D%22%5D%3B%0A%09Node0x55f6002ff8c0%20-%3E%20Node0x55f6002fdf20%3B%0A%09Node0x55f6002fdfe0%20%5Bshape%3Drecord%2Clabel%3D%22%7Breduce.switch.atomic%3A%5Cl%7C%20%20unreachable%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fd930%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.par.region7%3A%5Cl%7C%20%20%2561%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%25loadgep_4%2C%20align%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2561%2C%20ptr%20%2555%2C%20align%5Cl...%208%5Cl%20%20br%20label%20%25omp.par.region8%5Cl%7D%22%5D%3B%0A%09Node0x55f6002fd930%20-%3E%20Node0x55f6002fd990%3B%0A%09Node0x55f6002d2400%20%5Bshape%3Drecord%2Clabel%3D%22%7Bomp.reduction.neutral2%3A%5Cl%7C%20%20%2514%20%3D%20alloca%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20i64%201%2C%5Cl...%20align%208%5Cl%20%20%2515%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%257%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%200%5Cl%20%20%2516%20%3D%20load%20i64%2C%20ptr%20%2515%2C%20align%208%5Cl%20%20%2517%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%257%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%201%5Cl%20%20%2518%20%3D%20load%20i64%2C%20ptr%20%2517%2C%20align%208%5Cl%20%20%2519%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%257%2C%20i32%200%2C%20i32%207%2C%20i64%200%2C%20i32%202%5Cl%20%20%2520%20%3D%20load%20i64%2C%20ptr%20%2519%2C%20align%208%5Cl%20%20%2521%20%3D%20mul%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%5Cl...%20%2518%5Cl%20%20%2522%20%3D%20call%20ptr%20%40malloc(i64%20%2521)%5Cl%20%20%2523%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%5C%7B%20ptr%5Cl...%20undef%2C%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%20i32%5Cl...%2020180515%2C%20i8%201%2C%20i8%2028%2C%20i8%200%2C%20i8%200%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5B%5B3%20x%20i64%5D%20%5Bi64%201%2C%20i64%5Cl...%20undef%2C%20i64%20undef%5D%5D%20%5C%7D%2C%20i64%20%2518%2C%207%2C%200%2C%201%5Cl%20%20%2524%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2523%2C%5Cl...%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%207%2C%200%2C%202%5Cl%20%20%2525%20%3D%20mul%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%5Cl...%20%2518%5Cl%20%20%2526%20%3D%20mul%20i64%201%2C%20%2518%5Cl%20%20%2527%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2524%2C%5Cl...%20ptr%20%2522%2C%200%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2527%2C%20ptr%20%255%2C%20align%208%5Cl%20%20%2528%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%255%2C%20i32%200%2C%20i32%207%2C%20i32%200%2C%20i32%200%5Cl%20%20%2529%20%3D%20load%20i64%2C%20ptr%20%2528%2C%20align%208%5Cl%20%20%2530%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%255%2C%20i32%200%2C%20i32%207%2C%20i32%200%2C%20i32%201%5Cl%20%20%2531%20%3D%20load%20i64%2C%20ptr%20%2530%2C%20align%208%5Cl%20%20%2532%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%255%2C%20i32%200%2C%20i32%207%2C%20i32%200%2C%20i32%202%5Cl%20%20%2533%20%3D%20load%20i64%2C%20ptr%20%2532%2C%20align%208%5Cl%20%20%2534%20%3D%20getelementptr%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%5Cl...%20%255%2C%20i32%200%2C%20i32%200%5Cl%20%20%2535%20%3D%20load%20ptr%2C%20ptr%20%2534%2C%20align%208%5Cl%20%20%2536%20%3D%20mul%20i64%20%2518%2C%20%2533%5Cl%20%20%2537%20%3D%20icmp%20eq%20i64%20%2518%2C%200%5Cl%20%20%2538%20%3D%20select%20i1%20%2537%2C%20i64%201%2C%20i64%20%2516%5Cl%20%20%2539%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%5C%7B%20ptr%5Cl...%20undef%2C%20i64%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%20i32%5Cl...%2020180515%2C%20i8%201%2C%20i8%2028%2C%20i8%202%2C%20i8%200%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20undef%20%5C%7D%2C%20i64%20%2538%2C%207%2C%200%2C%200%5Cl%20%20%2540%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2539%2C%5Cl...%20i64%20%2518%2C%207%2C%200%2C%201%5Cl%20%20%2541%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2540%2C%5Cl...%20i64%20%2533%2C%207%2C%200%2C%202%5Cl%20%20%2542%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2541%2C%5Cl...%20ptr%20%2535%2C%200%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2542%2C%20ptr%20%254%2C%20align%208%5Cl%20%20%2543%20%3D%20alloca%20double%2C%20i64%201%2C%20align%208%5Cl%20%20store%20double%200.000000e%2B00%2C%20ptr%20%2543%2C%20align%208%5Cl%20%20%2544%20%3D%20insertvalue%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%20%5C%7D%20%5C%7B%20ptr%20undef%2C%20i64%5Cl...%20ptrtoint%20(ptr%20getelementptr%20(double%2C%20ptr%20null%2C%20i32%201)%20to%20i64)%2C%20i32%2020180515%2C%5Cl...%20i8%200%2C%20i8%2028%2C%20i8%200%2C%20i8%200%20%5C%7D%2C%20ptr%20%2543%2C%200%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%20%5C%7D%20%2544%2C%20ptr%20%253%2C%20align%208%5Cl%20%20%2545%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%254%2C%20align%5Cl...%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2545%2C%20ptr%20%2514%2C%20align%5Cl...%208%5Cl%20%20%2546%20%3D%20call%20%5C%7B%5C%7D%20%40_FortranAAssign(ptr%20%2514%2C%20ptr%20%253%2C%20ptr%5Cl...%20%40_QQclX6581ebbcb6be52a63482d2bbd47895d7%2C%20i32%2010)%5Cl%20%20%2547%20%3D%20load%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%2C%20ptr%20%254%2C%20align%5Cl...%208%5Cl%20%20store%20%5C%7B%20ptr%2C%20i64%2C%20i32%2C%20i8%2C%20i8%2C%20i8%2C%20i8%2C%20%5B1%20x%20%5B3%20x%20i64%5D%5D%20%5C%7D%20%2547%2C%20ptr%20%259%2C%20align%208%5Cl%20%20br%20label%20%25omp.reduction.neutral3%5Cl%7D%22%5D%3B%0A%09Node0x55f6002d2400%20-%3E%20Node0x55f6002d0fb0%3B%0A%09colorscheme%20%3D%20%22paired12%22%0A%20%20%20%20%20%20%20%20subgraph%20cluster_0x55f6002dfcb0%20%7B%0A%20%20%20%20%20%20%20%20%20%20label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20style%20%3D%20filled%3B%0A%20%20%20%20%20%20%20%20%20%20color%20%3D%201%0A%20%20%20%20%20%20%20%20%20%20subgraph%20cluster_0x55f6002f6de0%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20filled%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20color%20%3D%203%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002e2d00%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002d03a0%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002d2400%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20subgraph%20cluster_0x55f6002f6d60%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20filled%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20color%20%3D%203%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002d0070%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002fd8d0%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002fd930%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20subgraph%20cluster_0x55f6002f7db0%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20filled%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20color%20%3D%203%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002fd990%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002fde00%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20subgraph%20cluster_0x55f6002cea00%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20filled%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20color%20%3D%203%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002fe060%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002fe710%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20subgraph%20cluster_0x55f6002d9340%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20filled%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20color%20%3D%203%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002ff360%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Node0x55f6002ff3c0%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002bef40%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002d0fb0%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002ce410%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002cebd0%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002cf6e0%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fde60%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fdec0%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fdf20%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fe040%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fe9b0%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fea10%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fea70%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fdf80%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002ff300%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002ff860%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002ff8c0%3B%0A%20%20%20%20%20%20%20%20%20%20Node0x55f6002fdfe0%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%0A) (let me know if the link does not work; I can directly shared the image file).
As you can see in the CFG, `alloca`s are still scattered through out the BBs of the outlined region's function. I think if we want to keep all `alloca`s only at the entry block of the outlined function, only carefully updating the insertion point will not be enough.
I think the problem is that we convert and inlined entire "sub-regions" individually; for example, in this test we inline the whole logic/IR for `A` first and then `F` (or vice versa). So no matter where the IP is, since for allocatables there is `if-else` condtion to inline, the currently set IP will have to be split and `alloca`s that were created before will either be pushed up or down to a different BB than the one we will insert the new `alloca`s to.
Instead, I think we should do that a post-processing step after the region is completely emitted. So we hoist the all `alloca`s after we finish emitting the outlined region to the entry BB of the outlined function. However, I don't know if there are any unseen issues here.
https://github.com/llvm/llvm-project/pull/92430
More information about the flang-commits
mailing list