1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu | FileCheck %s 3; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s 4 5define i64 @ori_test_1(i64 %a) { 6; CHECK-LABEL: ori_test_1: 7; CHECK: # %bb.0: # %entry 8; CHECK-NEXT: li 3, -1 9; CHECK-NEXT: blr 10entry: 11 %or = or i64 %a, 18446744073709551615 ; 0xffffffffffffffff 12 ret i64 %or 13} 14 15define i64 @ori_test_2(i64 %a) { 16; CHECK-LABEL: ori_test_2: 17; CHECK: # %bb.0: # %entry 18; CHECK-NEXT: li 4, -1 19; CHECK-NEXT: rldimi 3, 4, 29, 15 20; CHECK-NEXT: blr 21entry: 22 %or = or i64 %a, 562949416550400 ; 0x1ffffe0000000 23 ret i64 %or 24} 25 26define i64 @ori_test_3(i64 %a) { 27; CHECK-LABEL: ori_test_3: 28; CHECK: # %bb.0: # %entry 29; CHECK-NEXT: li 4, -1 30; CHECK-NEXT: rldimi 3, 4, 3, 28 31; CHECK-NEXT: blr 32entry: 33 %or = or i64 %a, 68719476728 ; 0xffffffff8 34 ret i64 %or 35} 36 37define i64 @ori_test_4(i64 %a) { 38; CHECK-LABEL: ori_test_4: 39; CHECK: # %bb.0: # %entry 40; CHECK-NEXT: li 4, 4112 41; CHECK-NEXT: sldi 4, 4, 32 42; CHECK-NEXT: oris 4, 4, 4112 43; CHECK-NEXT: ori 4, 4, 65535 44; CHECK-NEXT: or 3, 3, 4 45; CHECK-NEXT: blr 46entry: 47 %or = or i64 %a, 17661175070719 ; 0x10101010ffff 48 ret i64 %or 49} 50 51; Don't exploit rldimi if operand has multiple uses 52define i64 @test_test_5(i64 %a, i64 %b) { 53; CHECK-LABEL: test_test_5: 54; CHECK: # %bb.0: # %entry 55; CHECK-NEXT: li 5, 1 56; CHECK-NEXT: sldi 5, 5, 32 57; CHECK-NEXT: or 5, 3, 5 58; CHECK-NEXT: add 4, 5, 4 59; CHECK-NEXT: sub 3, 3, 4 60; CHECK-NEXT: blr 61entry: 62 %or = or i64 %a, 4294967296 63 %add = add i64 %or, %b 64 %div = sub i64 %a, %add 65 ret i64 %div 66} 67