Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / WebAssembly / function-addr-offset.ll
blobf4baa2f84e9b964ed9513691fe7b75230fd577e3
1 ; RUN: llc < %s -verify-machineinstrs | FileCheck %s
3 ; Wasm does not currently support function addresses with offsets, so we
4 ; shouldn't try to create a folded SDNode like (function + offset). This is a
5 ; regression test for the folding bug and this should not crash in MCInstLower.
7 target triple = "wasm32-unknown-unknown"
9 ; 'hidden' here should be present to reproduce the bug
10 declare hidden void @ham(ptr)
12 define void @bar(ptr %ptr) {
13 bb1:
14   br i1 undef, label %bb3, label %bb2
16 bb2:
17   ; While lowering this switch, isel creates (@ham + 1) expression as a course
18   ; of range optimization for switch, and tries to fold the expression, but
19   ; wasm does not support with function addresses with offsets. This folding
20   ; should be disabled.
21   ; CHECK:      i32.const  ham
22   ; CHECK-NEXT: i32.const  1
23   ; CHECK-NEXT: i32.add
24   switch i32 ptrtoint (ptr @ham to i32), label %bb4 [
25     i32 -1, label %bb3
26     i32 0, label %bb3
27   ]
29 bb3:
30   unreachable
32 bb4:
33   %tmp = load i8, ptr %ptr
34   unreachable