[PATCH] D107966: [SLP]Do not emit extract elements for insertelements users, replace with shuffles directly.

Florian Hahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 24 01:25:37 PDT 2022


fhahn added a comment.

Unfortunately the latest version is still causing crashes when build SPEC2017 on X86. Reproducer below:

  target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
  target triple = "x86_64-apple-macosx"
  
  %struct.hoge = type { [7 x i32 (i8*, i32, i8*, i32)*], [7 x i32 (i8*, i32, i8*, i32)*], [7 x i32 (i8*, i32, i8*, i32)*], [7 x i32 (i8*, i32, i8*, i32)*], [4 x i32 (i8*, i32, i8*, i32)*], [7 x i32 (i8*, i32, i8*, i32)*], [7 x i32 (i8*, i32, i8*, i32)*], [7 x i32 (i8*, i32, i8*, i32)*], [7 x void (i8*, i8*, i8*, i8*, i32, i32*)*], [7 x void (i8*, i8*, i8*, i8*, i8*, i32, i32*)*], [7 x i32 (i8*, i32, i8*, i32)*], i32 (i8*, i32, i8*, i32, i32*)*, [4 x i64 (i8*, i32)*], [4 x i64 (i8*, i32)*], void (i8*, i32, i8*, i32, [4 x i32]*)*, float ([4 x i32]*, [4 x i32]*, i32)*, [7 x void (i8*, i8*, i8*, i8*, i32, i32*)*], [7 x void (i8*, i8*, i8*, i8*, i8*, i32, i32*)*], [7 x void (i8*, i8*, i8*, i8*, i32, i32*)*], [7 x void (i8*, i8*, i8*, i8*, i8*, i32, i32*)*], [7 x i32 (i32*, i16*, i32, i16*, i16*, i32, i32)*], void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)*, void (i8*, i8*, i32*)* }
  
  define i64 @quux.51(i8* %arg, i32 %arg1) unnamed_addr #0 {
  bb:
    %tmp = add i32 undef, undef
    %tmp2 = sub i32 undef, undef
    %tmp3 = add i32 undef, undef
    %tmp4 = sub i32 undef, undef
    %tmp5 = add nsw i32 %tmp3, %tmp
    %tmp6 = sub nsw i32 %tmp, %tmp3
    %tmp7 = add nsw i32 %tmp4, %tmp2
    %tmp8 = sub nsw i32 %tmp2, %tmp4
    %tmp9 = add i32 undef, %tmp5
    %tmp10 = xor i32 %tmp9, undef
    %tmp11 = add i32 undef, %tmp7
    %tmp12 = xor i32 %tmp11, undef
    %tmp13 = add i32 undef, %tmp6
    %tmp14 = xor i32 %tmp13, undef
    %tmp15 = add i32 undef, %tmp8
    %tmp16 = xor i32 %tmp15, undef
    %tmp17 = add i32 %tmp12, %tmp10
    %tmp18 = add i32 %tmp17, %tmp14
    %tmp19 = add i32 %tmp18, %tmp16
    %tmp20 = add i32 undef, undef
    %tmp21 = sub i32 undef, undef
    %tmp22 = add i32 undef, undef
    %tmp23 = sub i32 undef, undef
    %tmp24 = add nsw i32 %tmp22, %tmp20
    %tmp25 = sub nsw i32 %tmp20, %tmp22
    %tmp26 = add nsw i32 %tmp23, %tmp21
    %tmp27 = sub nsw i32 %tmp21, %tmp23
    %tmp28 = add i32 undef, %tmp24
    %tmp29 = xor i32 %tmp28, undef
    %tmp30 = add i32 undef, %tmp26
    %tmp31 = xor i32 %tmp30, undef
    %tmp32 = add i32 0, %tmp25
    %tmp33 = xor i32 %tmp32, 0
    %tmp34 = add i32 undef, %tmp27
    %tmp35 = xor i32 %tmp34, undef
    %tmp36 = add i32 %tmp31, %tmp19
    %tmp37 = add i32 %tmp36, %tmp29
    %tmp38 = add i32 %tmp37, %tmp33
    %tmp39 = add i32 %tmp38, %tmp35
    %tmp40 = add i32 undef, undef
    %tmp41 = sub i32 undef, undef
    %tmp42 = add i32 undef, undef
    %tmp43 = sub i32 undef, undef
    %tmp44 = add nsw i32 %tmp42, %tmp40
    %tmp45 = sub nsw i32 %tmp40, %tmp42
    %tmp46 = add nsw i32 %tmp43, %tmp41
    %tmp47 = sub nsw i32 %tmp41, %tmp43
    %tmp48 = add i32 undef, %tmp44
    %tmp49 = xor i32 %tmp48, undef
    %tmp50 = add i32 undef, %tmp46
    %tmp51 = xor i32 %tmp50, undef
    %tmp52 = add i32 undef, %tmp45
    %tmp53 = xor i32 %tmp52, undef
    %tmp54 = add i32 undef, %tmp47
    %tmp55 = xor i32 %tmp54, undef
    %tmp56 = add i32 %tmp51, %tmp39
    %tmp57 = add i32 %tmp56, %tmp49
    %tmp58 = add i32 %tmp57, %tmp53
    %tmp59 = add i32 %tmp58, %tmp55
    %tmp60 = load i32, i32* undef, align 4
    %tmp61 = add i32 undef, %tmp60
    %tmp62 = sub i32 %tmp60, undef
    %tmp63 = add i32 undef, undef
    %tmp64 = sub i32 undef, undef
    %tmp65 = add nsw i32 %tmp63, %tmp61
    %tmp66 = sub nsw i32 %tmp61, %tmp63
    %tmp67 = add nsw i32 %tmp64, %tmp62
    %tmp68 = sub nsw i32 %tmp62, %tmp64
    %tmp69 = add i32 undef, %tmp65
    %tmp70 = xor i32 %tmp69, undef
    %tmp71 = add i32 undef, %tmp67
    %tmp72 = xor i32 %tmp71, undef
    %tmp73 = add i32 undef, %tmp66
    %tmp74 = xor i32 %tmp73, undef
    %tmp75 = add i32 undef, %tmp68
    %tmp76 = xor i32 %tmp75, undef
    %tmp77 = add i32 %tmp72, %tmp59
    %tmp78 = add i32 %tmp77, %tmp70
    %tmp79 = add i32 %tmp78, %tmp74
    %tmp80 = add i32 %tmp79, %tmp76
    %tmp81 = add i32 undef, undef
    %tmp82 = sub i32 undef, undef
    %tmp83 = add i32 undef, undef
    %tmp84 = sub i32 undef, undef
    %tmp85 = add nsw i32 %tmp83, %tmp81
    %tmp86 = sub nsw i32 %tmp81, %tmp83
    %tmp87 = add nsw i32 %tmp84, %tmp82
    %tmp88 = sub nsw i32 %tmp82, %tmp84
    %tmp89 = add i32 undef, %tmp85
    %tmp90 = xor i32 %tmp89, undef
    %tmp91 = add i32 undef, %tmp87
    %tmp92 = xor i32 %tmp91, undef
    %tmp93 = add i32 undef, %tmp86
    %tmp94 = xor i32 %tmp93, undef
    %tmp95 = add i32 undef, %tmp88
    %tmp96 = xor i32 %tmp95, undef
    %tmp97 = add i32 %tmp92, %tmp80
    %tmp98 = add i32 %tmp97, %tmp90
    %tmp99 = add i32 %tmp98, %tmp94
    %tmp100 = add i32 %tmp99, %tmp96
    %tmp101 = add i32 undef, undef
    %tmp102 = sub i32 undef, undef
    %tmp103 = add i32 undef, undef
    %tmp104 = sub i32 undef, undef
    %tmp105 = add nsw i32 %tmp103, %tmp101
    %tmp106 = sub nsw i32 %tmp101, %tmp103
    %tmp107 = add nsw i32 %tmp104, %tmp102
    %tmp108 = sub nsw i32 %tmp102, %tmp104
    %tmp109 = add i32 undef, %tmp105
    %tmp110 = xor i32 %tmp109, undef
    %tmp111 = add i32 undef, %tmp107
    %tmp112 = xor i32 %tmp111, undef
    %tmp113 = add i32 undef, %tmp106
    %tmp114 = xor i32 %tmp113, undef
    %tmp115 = add i32 undef, %tmp108
    %tmp116 = xor i32 %tmp115, undef
    %tmp117 = add i32 %tmp112, %tmp100
    %tmp118 = add i32 %tmp117, %tmp110
    %tmp119 = add i32 %tmp118, %tmp114
    %tmp120 = add i32 %tmp119, %tmp116
    %tmp121 = add i32 undef, undef
    %tmp122 = sub i32 undef, undef
    %tmp123 = add i32 undef, undef
    %tmp124 = sub i32 undef, undef
    %tmp125 = add nsw i32 %tmp123, %tmp121
    %tmp126 = sub nsw i32 %tmp121, %tmp123
    %tmp127 = add nsw i32 %tmp124, %tmp122
    %tmp128 = sub nsw i32 %tmp122, %tmp124
    %tmp129 = add i32 undef, %tmp125
    %tmp130 = xor i32 %tmp129, undef
    %tmp131 = add i32 undef, %tmp127
    %tmp132 = xor i32 %tmp131, undef
    %tmp133 = add i32 undef, %tmp126
    %tmp134 = xor i32 %tmp133, undef
    %tmp135 = add i32 undef, %tmp128
    %tmp136 = xor i32 %tmp135, undef
    %tmp137 = add i32 %tmp132, %tmp120
    %tmp138 = add i32 %tmp137, %tmp130
    %tmp139 = add i32 %tmp138, %tmp134
    %tmp140 = add i32 %tmp139, %tmp136
    %tmp141 = add i32 undef, undef
    %tmp142 = sub i32 undef, undef
    %tmp143 = add i32 undef, undef
    %tmp144 = sub i32 undef, undef
    %tmp145 = add nsw i32 %tmp143, %tmp141
    %tmp146 = sub nsw i32 %tmp141, %tmp143
    %tmp147 = add nsw i32 %tmp144, %tmp142
    %tmp148 = sub nsw i32 %tmp142, %tmp144
    %tmp149 = add i32 undef, %tmp145
    %tmp150 = xor i32 %tmp149, undef
    %tmp151 = add i32 undef, %tmp147
    %tmp152 = xor i32 %tmp151, undef
    %tmp153 = add i32 undef, %tmp146
    %tmp154 = xor i32 %tmp153, undef
    %tmp155 = add i32 undef, %tmp148
    %tmp156 = xor i32 %tmp155, undef
    %tmp157 = add i32 %tmp152, %tmp140
    %tmp158 = add i32 %tmp157, %tmp150
    %tmp159 = add i32 %tmp158, %tmp154
    %tmp160 = add i32 %tmp159, %tmp156
    %tmp161 = and i32 %tmp160, 65535
    %tmp162 = add nuw nsw i32 %tmp161, undef
    %tmp163 = sub nsw i32 %tmp162, undef
    %tmp164 = zext i32 %tmp163 to i64
    %tmp165 = shl nuw i64 %tmp164, 32
    %tmp166 = add i64 %tmp165, undef
    ret i64 %tmp166
  }
  
  attributes #0 = { "target-features"="+64bit,+adx,+aes,+avx,+avx2" }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107966/new/

https://reviews.llvm.org/D107966



More information about the llvm-commits mailing list