19aa884ccSQiu Chaofan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 29aa884ccSQiu Chaofan; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu | FileCheck %s 39aa884ccSQiu Chaofan; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s 4*2d989077SQiu Chaofan; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-ibm-aix-xcoff | FileCheck %s 59aa884ccSQiu Chaofan 69aa884ccSQiu Chaofandefine i64 @ori_test_1(i64 %a) { 79aa884ccSQiu Chaofan; CHECK-LABEL: ori_test_1: 89aa884ccSQiu Chaofan; CHECK: # %bb.0: # %entry 99aa884ccSQiu Chaofan; CHECK-NEXT: li 3, -1 109aa884ccSQiu Chaofan; CHECK-NEXT: blr 119aa884ccSQiu Chaofanentry: 129aa884ccSQiu Chaofan %or = or i64 %a, 18446744073709551615 ; 0xffffffffffffffff 139aa884ccSQiu Chaofan ret i64 %or 149aa884ccSQiu Chaofan} 159aa884ccSQiu Chaofan 169aa884ccSQiu Chaofandefine i64 @ori_test_2(i64 %a) { 179aa884ccSQiu Chaofan; CHECK-LABEL: ori_test_2: 189aa884ccSQiu Chaofan; CHECK: # %bb.0: # %entry 19c12722cdSQiu Chaofan; CHECK-NEXT: li 4, -1 20c12722cdSQiu Chaofan; CHECK-NEXT: rldimi 3, 4, 29, 15 219aa884ccSQiu Chaofan; CHECK-NEXT: blr 229aa884ccSQiu Chaofanentry: 239aa884ccSQiu Chaofan %or = or i64 %a, 562949416550400 ; 0x1ffffe0000000 249aa884ccSQiu Chaofan ret i64 %or 259aa884ccSQiu Chaofan} 269aa884ccSQiu Chaofan 279aa884ccSQiu Chaofandefine i64 @ori_test_3(i64 %a) { 289aa884ccSQiu Chaofan; CHECK-LABEL: ori_test_3: 299aa884ccSQiu Chaofan; CHECK: # %bb.0: # %entry 30c12722cdSQiu Chaofan; CHECK-NEXT: li 4, -1 31c12722cdSQiu Chaofan; CHECK-NEXT: rldimi 3, 4, 3, 28 329aa884ccSQiu Chaofan; CHECK-NEXT: blr 339aa884ccSQiu Chaofanentry: 349aa884ccSQiu Chaofan %or = or i64 %a, 68719476728 ; 0xffffffff8 359aa884ccSQiu Chaofan ret i64 %or 369aa884ccSQiu Chaofan} 379aa884ccSQiu Chaofan 389aa884ccSQiu Chaofandefine i64 @ori_test_4(i64 %a) { 399aa884ccSQiu Chaofan; CHECK-LABEL: ori_test_4: 409aa884ccSQiu Chaofan; CHECK: # %bb.0: # %entry 4129eb3dcfSEsme-Yi; CHECK-NEXT: lis 4, -32640 4229eb3dcfSEsme-Yi; CHECK-NEXT: ori 4, 4, 32903 4329eb3dcfSEsme-Yi; CHECK-NEXT: rldicl 4, 4, 13, 19 449aa884ccSQiu Chaofan; CHECK-NEXT: or 3, 3, 4 459aa884ccSQiu Chaofan; CHECK-NEXT: blr 469aa884ccSQiu Chaofanentry: 479aa884ccSQiu Chaofan %or = or i64 %a, 17661175070719 ; 0x10101010ffff 489aa884ccSQiu Chaofan ret i64 %or 499aa884ccSQiu Chaofan} 50c12722cdSQiu Chaofan 51c12722cdSQiu Chaofan; Don't exploit rldimi if operand has multiple uses 52c12722cdSQiu Chaofandefine i64 @test_test_5(i64 %a, i64 %b) { 53c12722cdSQiu Chaofan; CHECK-LABEL: test_test_5: 54c12722cdSQiu Chaofan; CHECK: # %bb.0: # %entry 55c12722cdSQiu Chaofan; CHECK-NEXT: li 5, 1 5629eb3dcfSEsme-Yi; CHECK-NEXT: rldic 5, 5, 32, 31 57c12722cdSQiu Chaofan; CHECK-NEXT: or 5, 3, 5 58c12722cdSQiu Chaofan; CHECK-NEXT: add 4, 5, 4 59c12722cdSQiu Chaofan; CHECK-NEXT: sub 3, 3, 4 60c12722cdSQiu Chaofan; CHECK-NEXT: blr 61c12722cdSQiu Chaofanentry: 62c12722cdSQiu Chaofan %or = or i64 %a, 4294967296 63c12722cdSQiu Chaofan %add = add i64 %or, %b 64c12722cdSQiu Chaofan %div = sub i64 %a, %add 65c12722cdSQiu Chaofan ret i64 %div 66c12722cdSQiu Chaofan} 67