266 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA644 5;; Exercise the 'xor' LLVM IR: https://llvm.org/docs/LangRef.html#xor-instruction6 7define i1 @xor_i1(i1 %a, i1 %b) {8; LA32-LABEL: xor_i1:9; LA32: # %bb.0: # %entry10; LA32-NEXT: xor $a0, $a0, $a111; LA32-NEXT: ret12;13; LA64-LABEL: xor_i1:14; LA64: # %bb.0: # %entry15; LA64-NEXT: xor $a0, $a0, $a116; LA64-NEXT: ret17entry:18 %r = xor i1 %a, %b19 ret i1 %r20}21 22define i8 @xor_i8(i8 %a, i8 %b) {23; LA32-LABEL: xor_i8:24; LA32: # %bb.0: # %entry25; LA32-NEXT: xor $a0, $a0, $a126; LA32-NEXT: ret27;28; LA64-LABEL: xor_i8:29; LA64: # %bb.0: # %entry30; LA64-NEXT: xor $a0, $a0, $a131; LA64-NEXT: ret32entry:33 %r = xor i8 %a, %b34 ret i8 %r35}36 37define i16 @xor_i16(i16 %a, i16 %b) {38; LA32-LABEL: xor_i16:39; LA32: # %bb.0: # %entry40; LA32-NEXT: xor $a0, $a0, $a141; LA32-NEXT: ret42;43; LA64-LABEL: xor_i16:44; LA64: # %bb.0: # %entry45; LA64-NEXT: xor $a0, $a0, $a146; LA64-NEXT: ret47entry:48 %r = xor i16 %a, %b49 ret i16 %r50}51 52define i32 @xor_i32(i32 %a, i32 %b) {53; LA32-LABEL: xor_i32:54; LA32: # %bb.0: # %entry55; LA32-NEXT: xor $a0, $a0, $a156; LA32-NEXT: ret57;58; LA64-LABEL: xor_i32:59; LA64: # %bb.0: # %entry60; LA64-NEXT: xor $a0, $a0, $a161; LA64-NEXT: ret62entry:63 %r = xor i32 %a, %b64 ret i32 %r65}66 67define i64 @xor_i64(i64 %a, i64 %b) {68; LA32-LABEL: xor_i64:69; LA32: # %bb.0: # %entry70; LA32-NEXT: xor $a0, $a0, $a271; LA32-NEXT: xor $a1, $a1, $a372; LA32-NEXT: ret73;74; LA64-LABEL: xor_i64:75; LA64: # %bb.0: # %entry76; LA64-NEXT: xor $a0, $a0, $a177; LA64-NEXT: ret78entry:79 %r = xor i64 %a, %b80 ret i64 %r81}82 83define i1 @xor_i1_0(i1 %b) {84; LA32-LABEL: xor_i1_0:85; LA32: # %bb.0: # %entry86; LA32-NEXT: ret87;88; LA64-LABEL: xor_i1_0:89; LA64: # %bb.0: # %entry90; LA64-NEXT: ret91entry:92 %r = xor i1 4, %b93 ret i1 %r94}95 96define i1 @xor_i1_5(i1 %b) {97; LA32-LABEL: xor_i1_5:98; LA32: # %bb.0: # %entry99; LA32-NEXT: xori $a0, $a0, 1100; LA32-NEXT: ret101;102; LA64-LABEL: xor_i1_5:103; LA64: # %bb.0: # %entry104; LA64-NEXT: xori $a0, $a0, 1105; LA64-NEXT: ret106entry:107 %r = xor i1 5, %b108 ret i1 %r109}110 111define i8 @xor_i8_5(i8 %b) {112; LA32-LABEL: xor_i8_5:113; LA32: # %bb.0: # %entry114; LA32-NEXT: xori $a0, $a0, 5115; LA32-NEXT: ret116;117; LA64-LABEL: xor_i8_5:118; LA64: # %bb.0: # %entry119; LA64-NEXT: xori $a0, $a0, 5120; LA64-NEXT: ret121entry:122 %r = xor i8 5, %b123 ret i8 %r124}125 126define i8 @xor_i8_257(i8 %b) {127; LA32-LABEL: xor_i8_257:128; LA32: # %bb.0: # %entry129; LA32-NEXT: xori $a0, $a0, 1130; LA32-NEXT: ret131;132; LA64-LABEL: xor_i8_257:133; LA64: # %bb.0: # %entry134; LA64-NEXT: xori $a0, $a0, 1135; LA64-NEXT: ret136entry:137 %r = xor i8 257, %b138 ret i8 %r139}140 141define i16 @xor_i16_5(i16 %b) {142; LA32-LABEL: xor_i16_5:143; LA32: # %bb.0: # %entry144; LA32-NEXT: xori $a0, $a0, 5145; LA32-NEXT: ret146;147; LA64-LABEL: xor_i16_5:148; LA64: # %bb.0: # %entry149; LA64-NEXT: xori $a0, $a0, 5150; LA64-NEXT: ret151entry:152 %r = xor i16 5, %b153 ret i16 %r154}155 156define i16 @xor_i16_0x1000(i16 %b) {157; LA32-LABEL: xor_i16_0x1000:158; LA32: # %bb.0: # %entry159; LA32-NEXT: lu12i.w $a1, 1160; LA32-NEXT: xor $a0, $a0, $a1161; LA32-NEXT: ret162;163; LA64-LABEL: xor_i16_0x1000:164; LA64: # %bb.0: # %entry165; LA64-NEXT: lu12i.w $a1, 1166; LA64-NEXT: xor $a0, $a0, $a1167; LA64-NEXT: ret168entry:169 %r = xor i16 4096, %b170 ret i16 %r171}172 173define i16 @xor_i16_0x10001(i16 %b) {174; LA32-LABEL: xor_i16_0x10001:175; LA32: # %bb.0: # %entry176; LA32-NEXT: xori $a0, $a0, 1177; LA32-NEXT: ret178;179; LA64-LABEL: xor_i16_0x10001:180; LA64: # %bb.0: # %entry181; LA64-NEXT: xori $a0, $a0, 1182; LA64-NEXT: ret183entry:184 %r = xor i16 65537, %b185 ret i16 %r186}187 188define i32 @xor_i32_5(i32 %b) {189; LA32-LABEL: xor_i32_5:190; LA32: # %bb.0: # %entry191; LA32-NEXT: xori $a0, $a0, 5192; LA32-NEXT: ret193;194; LA64-LABEL: xor_i32_5:195; LA64: # %bb.0: # %entry196; LA64-NEXT: xori $a0, $a0, 5197; LA64-NEXT: ret198entry:199 %r = xor i32 5, %b200 ret i32 %r201}202 203define i32 @xor_i32_0x1000(i32 %b) {204; LA32-LABEL: xor_i32_0x1000:205; LA32: # %bb.0: # %entry206; LA32-NEXT: lu12i.w $a1, 1207; LA32-NEXT: xor $a0, $a0, $a1208; LA32-NEXT: ret209;210; LA64-LABEL: xor_i32_0x1000:211; LA64: # %bb.0: # %entry212; LA64-NEXT: lu12i.w $a1, 1213; LA64-NEXT: xor $a0, $a0, $a1214; LA64-NEXT: ret215entry:216 %r = xor i32 4096, %b217 ret i32 %r218}219 220define i32 @xor_i32_0x100000001(i32 %b) {221; LA32-LABEL: xor_i32_0x100000001:222; LA32: # %bb.0: # %entry223; LA32-NEXT: xori $a0, $a0, 1224; LA32-NEXT: ret225;226; LA64-LABEL: xor_i32_0x100000001:227; LA64: # %bb.0: # %entry228; LA64-NEXT: xori $a0, $a0, 1229; LA64-NEXT: ret230entry:231 %r = xor i32 4294967297, %b232 ret i32 %r233}234 235define i64 @xor_i64_5(i64 %b) {236; LA32-LABEL: xor_i64_5:237; LA32: # %bb.0: # %entry238; LA32-NEXT: xori $a0, $a0, 5239; LA32-NEXT: ret240;241; LA64-LABEL: xor_i64_5:242; LA64: # %bb.0: # %entry243; LA64-NEXT: xori $a0, $a0, 5244; LA64-NEXT: ret245entry:246 %r = xor i64 5, %b247 ret i64 %r248}249 250define i64 @xor_i64_0x1000(i64 %b) {251; LA32-LABEL: xor_i64_0x1000:252; LA32: # %bb.0: # %entry253; LA32-NEXT: lu12i.w $a2, 1254; LA32-NEXT: xor $a0, $a0, $a2255; LA32-NEXT: ret256;257; LA64-LABEL: xor_i64_0x1000:258; LA64: # %bb.0: # %entry259; LA64-NEXT: lu12i.w $a1, 1260; LA64-NEXT: xor $a0, $a0, $a1261; LA64-NEXT: ret262entry:263 %r = xor i64 4096, %b264 ret i64 %r265}266