| ; RUN: llc < %s -verify-machineinstrs | FileCheck %s |
| |
| ; Wasm does not currently support function addresses with offsets, so we |
| ; shouldn't try to create a folded SDNode like (function + offset). This is a |
| ; regression test for the folding bug and this should not crash in MCInstLower. |
| |
| target triple = "wasm32-unknown-unknown" |
| |
| ; 'hidden' here should be present to reproduce the bug |
| declare hidden void @ham(ptr) |
| |
| define void @bar(ptr %ptr) { |
| bb1: |
| br i1 undef, label %bb3, label %bb2 |
| |
| bb2: |
| ; While lowering this switch, isel creates (@ham + 1) expression as a course |
| ; of range optimization for switch, and tries to fold the expression, but |
| ; wasm does not support with function addresses with offsets. This folding |
| ; should be disabled. |
| ; CHECK: i32.const ham |
| ; CHECK-NEXT: i32.const 1 |
| ; CHECK-NEXT: i32.add |
| switch i32 ptrtoint (ptr @ham to i32), label %bb4 [ |
| i32 -1, label %bb3 |
| i32 0, label %bb3 |
| ] |
| |
| bb3: |
| unreachable |
| |
| bb4: |
| %tmp = load i8, ptr %ptr |
| unreachable |
| } |