Comments (6)
Because the error is so undescriptive, it is difficult for us to make a more minimal repro than this. I can gather more information if it helps but you will have to tell me what to gather.
Fortunately the usual minimization strategies don't require good errors. Here is a minimization, compile with
cargo build --target=thumbv6m-none-eabi
#![no_std]
pub fn amiga_note(period: u16) -> Option<u8> {
match period {
6096 => Some(3),
5760 => Some(4),
5424 => Some(5),
5120 => Some(6),
4832 => Some(7),
4560 => Some(8),
4304 => Some(9),
4064 => Some(10),
3840 => Some(11),
3624 => Some(12),
3424 => Some(13),
3232 => Some(14),
3048 => Some(15),
2880 => Some(16),
2712 => Some(17),
2560 => Some(18),
2416 => Some(19),
2280 => Some(20),
2152 => Some(21),
2032 => Some(22),
1920 => Some(23),
1812 => Some(24),
1712 => Some(25),
1616 => Some(26),
1524 => Some(27),
1440 => Some(28),
1356 => Some(29),
1280 => Some(30),
1208 => Some(31),
1140 => Some(32),
1076 => Some(33),
1016 => Some(34),
960 => Some(35),
906 => Some(36),
856 => Some(37),
808 => Some(38),
762 => Some(39),
720 => Some(40),
678 => Some(41),
640 => Some(42),
604 => Some(43),
570 => Some(44),
538 => Some(45),
508 => Some(46),
480 => Some(47),
453 => Some(48),
428 => Some(49),
404 => Some(50),
381 => Some(51),
360 => Some(52),
339 => Some(53),
320 => Some(54),
302 => Some(55),
285 => Some(56),
269 => Some(57),
254 => Some(58),
240 => Some(59),
226 => Some(60),
214 => Some(61),
202 => Some(62),
190 => Some(63),
180 => Some(64),
170 => Some(65),
160 => Some(66),
151 => Some(67),
143 => Some(68),
135 => Some(69),
127 => Some(70),
120 => Some(71),
113 => Some(72),
107 => Some(73),
101 => Some(74),
95 => Some(75),
90 => Some(76),
85 => Some(77),
80 => Some(78),
75 => Some(79),
71 => Some(80),
67 => Some(81),
63 => Some(82),
60 => Some(83),
56 => Some(84),
0 => Some(0),
_ => None,
}
}
from rust.
llc
has to be invoked with explicitly disabled optimisations for it to crash in this case. The following is a purely LLVM IR repro:
https://godbolt.org/z/G1YKKhrb1
Seems like 64 or more basic blocks in a switch hits the issue (don't know why)
from rust.
Spoke informally to @whitequark who speculates this is the constant island spilling pass and increasing the return value of this function by, say, 2 would probably bruteforce workaround the problem. WQ also thought this would probably be obvious to whoever looks at this bug, but passing it onβ¦
from rust.
Interestingly, the optimized builds of these functions succeed.
Unoptimized, with `--emit=llvm-ir`
source_filename = "example.9fee28f4e7da0477-cgu.0"
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv6m-none-unknown-eabi"
define dso_local { i1, i8 } @_ZN7example10amiga_note17hefda7c267cdd192eE(i16 %period) unnamed_addr #0 !dbg !5 {
%_0 = alloca [2 x i8], align 1
switch i16 %period, label %bb1 [
i16 6096, label %bb2
i16 5760, label %bb3
i16 5424, label %bb4
i16 5120, label %bb5
i16 4832, label %bb6
i16 4560, label %bb7
i16 4304, label %bb8
i16 4064, label %bb9
i16 3840, label %bb10
i16 3624, label %bb11
i16 3424, label %bb12
i16 3232, label %bb13
i16 3048, label %bb14
i16 2880, label %bb15
i16 2712, label %bb16
i16 2560, label %bb17
i16 2416, label %bb18
i16 2280, label %bb19
i16 2152, label %bb20
i16 2032, label %bb21
i16 1920, label %bb22
i16 1812, label %bb23
i16 1712, label %bb24
i16 1616, label %bb25
i16 1524, label %bb26
i16 1440, label %bb27
i16 1356, label %bb28
i16 1280, label %bb29
i16 1208, label %bb30
i16 1140, label %bb31
i16 1076, label %bb32
i16 1016, label %bb33
i16 960, label %bb34
i16 906, label %bb35
i16 856, label %bb36
i16 808, label %bb37
i16 762, label %bb38
i16 720, label %bb39
i16 678, label %bb40
i16 640, label %bb41
i16 604, label %bb42
i16 570, label %bb43
i16 538, label %bb44
i16 508, label %bb45
i16 480, label %bb46
i16 453, label %bb47
i16 428, label %bb48
i16 404, label %bb49
i16 381, label %bb50
i16 360, label %bb51
i16 339, label %bb52
i16 320, label %bb53
i16 302, label %bb54
i16 285, label %bb55
i16 269, label %bb56
i16 254, label %bb57
i16 240, label %bb58
i16 226, label %bb59
i16 214, label %bb60
i16 202, label %bb61
i16 190, label %bb62
i16 180, label %bb63
i16 170, label %bb64
i16 160, label %bb65
i16 151, label %bb66
i16 143, label %bb67
i16 135, label %bb68
i16 127, label %bb69
i16 120, label %bb70
i16 113, label %bb71
i16 107, label %bb72
i16 101, label %bb73
i16 95, label %bb74
i16 90, label %bb75
i16 85, label %bb76
i16 80, label %bb77
i16 75, label %bb78
i16 71, label %bb79
i16 67, label %bb80
i16 63, label %bb81
i16 60, label %bb82
i16 56, label %bb83
i16 0, label %bb84
], !dbg !10
bb1: ; preds = %start
store i8 0, ptr %_0, align 1, !dbg !11
br label %bb85, !dbg !11
bb2: ; preds = %start
%0 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !12
store i8 3, ptr %0, align 1, !dbg !12
store i8 1, ptr %_0, align 1, !dbg !12
br label %bb85, !dbg !12
bb3: ; preds = %start
%1 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !13
store i8 4, ptr %1, align 1, !dbg !13
store i8 1, ptr %_0, align 1, !dbg !13
br label %bb85, !dbg !13
bb4: ; preds = %start
%2 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !14
store i8 5, ptr %2, align 1, !dbg !14
store i8 1, ptr %_0, align 1, !dbg !14
br label %bb85, !dbg !14
bb5: ; preds = %start
%3 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !15
store i8 6, ptr %3, align 1, !dbg !15
store i8 1, ptr %_0, align 1, !dbg !15
br label %bb85, !dbg !15
bb6: ; preds = %start
%4 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !16
store i8 7, ptr %4, align 1, !dbg !16
store i8 1, ptr %_0, align 1, !dbg !16
br label %bb85, !dbg !16
bb7: ; preds = %start
%5 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !17
store i8 8, ptr %5, align 1, !dbg !17
store i8 1, ptr %_0, align 1, !dbg !17
br label %bb85, !dbg !17
bb8: ; preds = %start
%6 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !18
store i8 9, ptr %6, align 1, !dbg !18
store i8 1, ptr %_0, align 1, !dbg !18
br label %bb85, !dbg !18
bb9: ; preds = %start
%7 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !19
store i8 10, ptr %7, align 1, !dbg !19
store i8 1, ptr %_0, align 1, !dbg !19
br label %bb85, !dbg !19
bb10: ; preds = %start
%8 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !20
store i8 11, ptr %8, align 1, !dbg !20
store i8 1, ptr %_0, align 1, !dbg !20
br label %bb85, !dbg !20
bb11: ; preds = %start
%9 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !21
store i8 12, ptr %9, align 1, !dbg !21
store i8 1, ptr %_0, align 1, !dbg !21
br label %bb85, !dbg !21
bb12: ; preds = %start
%10 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !22
store i8 13, ptr %10, align 1, !dbg !22
store i8 1, ptr %_0, align 1, !dbg !22
br label %bb85, !dbg !22
bb13: ; preds = %start
%11 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !23
store i8 14, ptr %11, align 1, !dbg !23
store i8 1, ptr %_0, align 1, !dbg !23
br label %bb85, !dbg !23
bb14: ; preds = %start
%12 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !24
store i8 15, ptr %12, align 1, !dbg !24
store i8 1, ptr %_0, align 1, !dbg !24
br label %bb85, !dbg !24
bb15: ; preds = %start
%13 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !25
store i8 16, ptr %13, align 1, !dbg !25
store i8 1, ptr %_0, align 1, !dbg !25
br label %bb85, !dbg !25
bb16: ; preds = %start
%14 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !26
store i8 17, ptr %14, align 1, !dbg !26
store i8 1, ptr %_0, align 1, !dbg !26
br label %bb85, !dbg !26
bb17: ; preds = %start
%15 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !27
store i8 18, ptr %15, align 1, !dbg !27
store i8 1, ptr %_0, align 1, !dbg !27
br label %bb85, !dbg !27
bb18: ; preds = %start
%16 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !28
store i8 19, ptr %16, align 1, !dbg !28
store i8 1, ptr %_0, align 1, !dbg !28
br label %bb85, !dbg !28
bb19: ; preds = %start
%17 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !29
store i8 20, ptr %17, align 1, !dbg !29
store i8 1, ptr %_0, align 1, !dbg !29
br label %bb85, !dbg !29
bb20: ; preds = %start
%18 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !30
store i8 21, ptr %18, align 1, !dbg !30
store i8 1, ptr %_0, align 1, !dbg !30
br label %bb85, !dbg !30
bb21: ; preds = %start
%19 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !31
store i8 22, ptr %19, align 1, !dbg !31
store i8 1, ptr %_0, align 1, !dbg !31
br label %bb85, !dbg !31
bb22: ; preds = %start
%20 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !32
store i8 23, ptr %20, align 1, !dbg !32
store i8 1, ptr %_0, align 1, !dbg !32
br label %bb85, !dbg !32
bb23: ; preds = %start
%21 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !33
store i8 24, ptr %21, align 1, !dbg !33
store i8 1, ptr %_0, align 1, !dbg !33
br label %bb85, !dbg !33
bb24: ; preds = %start
%22 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !34
store i8 25, ptr %22, align 1, !dbg !34
store i8 1, ptr %_0, align 1, !dbg !34
br label %bb85, !dbg !34
bb25: ; preds = %start
%23 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !35
store i8 26, ptr %23, align 1, !dbg !35
store i8 1, ptr %_0, align 1, !dbg !35
br label %bb85, !dbg !35
bb26: ; preds = %start
%24 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !36
store i8 27, ptr %24, align 1, !dbg !36
store i8 1, ptr %_0, align 1, !dbg !36
br label %bb85, !dbg !36
bb27: ; preds = %start
%25 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !37
store i8 28, ptr %25, align 1, !dbg !37
store i8 1, ptr %_0, align 1, !dbg !37
br label %bb85, !dbg !37
bb28: ; preds = %start
%26 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !38
store i8 29, ptr %26, align 1, !dbg !38
store i8 1, ptr %_0, align 1, !dbg !38
br label %bb85, !dbg !38
bb29: ; preds = %start
%27 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !39
store i8 30, ptr %27, align 1, !dbg !39
store i8 1, ptr %_0, align 1, !dbg !39
br label %bb85, !dbg !39
bb30: ; preds = %start
%28 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !40
store i8 31, ptr %28, align 1, !dbg !40
store i8 1, ptr %_0, align 1, !dbg !40
br label %bb85, !dbg !40
bb31: ; preds = %start
%29 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !41
store i8 32, ptr %29, align 1, !dbg !41
store i8 1, ptr %_0, align 1, !dbg !41
br label %bb85, !dbg !41
bb32: ; preds = %start
%30 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !42
store i8 33, ptr %30, align 1, !dbg !42
store i8 1, ptr %_0, align 1, !dbg !42
br label %bb85, !dbg !42
bb33: ; preds = %start
%31 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !43
store i8 34, ptr %31, align 1, !dbg !43
store i8 1, ptr %_0, align 1, !dbg !43
br label %bb85, !dbg !43
bb34: ; preds = %start
%32 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !44
store i8 35, ptr %32, align 1, !dbg !44
store i8 1, ptr %_0, align 1, !dbg !44
br label %bb85, !dbg !44
bb35: ; preds = %start
%33 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !45
store i8 36, ptr %33, align 1, !dbg !45
store i8 1, ptr %_0, align 1, !dbg !45
br label %bb85, !dbg !45
bb36: ; preds = %start
%34 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !46
store i8 37, ptr %34, align 1, !dbg !46
store i8 1, ptr %_0, align 1, !dbg !46
br label %bb85, !dbg !46
bb37: ; preds = %start
%35 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !47
store i8 38, ptr %35, align 1, !dbg !47
store i8 1, ptr %_0, align 1, !dbg !47
br label %bb85, !dbg !47
bb38: ; preds = %start
%36 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !48
store i8 39, ptr %36, align 1, !dbg !48
store i8 1, ptr %_0, align 1, !dbg !48
br label %bb85, !dbg !48
bb39: ; preds = %start
%37 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !49
store i8 40, ptr %37, align 1, !dbg !49
store i8 1, ptr %_0, align 1, !dbg !49
br label %bb85, !dbg !49
bb40: ; preds = %start
%38 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !50
store i8 41, ptr %38, align 1, !dbg !50
store i8 1, ptr %_0, align 1, !dbg !50
br label %bb85, !dbg !50
bb41: ; preds = %start
%39 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !51
store i8 42, ptr %39, align 1, !dbg !51
store i8 1, ptr %_0, align 1, !dbg !51
br label %bb85, !dbg !51
bb42: ; preds = %start
%40 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !52
store i8 43, ptr %40, align 1, !dbg !52
store i8 1, ptr %_0, align 1, !dbg !52
br label %bb85, !dbg !52
bb43: ; preds = %start
%41 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !53
store i8 44, ptr %41, align 1, !dbg !53
store i8 1, ptr %_0, align 1, !dbg !53
br label %bb85, !dbg !53
bb44: ; preds = %start
%42 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !54
store i8 45, ptr %42, align 1, !dbg !54
store i8 1, ptr %_0, align 1, !dbg !54
br label %bb85, !dbg !54
bb45: ; preds = %start
%43 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !55
store i8 46, ptr %43, align 1, !dbg !55
store i8 1, ptr %_0, align 1, !dbg !55
br label %bb85, !dbg !55
bb46: ; preds = %start
%44 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !56
store i8 47, ptr %44, align 1, !dbg !56
store i8 1, ptr %_0, align 1, !dbg !56
br label %bb85, !dbg !56
bb47: ; preds = %start
%45 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !57
store i8 48, ptr %45, align 1, !dbg !57
store i8 1, ptr %_0, align 1, !dbg !57
br label %bb85, !dbg !57
bb48: ; preds = %start
%46 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !58
store i8 49, ptr %46, align 1, !dbg !58
store i8 1, ptr %_0, align 1, !dbg !58
br label %bb85, !dbg !58
bb49: ; preds = %start
%47 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !59
store i8 50, ptr %47, align 1, !dbg !59
store i8 1, ptr %_0, align 1, !dbg !59
br label %bb85, !dbg !59
bb50: ; preds = %start
%48 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !60
store i8 51, ptr %48, align 1, !dbg !60
store i8 1, ptr %_0, align 1, !dbg !60
br label %bb85, !dbg !60
bb51: ; preds = %start
%49 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !61
store i8 52, ptr %49, align 1, !dbg !61
store i8 1, ptr %_0, align 1, !dbg !61
br label %bb85, !dbg !61
bb52: ; preds = %start
%50 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !62
store i8 53, ptr %50, align 1, !dbg !62
store i8 1, ptr %_0, align 1, !dbg !62
br label %bb85, !dbg !62
bb53: ; preds = %start
%51 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !63
store i8 54, ptr %51, align 1, !dbg !63
store i8 1, ptr %_0, align 1, !dbg !63
br label %bb85, !dbg !63
bb54: ; preds = %start
%52 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !64
store i8 55, ptr %52, align 1, !dbg !64
store i8 1, ptr %_0, align 1, !dbg !64
br label %bb85, !dbg !64
bb55: ; preds = %start
%53 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !65
store i8 56, ptr %53, align 1, !dbg !65
store i8 1, ptr %_0, align 1, !dbg !65
br label %bb85, !dbg !65
bb56: ; preds = %start
%54 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !66
store i8 57, ptr %54, align 1, !dbg !66
store i8 1, ptr %_0, align 1, !dbg !66
br label %bb85, !dbg !66
bb57: ; preds = %start
%55 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !67
store i8 58, ptr %55, align 1, !dbg !67
store i8 1, ptr %_0, align 1, !dbg !67
br label %bb85, !dbg !67
bb58: ; preds = %start
%56 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !68
store i8 59, ptr %56, align 1, !dbg !68
store i8 1, ptr %_0, align 1, !dbg !68
br label %bb85, !dbg !68
bb59: ; preds = %start
%57 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !69
store i8 60, ptr %57, align 1, !dbg !69
store i8 1, ptr %_0, align 1, !dbg !69
br label %bb85, !dbg !69
bb60: ; preds = %start
%58 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !70
store i8 61, ptr %58, align 1, !dbg !70
store i8 1, ptr %_0, align 1, !dbg !70
br label %bb85, !dbg !70
bb61: ; preds = %start
%59 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !71
store i8 62, ptr %59, align 1, !dbg !71
store i8 1, ptr %_0, align 1, !dbg !71
br label %bb85, !dbg !71
bb62: ; preds = %start
%60 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !72
store i8 63, ptr %60, align 1, !dbg !72
store i8 1, ptr %_0, align 1, !dbg !72
br label %bb85, !dbg !72
bb63: ; preds = %start
%61 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !73
store i8 64, ptr %61, align 1, !dbg !73
store i8 1, ptr %_0, align 1, !dbg !73
br label %bb85, !dbg !73
bb64: ; preds = %start
%62 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !74
store i8 65, ptr %62, align 1, !dbg !74
store i8 1, ptr %_0, align 1, !dbg !74
br label %bb85, !dbg !74
bb65: ; preds = %start
%63 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !75
store i8 66, ptr %63, align 1, !dbg !75
store i8 1, ptr %_0, align 1, !dbg !75
br label %bb85, !dbg !75
bb66: ; preds = %start
%64 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !76
store i8 67, ptr %64, align 1, !dbg !76
store i8 1, ptr %_0, align 1, !dbg !76
br label %bb85, !dbg !76
bb67: ; preds = %start
%65 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !77
store i8 68, ptr %65, align 1, !dbg !77
store i8 1, ptr %_0, align 1, !dbg !77
br label %bb85, !dbg !77
bb68: ; preds = %start
%66 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !78
store i8 69, ptr %66, align 1, !dbg !78
store i8 1, ptr %_0, align 1, !dbg !78
br label %bb85, !dbg !78
bb69: ; preds = %start
%67 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !79
store i8 70, ptr %67, align 1, !dbg !79
store i8 1, ptr %_0, align 1, !dbg !79
br label %bb85, !dbg !79
bb70: ; preds = %start
%68 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !80
store i8 71, ptr %68, align 1, !dbg !80
store i8 1, ptr %_0, align 1, !dbg !80
br label %bb85, !dbg !80
bb71: ; preds = %start
%69 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !81
store i8 72, ptr %69, align 1, !dbg !81
store i8 1, ptr %_0, align 1, !dbg !81
br label %bb85, !dbg !81
bb72: ; preds = %start
%70 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !82
store i8 73, ptr %70, align 1, !dbg !82
store i8 1, ptr %_0, align 1, !dbg !82
br label %bb85, !dbg !82
bb73: ; preds = %start
%71 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !83
store i8 74, ptr %71, align 1, !dbg !83
store i8 1, ptr %_0, align 1, !dbg !83
br label %bb85, !dbg !83
bb74: ; preds = %start
%72 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !84
store i8 75, ptr %72, align 1, !dbg !84
store i8 1, ptr %_0, align 1, !dbg !84
br label %bb85, !dbg !84
bb75: ; preds = %start
%73 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !85
store i8 76, ptr %73, align 1, !dbg !85
store i8 1, ptr %_0, align 1, !dbg !85
br label %bb85, !dbg !85
bb76: ; preds = %start
%74 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !86
store i8 77, ptr %74, align 1, !dbg !86
store i8 1, ptr %_0, align 1, !dbg !86
br label %bb85, !dbg !86
bb77: ; preds = %start
%75 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !87
store i8 78, ptr %75, align 1, !dbg !87
store i8 1, ptr %_0, align 1, !dbg !87
br label %bb85, !dbg !87
bb78: ; preds = %start
%76 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !88
store i8 79, ptr %76, align 1, !dbg !88
store i8 1, ptr %_0, align 1, !dbg !88
br label %bb85, !dbg !88
bb79: ; preds = %start
%77 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !89
store i8 80, ptr %77, align 1, !dbg !89
store i8 1, ptr %_0, align 1, !dbg !89
br label %bb85, !dbg !89
bb80: ; preds = %start
%78 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !90
store i8 81, ptr %78, align 1, !dbg !90
store i8 1, ptr %_0, align 1, !dbg !90
br label %bb85, !dbg !90
bb81: ; preds = %start
%79 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !91
store i8 82, ptr %79, align 1, !dbg !91
store i8 1, ptr %_0, align 1, !dbg !91
br label %bb85, !dbg !91
bb82: ; preds = %start
%80 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !92
store i8 83, ptr %80, align 1, !dbg !92
store i8 1, ptr %_0, align 1, !dbg !92
br label %bb85, !dbg !92
bb83: ; preds = %start
%81 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !93
store i8 84, ptr %81, align 1, !dbg !93
store i8 1, ptr %_0, align 1, !dbg !93
br label %bb85, !dbg !93
bb84: ; preds = %start
%82 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !94
store i8 0, ptr %82, align 1, !dbg !94
store i8 1, ptr %_0, align 1, !dbg !94
br label %bb85, !dbg !94
bb85: ; preds = %bb1, %bb84, %bb83, %bb82, %bb81, %bb80, %bb79, %bb78, %bb77, %bb76, %bb75, %bb74, %bb73, %bb72, %bb71, %bb70, %bb69, %bb68, %bb67, %bb66, %bb65, %bb64, %bb63, %bb62, %bb61, %bb60, %bb59, %bb58, %bb57, %bb56, %bb55, %bb54, %bb53, %bb52, %bb51, %bb50, %bb49, %bb48, %bb47, %bb46, %bb45, %bb44, %bb43, %bb42, %bb41, %bb40, %bb39, %bb38, %bb37, %bb36, %bb35, %bb34, %bb33, %bb32, %bb31, %bb30, %bb29, %bb28, %bb27, %bb26, %bb25, %bb24, %bb23, %bb22, %bb21, %bb20, %bb19, %bb18, %bb17, %bb16, %bb15, %bb14, %bb13, %bb12, %bb11, %bb10, %bb9, %bb8, %bb7, %bb6, %bb5, %bb4, %bb3, %bb2
%83 = load i8, ptr %_0, align 1, !dbg !95
%84 = trunc i8 %83 to i1, !dbg !95
%85 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !95
%86 = load i8, ptr %85, align 1, !dbg !95
%87 = insertvalue { i1, i8 } poison, i1 %84, 0, !dbg !95
%88 = insertvalue { i1, i8 } %87, i8 %86, 1, !dbg !95
ret { i1, i8 } %88, !dbg !95
}
attributes #0 = { nounwind "frame-pointer"="all" "target-cpu"="generic" "target-features"="+strict-align,+atomics-32" }
!llvm.ident = !{!0}
!llvm.dbg.cu = !{!1}
!llvm.module.flags = !{!3, !4}
!0 = !{!"rustc version 1.81.0-nightly (f1586001a 2024-06-13)"}
!1 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !2, producer: "clang LLVM (rustc version 1.81.0-nightly (f1586001a 2024-06-13))", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
!2 = !DIFile(filename: "/app/example.rs/@/example.9fee28f4e7da0477-cgu.0", directory: "/app")
!3 = !{i32 2, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}
!5 = distinct !DISubprogram(name: "amiga_note", linkageName: "_ZN7example10amiga_note17hefda7c267cdd192eE", scope: !7, file: !6, line: 2, type: !8, scopeLine: 2, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !1, templateParams: !9)
!6 = !DIFile(filename: "example.rs", directory: "/app", checksumkind: CSK_MD5, checksum: "52e0158ff2c4d82577e0db389482cf9b")
!7 = !DINamespace(name: "example", scope: null)
!8 = !DISubroutineType(types: !9)
!9 = !{}
!10 = !DILocation(line: 3, column: 5, scope: !5)
!11 = !DILocation(line: 87, column: 14, scope: !5)
!12 = !DILocation(line: 4, column: 17, scope: !5)
!13 = !DILocation(line: 5, column: 17, scope: !5)
!14 = !DILocation(line: 6, column: 17, scope: !5)
!15 = !DILocation(line: 7, column: 17, scope: !5)
!16 = !DILocation(line: 8, column: 17, scope: !5)
!17 = !DILocation(line: 9, column: 17, scope: !5)
!18 = !DILocation(line: 10, column: 17, scope: !5)
!19 = !DILocation(line: 11, column: 17, scope: !5)
!20 = !DILocation(line: 12, column: 17, scope: !5)
!21 = !DILocation(line: 13, column: 17, scope: !5)
!22 = !DILocation(line: 14, column: 17, scope: !5)
!23 = !DILocation(line: 15, column: 17, scope: !5)
!24 = !DILocation(line: 16, column: 17, scope: !5)
!25 = !DILocation(line: 17, column: 17, scope: !5)
!26 = !DILocation(line: 18, column: 17, scope: !5)
!27 = !DILocation(line: 19, column: 17, scope: !5)
!28 = !DILocation(line: 20, column: 17, scope: !5)
!29 = !DILocation(line: 21, column: 17, scope: !5)
!30 = !DILocation(line: 22, column: 17, scope: !5)
!31 = !DILocation(line: 23, column: 17, scope: !5)
!32 = !DILocation(line: 24, column: 17, scope: !5)
!33 = !DILocation(line: 25, column: 17, scope: !5)
!34 = !DILocation(line: 26, column: 17, scope: !5)
!35 = !DILocation(line: 27, column: 17, scope: !5)
!36 = !DILocation(line: 28, column: 17, scope: !5)
!37 = !DILocation(line: 29, column: 17, scope: !5)
!38 = !DILocation(line: 30, column: 17, scope: !5)
!39 = !DILocation(line: 31, column: 17, scope: !5)
!40 = !DILocation(line: 32, column: 17, scope: !5)
!41 = !DILocation(line: 33, column: 17, scope: !5)
!42 = !DILocation(line: 34, column: 17, scope: !5)
!43 = !DILocation(line: 35, column: 17, scope: !5)
!44 = !DILocation(line: 36, column: 16, scope: !5)
!45 = !DILocation(line: 37, column: 16, scope: !5)
!46 = !DILocation(line: 38, column: 16, scope: !5)
!47 = !DILocation(line: 39, column: 16, scope: !5)
!48 = !DILocation(line: 40, column: 16, scope: !5)
!49 = !DILocation(line: 41, column: 16, scope: !5)
!50 = !DILocation(line: 42, column: 16, scope: !5)
!51 = !DILocation(line: 43, column: 16, scope: !5)
!52 = !DILocation(line: 44, column: 16, scope: !5)
!53 = !DILocation(line: 45, column: 16, scope: !5)
!54 = !DILocation(line: 46, column: 16, scope: !5)
!55 = !DILocation(line: 47, column: 16, scope: !5)
!56 = !DILocation(line: 48, column: 16, scope: !5)
!57 = !DILocation(line: 49, column: 16, scope: !5)
!58 = !DILocation(line: 50, column: 16, scope: !5)
!59 = !DILocation(line: 51, column: 16, scope: !5)
!60 = !DILocation(line: 52, column: 16, scope: !5)
!61 = !DILocation(line: 53, column: 16, scope: !5)
!62 = !DILocation(line: 54, column: 16, scope: !5)
!63 = !DILocation(line: 55, column: 16, scope: !5)
!64 = !DILocation(line: 56, column: 16, scope: !5)
!65 = !DILocation(line: 57, column: 16, scope: !5)
!66 = !DILocation(line: 58, column: 16, scope: !5)
!67 = !DILocation(line: 59, column: 16, scope: !5)
!68 = !DILocation(line: 60, column: 16, scope: !5)
!69 = !DILocation(line: 61, column: 16, scope: !5)
!70 = !DILocation(line: 62, column: 16, scope: !5)
!71 = !DILocation(line: 63, column: 16, scope: !5)
!72 = !DILocation(line: 64, column: 16, scope: !5)
!73 = !DILocation(line: 65, column: 16, scope: !5)
!74 = !DILocation(line: 66, column: 16, scope: !5)
!75 = !DILocation(line: 67, column: 16, scope: !5)
!76 = !DILocation(line: 68, column: 16, scope: !5)
!77 = !DILocation(line: 69, column: 16, scope: !5)
!78 = !DILocation(line: 70, column: 16, scope: !5)
!79 = !DILocation(line: 71, column: 16, scope: !5)
!80 = !DILocation(line: 72, column: 16, scope: !5)
!81 = !DILocation(line: 73, column: 16, scope: !5)
!82 = !DILocation(line: 74, column: 16, scope: !5)
!83 = !DILocation(line: 75, column: 16, scope: !5)
!84 = !DILocation(line: 76, column: 15, scope: !5)
!85 = !DILocation(line: 77, column: 15, scope: !5)
!86 = !DILocation(line: 78, column: 15, scope: !5)
!87 = !DILocation(line: 79, column: 15, scope: !5)
!88 = !DILocation(line: 80, column: 15, scope: !5)
!89 = !DILocation(line: 81, column: 15, scope: !5)
!90 = !DILocation(line: 82, column: 15, scope: !5)
!91 = !DILocation(line: 83, column: 15, scope: !5)
!92 = !DILocation(line: 84, column: 15, scope: !5)
!93 = !DILocation(line: 85, column: 15, scope: !5)
!94 = !DILocation(line: 86, column: 14, scope: !5)
!95 = !DILocation(line: 89, column: 2, scope: !96)
!96 = !DILexicalBlockFile(scope: !5, file: !6, discriminator: 0)
However, llc rejects this LLVMIR:
/opt/compiler-explorer/clang-trunk/bin/llc: error: /opt/compiler-explorer/clang-trunk/bin/llc: <source>:98:3: error: instruction expected to be numbered '%1' or greater
%0 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !12
^
Compiler returned: 1
Manually fixing it up:
bb2: ; preds = %start
+ %a = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !12
+ store i8 3, ptr %a, align 1, !dbg !12
- %0 = getelementptr inbounds i8, ptr %_0, i32 1, !dbg !12
- store i8 3, ptr %0, align 1, !dbg !12
br label %bb85, !dbg !12
gets us llc... passing? Huh?
from rust.
That is a separate problem. I don't know why it happens, but I have to fight with this every time I want to use alive2 on Rust code.
from rust.
@Benjins Oh, thanks!
Reported upstream as llvm/llvm-project#95683
from rust.
Related Issues (20)
- Inconsistent handling of `#[coverage(..)]` attributes that are malformed or misplaced HOT 1
- Bad codegen using `u8/u16::leading_ones` HOT 1
- Infinite loop in type inference HOT 3
- ICE: `assertion left == right failed` in `rustc_const_eval/src/interpret/cast.rs` HOT 1
- ICE: `OpaqueCast unexpected because it isn't captured` in `rustc_middle/src/ty/closure.rs` HOT 1
- ICE: `encountered errors when checking RPITIT refinement (resolution)` in `rustc_hir_analysis/src/check/compare_impl_item/refine.rs` HOT 2
- MC/DC LLVM 19 intrinsics changes HOT 6
- mut in slice pattern: `[_, mut @ ..] = &[...]` is not needed? HOT 2
- ICE: `unhandled type: Alias(...)` in `rustc_mir_transform/src/validate.rs` when `[mir_built]` HOT 2
- `-Zoom=panic` double panic due to panicking allocating HOT 3
- Regression in type inference between stable 1.79.0 and nightly-2024-06-19 HOT 5
- std::ptr::copy_nonoverlapping failing on windows HOT 3
- Should we make lint against fallback affecting unsafe code a hard error in Rust 2024?
- Confusing error when name for macro definition (`macro_rules!`) is missing HOT 1
- Tracking Issue for `array::repeat`
- ICE: `collection encountered polymorphic constant: Ty(..)` HOT 4
- Dead code pass no longer considers enum used in `pub extern "C" fn` as used HOT 22
- LLVM can't support partial register clobbers HOT 9
- ICE: `X should not have been constrained via normalization`
- Associated constants used in equality should be considered as used HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rust.