[PATCH] D150388: [CodeGen]Allow targets to use target specific COPY instructions for live range splitting
Vitaly Buka via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 19 10:50:53 PDT 2023
vitalybuka added a comment.
My repro:
; ModuleID = '<bc file>'
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-grtev4-linux-gnu"
%"struct.devtools::inliner::CallArg2.2307.4010.6850.7702.9690.1453.4566.8245.24575.24695.24965.25235.25445.26645.26877.26937.27207.27387.27673.27761.27849.27893.27915.27959.27981.28003.28016.28068.28120.28133.28185.28237.28250.50.102.115" = type { %"class.std::__u::optional.2306.4009.6849.7701.9689.1452.4565.8244.24574.24694.24964.25234.25444.26644.26876.26936.27206.27386.27672.27760.27848.27892.27914.27958.27980.28002.28015.28067.28119.28132.28184.28236.28249.49.101.114" }
%"class.std::__u::optional.2306.4009.6849.7701.9689.1452.4565.8244.24574.24694.24964.25234.25444.26644.26876.26936.27206.27386.27672.27760.27848.27892.27914.27958.27980.28002.28015.28067.28119.28132.28184.28236.28249.49.101.114" = type { %"struct.std::__u::__optional_move_assign_base.base.2305.4008.6848.7700.9688.1451.4564.8243.24573.24693.24963.25233.25443.26643.26875.26935.27205.27385.27671.27759.27847.27891.27913.27957.27979.28001.28014.28066.28118.28131.28183.28235.28248.48.100.113", [3 x i8] }
%"struct.std::__u::__optional_move_assign_base.base.2305.4008.6848.7700.9688.1451.4564.8243.24573.24693.24963.25233.25443.26643.26875.26935.27205.27385.27671.27759.27847.27891.27913.27957.27979.28001.28014.28066.28118.28131.28183.28235.28248.48.100.113" = type { %"struct.std::__u::__optional_copy_assign_base.base.2304.4007.6847.7699.9687.1450.4563.8242.24572.24692.24962.25232.25442.26642.26874.26934.27204.27384.27670.27758.27846.27890.27912.27956.27978.28000.28013.28065.28117.28130.28182.28234.28247.47.99.112" }
%"struct.std::__u::__optional_copy_assign_base.base.2304.4007.6847.7699.9687.1450.4563.8242.24572.24692.24962.25232.25442.26642.26874.26934.27204.27384.27670.27758.27846.27890.27912.27956.27978.28000.28013.28065.28117.28130.28182.28234.28247.47.99.112" = type { %"struct.std::__u::__optional_move_base.base.2303.4006.6846.7698.9686.1449.4562.8241.24571.24691.24961.25231.25441.26641.26873.26933.27203.27383.27669.27757.27845.27889.27911.27955.27977.27999.28012.28064.28116.28129.28181.28233.28246.46.98.111" }
%"struct.std::__u::__optional_move_base.base.2303.4006.6846.7698.9686.1449.4562.8241.24571.24691.24961.25231.25441.26641.26873.26933.27203.27383.27669.27757.27845.27889.27911.27955.27977.27999.28012.28064.28116.28129.28181.28233.28246.46.98.111" = type { %"struct.std::__u::__optional_copy_base.base.2302.4005.6845.7697.9685.1448.4561.8240.24570.24690.24960.25230.25440.26640.26872.26932.27202.27382.27668.27756.27844.27888.27910.27954.27976.27998.28011.28063.28115.28128.28180.28232.28245.45.97.110" }
%"struct.std::__u::__optional_copy_base.base.2302.4005.6845.7697.9685.1448.4561.8240.24570.24690.24960.25230.25440.26640.26872.26932.27202.27382.27668.27756.27844.27888.27910.27954.27976.27998.28011.28063.28115.28128.28180.28232.28245.45.97.110" = type { %"struct.std::__u::__optional_storage_base.base.2301.4004.6844.7696.9684.1447.4560.8239.24569.24689.24959.25229.25439.26639.26871.26931.27201.27381.27667.27755.27843.27887.27909.27953.27975.27997.28010.28062.28114.28127.28179.28231.28244.44.96.109" }
%"struct.std::__u::__optional_storage_base.base.2301.4004.6844.7696.9684.1447.4560.8239.24569.24689.24959.25229.25439.26639.26871.26931.27201.27381.27667.27755.27843.27887.27909.27953.27975.27997.28010.28062.28114.28127.28179.28231.28244.44.96.109" = type { %"struct.std::__u::__optional_destruct_base.base.2300.4003.6843.7695.9683.1446.4559.8238.24568.24688.24958.25228.25438.26638.26870.26930.27200.27380.27666.27754.27842.27886.27908.27952.27974.27996.28009.28061.28113.28126.28178.28230.28243.43.95.108" }
%"struct.std::__u::__optional_destruct_base.base.2300.4003.6843.7695.9683.1446.4559.8238.24568.24688.24958.25228.25438.26638.26870.26930.27200.27380.27666.27754.27842.27886.27908.27952.27974.27996.28009.28061.28113.28126.28178.28230.28243.43.95.108" = type { %union.anon.40.2299.4002.6842.7694.9682.1445.4558.8237.24567.24687.24957.25227.25437.26637.26869.26929.27199.27379.27665.27753.27841.27885.27907.27951.27973.27995.28008.28060.28112.28125.28177.28229.28242.42.94.107, i8 }
%union.anon.40.2299.4002.6842.7694.9682.1445.4558.8237.24567.24687.24957.25227.25437.26637.26869.26929.27199.27379.27665.27753.27841.27885.27907.27951.27973.27995.28008.28060.28112.28125.28177.28229.28242.42.94.107 = type { %"class.clang::CharSourceRange.2289.3992.6832.7684.9672.1435.4548.8227.24566.24686.24956.25226.25436.26636.26868.26928.27198.27378.27664.27752.27840.27884.27906.27950.27972.27994.28007.28059.28111.28124.28176.28228.28241.41.93.106" }
%"class.clang::CharSourceRange.2289.3992.6832.7684.9672.1435.4548.8227.24566.24686.24956.25226.25436.26636.26868.26928.27198.27378.27664.27752.27840.27884.27906.27950.27972.27994.28007.28059.28111.28124.28176.28228.28241.41.93.106" = type <{ %"class.clang::SourceRange.2288.3991.6831.7683.9671.1434.4547.8226.24565.24685.24955.25225.25435.26635.26867.26927.27197.27377.27663.27751.27839.27883.27905.27949.27971.27993.28006.28058.28110.28123.28175.28227.28240.40.92.105", i8, [3 x i8] }>
%"class.clang::SourceRange.2288.3991.6831.7683.9671.1434.4547.8226.24565.24685.24955.25225.25435.26635.26867.26927.27197.27377.27663.27751.27839.27883.27905.27949.27971.27993.28006.28058.28110.28123.28175.28227.28240.40.92.105" = type { %"class.clang::SourceLocation.2287.3990.6830.7682.9670.1433.4546.8225.24555.24675.24945.25215.25425.26625.26857.26917.27187.27367.27653.27741.27829.27873.27895.27939.27961.27983.28005.28057.28109.28122.28174.28226.28239.39.91.104", %"class.clang::SourceLocation.2287.3990.6830.7682.9670.1433.4546.8225.24555.24675.24945.25215.25425.26625.26857.26917.27187.27367.27653.27741.27829.27873.27895.27939.27961.27983.28005.28057.28109.28122.28174.28226.28239.39.91.104" }
%"class.clang::SourceLocation.2287.3990.6830.7682.9670.1433.4546.8225.24555.24675.24945.25215.25425.26625.26857.26917.27187.27367.27653.27741.27829.27873.27895.27939.27961.27983.28005.28057.28109.28122.28174.28226.28239.39.91.104" = type { i32 }
%"struct.std::__u::__optional_destruct_base.2555.4258.7098.7950.9938.1701.4814.8493.24576.24696.24966.25236.25446.26646.26885.26945.27215.27395.27674.27762.27850.27894.27916.27960.27982.28004.28017.28069.28121.28134.28186.28238.28251.51.103.116" = type { %union.anon.40.2299.4002.6842.7694.9682.1445.4558.8237.24567.24687.24957.25227.25437.26637.26869.26929.27199.27379.27665.27753.27841.27885.27907.27951.27973.27995.28008.28060.28112.28125.28177.28229.28242.42.94.107, i8, [3 x i8] }
; Function Attrs: noinline
define void @_ZN8devtools7inliner14ParseCallArgs3ERKN5clang8CallExprERKNS1_12FunctionDeclERNS1_10ASTContextE(ptr %0, ptr %1, i40 %2, ptr %3, i32 %4) #0 {
br label %9
6: ; preds = %21, %18
%.sroa.0.0 = phi ptr [ %24, %21 ], [ null, %18 ]
%.sroa.5.0 = phi ptr [ %25, %21 ], [ null, %18 ]
%7 = add i32 %10, 1
%8 = icmp eq i32 %10, %4
br i1 %8, label %27, label %9
9: ; preds = %6, %5
%.sroa.5.1 = phi ptr [ null, %5 ], [ %.sroa.5.0, %6 ]
%10 = phi i32 [ 0, %5 ], [ %7, %6 ]
%11 = phi i40 [ undef, %5 ], [ %19, %6 ]
%12 = call ptr @_ZN5clang4Expr27IgnoreUnlessSpelledInSourceEv()
%13 = load i8, ptr %1, align 8
%14 = icmp ult i8 %13, -5
%15 = and i40 %11, 4294967295
br i1 %14, label %18, label %16
16: ; preds = %9
%17 = load volatile { i64, i64 }, ptr null, align 4294967296
br label %18
18: ; preds = %16, %9
%19 = phi i40 [ %15, %9 ], [ %2, %16 ]
%20 = icmp ugt ptr %.sroa.5.1, %0
br i1 %20, label %6, label %21
21: ; preds = %18
%22 = icmp eq ptr %.sroa.5.1, null
%23 = zext i1 %22 to i64
%24 = call ptr @_Znwm(i64 0)
%25 = getelementptr %"struct.devtools::inliner::CallArg2.2307.4010.6850.7702.9690.1453.4566.8245.24575.24695.24965.25235.25445.26645.26877.26937.27207.27387.27673.27761.27849.27893.27915.27959.27981.28003.28016.28068.28120.28133.28185.28237.28250.50.102.115", ptr %3, i64 %23
%26 = getelementptr i8, ptr %24, i64 8
store i40 %19, ptr %26, align 4
br label %6
27: ; preds = %6
%28 = getelementptr %"struct.std::__u::__optional_destruct_base.2555.4258.7098.7950.9938.1701.4814.8493.24576.24696.24966.25236.25446.26646.26885.26945.27215.27395.27674.27762.27850.27894.27916.27960.27982.28004.28017.28069.28121.28134.28186.28238.28251.51.103.116", ptr %.sroa.0.0, i64 0, i32 1
%29 = load i8, ptr %28, align 4
%30 = icmp eq i8 %29, 0
br i1 %30, label %32, label %31
31: ; preds = %27
call void @__ubsan_handle_load_invalid_value_abort(ptr %0)
unreachable
32: ; preds = %27
ret void
; uselistorder directives
uselistorder i32 %10, { 1, 0 }
}
define void @_ZN8devtools7inliner14ParseCallArgs2ERKN5clang8CallExprERKNS1_12FunctionDeclERNS1_10ASTContextE(ptr %0, ptr %1) {
call void @_ZN8devtools7inliner14ParseCallArgs3ERKN5clang8CallExprERKNS1_12FunctionDeclERNS1_10ASTContextE(ptr %1, ptr %0, i40 0, ptr null, i32 0)
ret void
}
declare ptr @_ZN5clang4Expr27IgnoreUnlessSpelledInSourceEv()
declare void @__ubsan_handle_load_invalid_value_abort(ptr)
declare ptr @_Znwm(i64)
attributes #0 = { noinline "frame-pointer"="all" }
Before this patch __ubsan_handle_load_invalid_value_abort was not reached, now it is.
llc ./llvm-reduce-42f916.ll -O3 -o ./llvm-reduce-42f916.ll.<revision>.s
diff -u --color ./llvm-reduce-42f916.ll.eb98abab2c83 <https://reviews.llvm.org/rGeb98abab2c83c9c101c4749c93836108657d6164>.s ./llvm-reduce-42f916.ll.b7836d856206 <https://reviews.llvm.org/rGb7836d856206ec39509d42529f958c920368166b>.s :
--- ./llvm-reduce-42f916.ll.eb98abab2c83.s 2023-07-19 10:38:05.571863413 -0700
+++ ./llvm-reduce-42f916.ll.b7836d856206.s 2023-07-19 10:39:47.587632219 -0700
@@ -23,14 +23,14 @@
.cfi_offset %r14, -32
.cfi_offset %r15, -24
movl %r8d, %r14d
- movq %rcx, -64(%rbp) # 8-byte Spill
- movq %rdx, -56(%rbp) # 8-byte Spill
- movq %rsi, %r13
+ movq %rcx, -56(%rbp) # 8-byte Spill
+ movq %rdx, -48(%rbp) # 8-byte Spill
+ movq %rsi, %r12
movq %rdi, %r15
incl %r14d
xorl %ebx, %ebx
- # implicit-def: $r12
- movq %rsi, -48(%rbp) # 8-byte Spill
+ # implicit-def: $rax
+ # kill: killed $rax
jmp .LBB0_3
.p2align 4, 0x90
.LBB0_1: # in Loop: Header=BB0_3 Depth=1
@@ -41,41 +41,37 @@
xorl %edi, %edi
callq _Znwm at PLT
shlq $4, %r15
- addq -64(%rbp), %r15 # 8-byte Folded Reload
- movq %r12, %rcx
+ addq -56(%rbp), %r15 # 8-byte Folded Reload
+ movq -64(%rbp), %rdx # 8-byte Reload
+ movq %rdx, %rcx
shrq $32, %rcx
movb %cl, 12(%rax)
- movl %r12d, 8(%rax)
+ movl %edx, 8(%rax)
movq %r15, %rbx
movq %r13, %r15
- movq -48(%rbp), %r13 # 8-byte Reload
decl %r14d
- je .LBB0_8
+ je .LBB0_7
.LBB0_3: # =>This Inner Loop Header: Depth=1
callq _ZN5clang4Expr27IgnoreUnlessSpelledInSourceEv at PLT
- cmpb $-5, (%r13)
- jae .LBB0_5
+ cmpb $-5, (%r12)
+ jb .LBB0_5
# %bb.4: # in Loop: Header=BB0_3 Depth=1
- movl %r12d, %r12d
- cmpq %r15, %rbx
- jbe .LBB0_1
- jmp .LBB0_7
- .p2align 4, 0x90
-.LBB0_5: # in Loop: Header=BB0_3 Depth=1
movq 0, %rax
movq 8, %rax
- movq -56(%rbp), %r12 # 8-byte Reload
+ movq -48(%rbp), %rax # 8-byte Reload
+ movq %rax, -64(%rbp) # 8-byte Spill
+.LBB0_5: # in Loop: Header=BB0_3 Depth=1
cmpq %r15, %rbx
jbe .LBB0_1
-.LBB0_7: # in Loop: Header=BB0_3 Depth=1
+# %bb.6: # in Loop: Header=BB0_3 Depth=1
xorl %eax, %eax
xorl %ebx, %ebx
decl %r14d
jne .LBB0_3
-.LBB0_8:
+.LBB0_7:
cmpb $0, 12(%rax)
- jne .LBB0_10
-# %bb.9:
+ jne .LBB0_9
+# %bb.8:
addq $24, %rsp
popq %rbx
popq %r12
@@ -85,7 +81,7 @@
popq %rbp
.cfi_def_cfa %rsp, 8
retq
-.LBB0_10:
+.LBB0_9:
.cfi_def_cfa %rbp, 16
movq %r15, %rdi
callq __ubsan_handle_load_invalid_value_abort at PLT
No diff b7836d856206 <https://reviews.llvm.org/rGb7836d856206ec39509d42529f958c920368166b> vs 645f6dcd69a5 <https://reviews.llvm.org/rG645f6dcd69a5315dbe2a6b49fdd8d356512544e8>(HEAD)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D150388/new/
https://reviews.llvm.org/D150388
More information about the llvm-commits
mailing list