Giter VIP home page Giter VIP logo

Comments (6)

saethlin avatar saethlin commented on July 26, 2024 1

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.

Benjins avatar Benjins commented on July 26, 2024 1

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.

mcclure avatar mcclure commented on July 26, 2024

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.

workingjubilee avatar workingjubilee commented on July 26, 2024

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.

saethlin avatar saethlin commented on July 26, 2024

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.

workingjubilee avatar workingjubilee commented on July 26, 2024

@Benjins Oh, thanks!

Reported upstream as llvm/llvm-project#95683

from rust.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.