Invalid optimization to select with --ignore-implicit-traps
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 38/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- wasm
- Lĩnh vực
- compilers
Hướng nghiên cứu
Tái hiện sự cố bằng module WAT được cung cấp và -all -O1 --ignore-implicit-traps, sau đó kiểm tra tối ưu hóa biến struct.get có điều kiện thành select. Hoàn thành khi optimizer không còn khiến mã có khả năng gây trap được thực thi vô điều kiện, đồng thời vẫn giữ nguyên hành vi đã tối ưu hợp lệ.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Optimizing this program with -all -O1 --ignore-implicit-traps:
(module
(type $box (struct (field (mut i32)) (field (mut i64))))
(export "f" (func $f))
(func $f (param $0 (ref null $box)) (result i64)
(block $label$1
(block $label$2
(br_if $label$2
(ref.is_null
(local.get $0)
)
)
(br_if $label$1
(i64.gt_s
(struct.get $box 1
(local.get $0)
)
(i64.const 8)
)
)
)
(return
(i64.const 8)
)
)
(struct.get $box 1
(local.get $0)
)
)
)
yields
(module
(type $box (struct (field (mut i32)) (field (mut i64))))
(type $ref?|$box|_=>_i64 (func (param (ref null $box)) (result i64)))
(export "f" (func $f))
(func $f (param $0 (ref null $box)) (result i64)
(if
(select
(ref.is_null
(local.get $0)
)
(i32.const 1)
(i64.gt_s
(struct.get $box 1
(local.get $0)
)
(i64.const 8)
)
)
(return
(i64.const 8)
)
)
(struct.get $box 1
(local.get $0)
)
)
)
Even when assuming that no traps are executed, it is invalid in general to change potentially trapping code from being conditionally executed to being unconditionally executed. This happens with the first struct.get here, as it is placed as the second arm of the select.
- Ngôn ngữ chính
- WebAssembly
- Star
- 8.6k
- Fork
- 885
- Merge trung bình
- 2 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 77
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của WebAssembly/binaryen
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
WebAssembly/binaryen#9135 · 1 bình luận ·
-
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 76/100
WebAssembly/binaryen#9018 · 3 bình luận ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
WebAssembly/binaryen#9133 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
WebAssembly/binaryen#9123 ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
WebAssembly/binaryen#9122 ·
Tất cả issue của WebAssembly/binaryen
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
internal.h中,漏掉了1个定义。 Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 95/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
oxc-project/oxc#26944 ·