Tim Northover | e3d4236 | 2013-02-01 11:40:47 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=aarch64-none-linux-gnu -filetype=obj < %s | llvm-objdump -disassemble - | FileCheck %s |
Tim Northover | e0e3aef | 2013-01-31 12:12:40 +0000 | [diff] [blame] | 2 | |
| 3 | ; The encoding of lsb -> immr in the CGed bitfield instructions was wrong at one |
| 4 | ; point, in the edge case where lsb = 0. Just make sure. |
| 5 | |
| 6 | define void @test_bfi0(i32* %existing, i32* %new) { |
| 7 | ; CHECK: bfxil {{w[0-9]+}}, {{w[0-9]+}}, #0, #18 |
| 8 | |
| 9 | %oldval = load volatile i32* %existing |
| 10 | %oldval_keep = and i32 %oldval, 4294705152 ; 0xfffc_0000 |
| 11 | |
| 12 | %newval = load volatile i32* %new |
| 13 | %newval_masked = and i32 %newval, 262143 ; = 0x0003_ffff |
| 14 | |
| 15 | %combined = or i32 %newval_masked, %oldval_keep |
| 16 | store volatile i32 %combined, i32* %existing |
| 17 | |
| 18 | ret void |
Stephen Lin | f799e3f | 2013-07-13 20:38:47 +0000 | [diff] [blame] | 19 | } |